summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/inc/frmfmt.hxx1
-rw-r--r--sw/source/core/undo/undobj1.cxx18
2 files changed, 19 insertions, 0 deletions
diff --git a/sw/inc/frmfmt.hxx b/sw/inc/frmfmt.hxx
index 2dd3c81a52f8..6c2de6c35e20 100644
--- a/sw/inc/frmfmt.hxx
+++ b/sw/inc/frmfmt.hxx
@@ -61,6 +61,7 @@ class SW_DLLPUBLIC SwFrameFormat: public SwFormat
friend class ::sw::DocumentLayoutManager; ///< Is allowed to call protected CTor.
friend class SwFrameFormats; ///< Is allowed to update the list backref.
friend class SwTextBoxHelper;
+ friend class SwUndoFlyBase; ///< calls SetOtherTextBoxFormat
css::uno::WeakReference<css::uno::XInterface> m_wXObject;
diff --git a/sw/source/core/undo/undobj1.cxx b/sw/source/core/undo/undobj1.cxx
index d35f7730cf9e..8011e77dd031 100644
--- a/sw/source/core/undo/undobj1.cxx
+++ b/sw/source/core/undo/undobj1.cxx
@@ -52,7 +52,13 @@ SwUndoFlyBase::SwUndoFlyBase( SwFrameFormat* pFormat, SwUndoId nUndoId )
SwUndoFlyBase::~SwUndoFlyBase()
{
if( bDelFormat ) // delete during an Undo?
+ {
+ if (pFrameFormat->GetOtherTextBoxFormat())
+ { // clear that before delete
+ pFrameFormat->SetOtherTextBoxFormat(nullptr);
+ }
delete pFrameFormat;
+ }
}
void SwUndoFlyBase::InsFly(::sw::UndoRedoContext & rContext, bool bShowSelFrame)
@@ -107,6 +113,13 @@ void SwUndoFlyBase::InsFly(::sw::UndoRedoContext & rContext, bool bShowSelFrame)
pCNd->GetTextNode()->InsertItem(aFormat, nCntPos, nCntPos, SetAttrMode::NOHINTEXPAND);
}
+ if (pFrameFormat->GetOtherTextBoxFormat())
+ {
+ // recklessly assume that this thing will live longer than the
+ // SwUndoFlyBase - not sure what could be done if that isn't the case...
+ pFrameFormat->GetOtherTextBoxFormat()->SetOtherTextBoxFormat(pFrameFormat);
+ }
+
pFrameFormat->MakeFrames();
if( bShowSelFrame )
@@ -146,6 +159,11 @@ void SwUndoFlyBase::DelFly( SwDoc* pDoc )
bDelFormat = true; // delete Format in DTOR
pFrameFormat->DelFrames(); // destroy Frames
+ if (pFrameFormat->GetOtherTextBoxFormat())
+ { // tdf#108867 clear that pointer
+ pFrameFormat->GetOtherTextBoxFormat()->SetOtherTextBoxFormat(nullptr);
+ }
+
// all Uno objects should now log themselves off
{
SwPtrMsgPoolItem aMsgHint( RES_REMOVE_UNO_OBJECT, pFrameFormat );