diff options
Diffstat (limited to 'sw/source/uibase/uiview/viewling.cxx')
-rw-r--r-- | sw/source/uibase/uiview/viewling.cxx | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/sw/source/uibase/uiview/viewling.cxx b/sw/source/uibase/uiview/viewling.cxx index b0142b985c58..559b9ff747b7 100644 --- a/sw/source/uibase/uiview/viewling.cxx +++ b/sw/source/uibase/uiview/viewling.cxx @@ -459,8 +459,8 @@ void SwView::HyphenateDocument() // turned on no special area { // I want also in special areas hyphenation - MessageDialog aBox(&GetEditWin(), SW_RES(STR_QUERY_SPECIAL_FORCED), VCL_MESSAGE_QUESTION, VCL_BUTTONS_YES_NO); - if( aBox.Execute() == RET_YES ) + ScopedVclPtrInstance< MessageDialog > aBox(&GetEditWin(), SW_RES(STR_QUERY_SPECIAL_FORCED), VCL_MESSAGE_QUESTION, VCL_BUTTONS_YES_NO); + if( aBox->Execute() == RET_YES ) { bOther = true; if (xProp.is()) @@ -799,18 +799,20 @@ bool SwView::ExecSmartTagPopup( const Point& rPt ) class SwFieldDialog : public FloatingWindow { private: - ListBox aListBox; + VclPtr<ListBox> aListBox; IFieldmark *pFieldmark; DECL_LINK( MyListBoxHandler, ListBox * ); public: SwFieldDialog( SwEditWin* parent, IFieldmark *fieldBM ); + virtual ~SwFieldDialog(); + virtual void dispose() SAL_OVERRIDE; }; SwFieldDialog::SwFieldDialog( SwEditWin* parent, IFieldmark *fieldBM ) : FloatingWindow( parent, WB_BORDER | WB_SYSTEMWINDOW ), - aListBox(this), + aListBox(VclPtr<ListBox>::Create(this)), pFieldmark( fieldBM ) { if ( fieldBM != NULL ) @@ -827,7 +829,7 @@ SwFieldDialog::SwFieldDialog( SwEditWin* parent, IFieldmark *fieldBM ) : pCurrent != vListEntries.getArray() + vListEntries.getLength(); ++pCurrent) { - aListBox.InsertEntry(*pCurrent); + aListBox->InsertEntry(*pCurrent); } } @@ -838,20 +840,31 @@ SwFieldDialog::SwFieldDialog( SwEditWin* parent, IFieldmark *fieldBM ) : { sal_Int32 nSelection = -1; pResult->second >>= nSelection; - aListBox.SelectEntryPos( nSelection ); + aListBox->SelectEntryPos( nSelection ); } } - Size lbSize(aListBox.GetOptimalSize()); + Size lbSize(aListBox->GetOptimalSize()); lbSize.Width()+=50; lbSize.Height()+=20; - aListBox.SetSizePixel(lbSize); - aListBox.SetSelectHdl( LINK( this, SwFieldDialog, MyListBoxHandler ) ); - aListBox.Show(); + aListBox->SetSizePixel(lbSize); + aListBox->SetSelectHdl( LINK( this, SwFieldDialog, MyListBoxHandler ) ); + aListBox->Show(); SetSizePixel( lbSize ); } +SwFieldDialog::~SwFieldDialog() +{ + disposeOnce(); +} + +void SwFieldDialog::dispose() +{ + aListBox.disposeAndClear(); + FloatingWindow::dispose(); +} + IMPL_LINK( SwFieldDialog, MyListBoxHandler, ListBox *, pBox ) { short res = 0; @@ -875,11 +888,7 @@ IMPL_LINK( SwFieldDialog, MyListBoxHandler, ListBox *, pBox ) IMPL_LINK_NOARG(SwView, FieldPopupModeEndHdl) { - if ( m_pFieldPopup ) - { - delete m_pFieldPopup; - m_pFieldPopup = NULL; - } + m_pFieldPopup.disposeAndClear(); return 0; } @@ -887,7 +896,7 @@ void SwView::ExecFieldPopup( const Point& rPt, IFieldmark *fieldBM ) { const Point aPixPos = GetEditWin().LogicToPixel( rPt ); - m_pFieldPopup = new SwFieldDialog( m_pEditWin, fieldBM ); + m_pFieldPopup = VclPtr<SwFieldDialog>::Create( m_pEditWin, fieldBM ); m_pFieldPopup->SetPopupModeEndHdl( LINK( this, SwView, FieldPopupModeEndHdl ) ); Rectangle aRect( m_pEditWin->OutputToScreenPixel( aPixPos ), Size( 0, 0 ) ); |