svx/source/table/svdotable.cxx |   20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

New commits:
commit a3f38bdaaff91abdf2e0f01d0b6370aa958e4a20
Author: Caolán McNamara <caol...@redhat.com>
Date:   Tue Dec 10 16:54:59 2013 +0000

    correctly dispose to avoid cyclic dependencies
    
    accessibility cruft is still listening to dead tables so crashes in
    slidesorting in main panel if moved slide has tables in it after visiting 
slide
    sorter once.
    
    (cherry picked from commit 0b8e2e5efe20519e8b5563314bac0cbb84a3b967)
    
    Conflicts:
        svx/source/table/svdotable.cxx
    
    Change-Id: I09f9a73b01fb2ddf059402146acdc7bd823798b9
    Reviewed-on: https://gerrit.libreoffice.org/7051
    Reviewed-by: Miklos Vajna <vmik...@collabora.co.uk>
    Tested-by: Miklos Vajna <vmik...@collabora.co.uk>

diff --git a/svx/source/table/svdotable.cxx b/svx/source/table/svdotable.cxx
index bed3988..474d42d 100644
--- a/svx/source/table/svdotable.cxx
+++ b/svx/source/table/svdotable.cxx
@@ -268,9 +268,9 @@ void SdrTableObjImpl::init( SdrTableObj* pTable, sal_Int32 
nColumns, sal_Int32 n
     mpTableObj = pTable;
     mxTable = new TableModel( pTable );
     mxTable->init( nColumns, nRows );
-    mpLayouter = new TableLayouter( mxTable );
     Reference< XModifyListener > xListener( static_cast< 
::com::sun::star::util::XModifyListener* >(this) );
     mxTable->addModifyListener( xListener );
+    mpLayouter = new TableLayouter( mxTable );
     UpdateWritingMode();
     LayoutTable( mpTableObj->aRect, true, true );
     mpTableObj->maLogicRect = mpTableObj->aRect;
@@ -282,6 +282,8 @@ SdrTableObjImpl& SdrTableObjImpl::operator=( const 
SdrTableObjImpl& rSource )
 {
     if (this != &rSource)
     {
+        disconnectTableStyle();
+
         if( mpLayouter )
         {
             delete mpLayouter;
@@ -307,6 +309,8 @@ SdrTableObjImpl& SdrTableObjImpl::operator=( const 
SdrTableObjImpl& rSource )
         ApplyCellStyles();
         mpTableObj->aRect = mpTableObj->maLogicRect;
         LayoutTable( mpTableObj->aRect, false, false );
+
+        connectTableStyle();
     }
     return *this;
 }
@@ -453,8 +457,22 @@ bool SdrTableObjImpl::ApplyCellStyles()
 
 void SdrTableObjImpl::dispose()
 {
+    disconnectTableStyle();
+    mxTableStyle.clear();
+
+    if( mpLayouter )
+    {
+        delete mpLayouter;
+        mpLayouter = 0;
+    }
+
     if( mxTable.is() )
+    {
+        Reference< XModifyListener > xListener( static_cast< 
::com::sun::star::util::XModifyListener* >(this) );
+        mxTable->removeModifyListener( xListener );
         mxTable->dispose();
+        mxTable.clear();
+    }
 }
 
 // 
-----------------------------------------------------------------------------
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to