diff options
author | Michael Stahl <mstahl@redhat.com> | 2017-04-28 13:26:01 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2017-04-28 13:55:23 +0200 |
commit | 7f207fca577ef820be2aec0a442df7e8ab6e14a6 (patch) | |
tree | 2e1703c4f305d5ff66d9d056b5d0ed2661575144 /sw | |
parent | 875d9d55a3646d0a027cf776b840e7f78c7f7ab5 (diff) |
tdf#107474 sw: fix crash when deleting header with active SdrObject
The problem is that the SdrView's text edit mode remains active when
the header is deleted, which deletes the active SdrObject that is
anchored in the header.
Then the next call to SdrBeginTextEdit() will call SdrEndTextEdit()
but the mxTextEditObj WeakReference is null then and so the cleanup
code that resets the SdrOutliner's UndoManager is not called,
but then the SdrOutliner is deleted.
What's really horrible about this is that while text editing is active,
both SdrObjEditView and ImpEditEngine consider themselves the
exclusive owner of SwDoc's UndoManager.
(regression from 12a4200e8ff7f045efcc7e9d15a24b15b248c437
and d7b7c9fdfe63deec26c420efc3ff1fd73c21bb27)
Change-Id: I17c5165a03d2de1eaba8a335dfbfded56573f8a2
Diffstat (limited to 'sw')
-rw-r--r-- | sw/source/uibase/wrtsh/wrtsh1.cxx | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx index d37bfcd7a1d7..617fc2cecf20 100644 --- a/sw/source/uibase/wrtsh/wrtsh1.cxx +++ b/sw/source/uibase/wrtsh/wrtsh1.cxx @@ -1763,6 +1763,11 @@ void SwWrtShell::SetReadonlyOption(bool bSet) void SwWrtShell::ChangeHeaderOrFooter( const OUString& rStyleName, bool bHeader, bool bOn, bool bShowWarning) { + SdrView *const pSdrView = GetDrawView(); + if (pSdrView && pSdrView->IsTextEdit()) + { // tdf#107474 deleting header may delete active drawing object + pSdrView->SdrEndTextEdit(true); + } addCurrentPosition(); StartAllAction(); StartUndo( SwUndoId::HEADER_FOOTER ); // #i7983# |