diff options
-rw-r--r-- | editeng/CppunitTest_editeng_core.mk | 1 | ||||
-rw-r--r-- | editeng/Library_editeng.mk | 1 | ||||
-rw-r--r-- | editeng/source/editeng/impedit.hxx | 1 | ||||
-rw-r--r-- | editeng/source/editeng/impedit2.cxx | 15 | ||||
-rw-r--r-- | editeng/source/editeng/impedit5.cxx | 3 |
5 files changed, 19 insertions, 2 deletions
diff --git a/editeng/CppunitTest_editeng_core.mk b/editeng/CppunitTest_editeng_core.mk index 00d2b80527aa..c7a9610e55a9 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 c6c2fa06b666..88ba8557bb50 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 5a6ba262cd68..106221f3b195 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 1341ec7b031f..3338111fc206 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 edf94a0efd39..fca0358ae757 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 ) |