sw/inc/frmfmt.hxx | 9 ++++++++- sw/source/core/draw/dcontact.cxx | 14 ++++++++++++++ sw/source/core/layout/atrfrm.cxx | 1 + sw/source/core/undo/unattr.cxx | 21 +++++---------------- 4 files changed, 28 insertions(+), 17 deletions(-)
New commits: commit 5a7e754fa9ca42fb673f240563cdcc1bf2aef006 Author: Bjoern Michaelsen <bjoern.michael...@canonical.com> Date: Tue Dec 13 04:14:43 2016 +0100 use proper message passing Change-Id: I0bfe65fa6870b243f927004d4de0da010b338c64 Reviewed-on: https://gerrit.libreoffice.org/31929 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Björn Michaelsen <bjoern.michael...@canonical.com> diff --git a/sw/inc/frmfmt.hxx b/sw/inc/frmfmt.hxx index 14a50be..900f00d 100644 --- a/sw/inc/frmfmt.hxx +++ b/sw/inc/frmfmt.hxx @@ -245,7 +245,8 @@ namespace sw PREP_DELETE_FLY, PAGE_OUT_OF_BOUNDS, MAKE_FRAMES, - DELETE_FRAMES + DELETE_FRAMES, + POST_RESTORE_FLY_ANCHOR, }; struct SW_DLLPUBLIC DrawFrameFormatHint final: SfxHint { @@ -296,6 +297,12 @@ namespace sw WW8AnchorConvHint(WW8AnchorConvResult& rResult) : m_rResult(rResult) {}; virtual ~WW8AnchorConvHint() override; }; + struct SW_DLLPUBLIC RestoreFlyAnchorHint final : SfxHint + { + const Point m_aPos; + RestoreFlyAnchorHint(Point aPos) : m_aPos(aPos) {}; + virtual ~RestoreFlyAnchorHint() override; + }; } class SW_DLLPUBLIC SwDrawFrameFormat: public SwFrameFormat diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx index 2ef6e6d..431bc11 100644 --- a/sw/source/core/draw/dcontact.cxx +++ b/sw/source/core/draw/dcontact.cxx @@ -1512,6 +1512,9 @@ void SwDrawContact::SwClientNotify(const SwModify& rMod, const SfxHint& rHint) case sw::DrawFrameFormatHintId::MAKE_FRAMES: ConnectToLayout(); break; + case sw::DrawFrameFormatHintId::POST_RESTORE_FLY_ANCHOR: + GetAnchoredObj(GetMaster())->MakeObjPos(); + break; default: SAL_WARN("sw.core", "unhandled DrawFrameFormatHintId"); } @@ -1569,6 +1572,17 @@ void SwDrawContact::SwClientNotify(const SwModify& rMod, const SfxHint& rHint) rResult.m_aPos.setY(lcl_GetWW8Pos(pAnchoredObj, bFollowTextFlow, rResult.m_eHoriConv).getY()); rResult.m_bConverted = true; } + else if (auto pRestoreFlyAnchorHint = dynamic_cast<const sw::RestoreFlyAnchorHint*>(&rHint)) + { + SdrObject* pObj = GetMaster(); + if(GetAnchorFrame() && !pObj->IsInserted()) + { + auto pDrawModel = const_cast<SwDrawFrameFormat&>(static_cast<const SwDrawFrameFormat&>(rMod)).GetDoc()->getIDocumentDrawModelAccess().GetDrawModel(); + assert(pDrawModel); + pDrawModel->GetPage(0)->InsertObject(pObj); + } + pObj->SetRelativePos(pRestoreFlyAnchorHint->m_aPos); + } } // #i26791# diff --git a/sw/source/core/layout/atrfrm.cxx b/sw/source/core/layout/atrfrm.cxx index 9351312..230b5ed 100644 --- a/sw/source/core/layout/atrfrm.cxx +++ b/sw/source/core/layout/atrfrm.cxx @@ -3333,6 +3333,7 @@ namespace sw ContactChangedHint::~ContactChangedHint() {} DrawFormatLayoutCopyHint::~DrawFormatLayoutCopyHint() {} WW8AnchorConvHint::~WW8AnchorConvHint() {} + RestoreFlyAnchorHint::~RestoreFlyAnchorHint() {} } SwDrawFrameFormat::~SwDrawFrameFormat() diff --git a/sw/source/core/undo/unattr.cxx b/sw/source/core/undo/unattr.cxx index 4641aa0..47228ee4 100644 --- a/sw/source/core/undo/unattr.cxx +++ b/sw/source/core/undo/unattr.cxx @@ -481,24 +481,14 @@ bool SwUndoFormatAttr::RestoreFlyAnchor(::sw::UndoRedoContext & rContext) } } - SwDrawContact *pCont = nullptr; - if ( RES_DRAWFRMFMT == pFrameFormat->Which() ) { - pCont = static_cast<SwDrawContact*>(pFrameFormat->FindContactObj()); + if ( RES_DRAWFRMFMT == pFrameFormat->Which() ) + { // The Draw model also prepared an Undo object for its right positioning // which unfortunately is relative. Therefore block here a position // change of the Contact object by setting the anchor. - SdrObject* pObj = pCont->GetMaster(); - - if( pCont->GetAnchorFrame() && !pObj->IsInserted() ) { - OSL_ENSURE( pDoc->getIDocumentDrawModelAccess().GetDrawModel(), - "RestoreFlyAnchor without DrawModel" ); - pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage( 0 )->InsertObject( pObj ); - } - pObj->SetRelativePos( aDrawSavePt ); - + pFrameFormat->CallSwClientNotify(sw::RestoreFlyAnchorHint(aDrawSavePt)); // cache the old value again - m_pOldSet->Put( - SwFormatFrameSize( ATT_VAR_SIZE, aDrawOldPt.X(), aDrawOldPt.Y() ) ); + m_pOldSet->Put(SwFormatFrameSize(ATT_VAR_SIZE, aDrawOldPt.X(), aDrawOldPt.Y())); } if (FLY_AS_CHAR == aNewAnchor.GetAnchorId()) { @@ -513,8 +503,7 @@ bool SwUndoFormatAttr::RestoreFlyAnchor(::sw::UndoRedoContext & rContext) pFrameFormat->MakeFrames(); else { - SdrObject* pSdrObj = pFrameFormat->FindSdrObject(); - pCont->GetAnchoredObj(pSdrObj)->MakeObjPos(); + pFrameFormat->CallSwClientNotify(sw::DrawFrameFormatHint(sw::DrawFrameFormatHintId::POST_RESTORE_FLY_ANCHOR)); } rContext.SetSelections(pFrameFormat, nullptr);
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits