[Libreoffice-commits] core.git: editeng/CppunitTest_editeng_core.mk editeng/Library_editeng.mk editeng/source

Bjoern Michaelsen bjoern.michaelsen at canonical.com
Fri Mar 10 13:00:34 UTC 2017


 editeng/CppunitTest_editeng_core.mk |    1 +
 editeng/Library_editeng.mk          |    1 +
 editeng/source/editeng/impedit.hxx  |    1 +
 editeng/source/editeng/impedit2.cxx |   15 +++++++++++++--
 editeng/source/editeng/impedit5.cxx |    3 +++
 5 files changed, 19 insertions(+), 2 deletions(-)

New commits:
commit 1a044b25c279236d9f67847ec6ad426d8c5aac13
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date:   Thu Mar 9 00:35:42 2017 +0100

    tdf#99352: dispose EditEngines when SfxApp dies
    
    In an ideal world, by the time we reach DeInitVCL() there should be
    neither non-null VclPtr nor EditEngine instances around. This fixes the
    former for those VclPtrs owned by EditEngines, by disposing them when
    SfxApplication is dying. The goal is -- for now -- to not have any
    non-null VclPtrs around by DeInitVCL(), so we can e.g. assert() on that
    to pick up regressions.
    
    Should we one day have all EditEngines accounted for with proper smart
    pointers that get torn down before DeInitVCL(), the Dispose() introduced
    here might be removed again.
    
    Change-Id: I47b17f7fd31fce2ac5fd6f6b146d356d7d07e677
    Reviewed-on: https://gerrit.libreoffice.org/34985
    Reviewed-by: Björn Michaelsen <bjoern.michaelsen at canonical.com>
    Tested-by: Björn Michaelsen <bjoern.michaelsen at canonical.com>

diff --git a/editeng/CppunitTest_editeng_core.mk b/editeng/CppunitTest_editeng_core.mk
index 00d2b80..c7a9610 100644
--- a/editeng/CppunitTest_editeng_core.mk
+++ b/editeng/CppunitTest_editeng_core.mk
@@ -29,6 +29,7 @@ $(eval $(call gb_CppunitTest_use_libraries,editeng_core, \
     salhelper \
     sax \
     sot \
+    sfx \
     svl \
     svt \
     test \
diff --git a/editeng/Library_editeng.mk b/editeng/Library_editeng.mk
index c6c2fa0..88ba855 100644
--- a/editeng/Library_editeng.mk
+++ b/editeng/Library_editeng.mk
@@ -136,6 +136,7 @@ $(eval $(call gb_Library_use_libraries,editeng,\
     vcl \
     svl \
     sot \
+    sfx \
     utl \
     tl \
     comphelper \
diff --git a/editeng/source/editeng/impedit.hxx b/editeng/source/editeng/impedit.hxx
index 5a6ba26..106221f 100644
--- a/editeng/source/editeng/impedit.hxx
+++ b/editeng/source/editeng/impedit.hxx
@@ -1031,6 +1031,7 @@ public:
         mark (apostrophe) or not (default is on) */
     void            SetReplaceLeadingSingleQuotationMark( bool bReplace ) { mbReplaceLeadingSingleQuotationMark = bReplace; }
     bool            IsReplaceLeadingSingleQuotationMark() const { return mbReplaceLeadingSingleQuotationMark; }
+    void Dispose();
 };
 
 inline EPaM ImpEditEngine::CreateEPaM( const EditPaM& rPaM )
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
index 1341ec7..3338111 100644
--- a/editeng/source/editeng/impedit2.cxx
+++ b/editeng/source/editeng/impedit2.cxx
@@ -35,6 +35,7 @@
 #include <eeobj.hxx>
 #include <editeng/txtrange.hxx>
 #include <svl/urlbmk.hxx>
+#include <sfx2/app.hxx>
 #include <svtools/colorcfg.hxx>
 #include <svl/ctloptions.hxx>
 #include <editeng/acorrcfg.hxx>
@@ -163,6 +164,17 @@ ImpEditEngine::ImpEditEngine( EditEngine* pEE, SfxItemPool* pItemPool ) :
     bCallParaInsertedOrDeleted = true;
 
     aEditDoc.SetModifyHdl( LINK( this, ImpEditEngine, DocModified ) );
+    StartListening(*SfxGetpApp());
+}
+
+void ImpEditEngine::Dispose()
+{
+    SolarMutexGuard g;
+    auto pApp = SfxApplication::Get();
+    if(pApp)
+        EndListening(*pApp);
+    pVirtDev.disposeAndClear();
+    mpOwnDev.disposeAndClear();
 }
 
 ImpEditEngine::~ImpEditEngine()
@@ -177,8 +189,7 @@ ImpEditEngine::~ImpEditEngine()
     bDowning = true;
     SetUpdateMode( false );
 
-    mpOwnDev.disposeAndClear();
-    pVirtDev.disposeAndClear();
+    Dispose();
     delete pEmptyItemSet;
     delete pUndoManager;
     delete pTextRanger;
diff --git a/editeng/source/editeng/impedit5.cxx b/editeng/source/editeng/impedit5.cxx
index edf94a0..fca0358 100644
--- a/editeng/source/editeng/impedit5.cxx
+++ b/editeng/source/editeng/impedit5.cxx
@@ -26,6 +26,7 @@
 #include <editdbg.hxx>
 #include <svl/hint.hxx>
 #include <editeng/lrspitem.hxx>
+#include <sfx2/app.hxx>
 
 void ImpEditEngine::SetStyleSheetPool( SfxStyleSheetPool* pSPool )
 {
@@ -173,6 +174,8 @@ void ImpEditEngine::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
             }
         }
     }
+    if(dynamic_cast<const SfxApplication*>(&rBC) != nullptr && rHint.GetId() == SfxHintId::Dying)
+        Dispose();
 }
 
 EditUndoSetAttribs* ImpEditEngine::CreateAttribUndo( EditSelection aSel, const SfxItemSet& rSet )


More information about the Libreoffice-commits mailing list