[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