From ffc08eac223211d3ca2d4ebadb9ccb8e26d22a5e Mon Sep 17 00:00:00 2001 From: Michael Meeks Date: Sat, 20 Jun 2015 12:46:31 +0100 Subject: tdf#92166 - dispose the SwSrcEditWindow properly. Also improve dispose method to cleanup various pointers. Also avoid crash on post dispose MouseUp event. Change-Id: Ic337a8306566d5b5c81b939be6f89f34fbcc5847 --- sw/source/uibase/docvw/srcedtw.cxx | 17 +++++++++++++---- sw/source/uibase/uiview/srcview.cxx | 2 ++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/sw/source/uibase/docvw/srcedtw.cxx b/sw/source/uibase/docvw/srcedtw.cxx index eb9dbf4b5259..c15e72dda1a7 100644 --- a/sw/source/uibase/docvw/srcedtw.cxx +++ b/sw/source/uibase/docvw/srcedtw.cxx @@ -283,13 +283,18 @@ void SwSrcEditWindow::dispose() n->removePropertiesChangeListener(listener_.get()); } aSyntaxIdle.Stop(); + if ( pOutWin ) + pOutWin->SetTextView( NULL ); + if ( pTextEngine ) { EndListening( *pTextEngine ); pTextEngine->RemoveView( pTextView ); delete pTextView; + pTextView = NULL; delete pTextEngine; + pTextEngine = NULL; } pHScrollbar.disposeAndClear(); pVScrollbar.disposeAndClear(); @@ -399,10 +404,14 @@ void TextViewOutWin::MouseButtonUp( const MouseEvent &rEvt ) if ( pTextView ) { pTextView->MouseButtonUp( rEvt ); - SfxBindings& rBindings = static_cast(GetParent())->GetSrcView()->GetViewFrame()->GetBindings(); - rBindings.Invalidate( SID_TABLE_CELL ); - rBindings.Invalidate( SID_CUT ); - rBindings.Invalidate( SID_COPY ); + SfxViewFrame *pFrame = static_cast(GetParent())->GetSrcView()->GetViewFrame(); + if ( pFrame ) + { + SfxBindings& rBindings = pFrame->GetBindings(); + rBindings.Invalidate( SID_TABLE_CELL ); + rBindings.Invalidate( SID_CUT ); + rBindings.Invalidate( SID_COPY ); + } } } diff --git a/sw/source/uibase/uiview/srcview.cxx b/sw/source/uibase/uiview/srcview.cxx index b29c8975a0b3..db8aeba32fd3 100644 --- a/sw/source/uibase/uiview/srcview.cxx +++ b/sw/source/uibase/uiview/srcview.cxx @@ -243,6 +243,8 @@ SwSrcView::~SwSrcView() (delay != 0) || !url.isEmpty()); EndListening(*pDocShell); delete pSearchItem; + + aEditWin.disposeAndClear(); } void SwSrcView::SaveContentTo(SfxMedium& rMed) -- cgit v1.2.3