summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--editeng/CppunitTest_editeng_core.mk1
-rw-r--r--editeng/Library_editeng.mk1
-rw-r--r--editeng/source/editeng/impedit.hxx1
-rw-r--r--editeng/source/editeng/impedit2.cxx15
-rw-r--r--editeng/source/editeng/impedit5.cxx3
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 )