sw/source/core/doc/docfly.cxx | 26 ++++++++++++++------------ sw/source/core/layout/anchoreddrawobject.cxx | 11 ++++++----- 2 files changed, 20 insertions(+), 17 deletions(-)
New commits: commit 1b3310a5805cf50f7aca88a83768ffa5adc42a0b Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Tue Oct 20 19:19:35 2020 +0200 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Tue Oct 20 22:08:00 2020 +0200 tdf#136385 sw: fix Undo of changing anchor type There were a few problems here: 1. the changes to positions in SwAnchoredDrawObject::AdjustPositioningAttr() weren't recorded 2. the Undo of setting the anchor type ran last, which ended up calling SwDrawContact::Changed_() via some callback, which changed the position from the correct one to a wrong one 3. if the fixup for FLY_AT_PAGE is done after AdjustPositioningAttr() then that doesn't need to take into account the anchor type (regression from 1de2b0d3234462b488db54d36ebc17e2b579b0f0) Change-Id: If70408ad6140a5bec739dea176936ffcbfe3f5ed Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104571 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@cib.de> diff --git a/sw/source/core/doc/docfly.cxx b/sw/source/core/doc/docfly.cxx index e435920da879..988e59c76a58 100644 --- a/sw/source/core/doc/docfly.cxx +++ b/sw/source/core/doc/docfly.cxx @@ -932,18 +932,6 @@ bool SwDoc::ChgAnchor( const SdrMarkList& _rMrkList, // #i26791# - Direct object positioning no longer needed. Apply // of attributes (method call <SetAttr(..)>) takes care of the // invalidation of the object position. - SetAttr( aNewAnch, *pContact->GetFormat() ); - if (aNewAnch.GetAnchorId() == RndStdIds::FLY_AT_PAGE) - { - SwFormatHoriOrient item(pContact->GetFormat()->GetHoriOrient()); - sal_Int16 nRelOrient(item.GetRelationOrient()); - if (sw::GetAtPageRelOrientation(nRelOrient, false)) - { - SAL_INFO("sw.ui", "fixing horizontal RelOrientation for at-page anchor"); - item.SetRelationOrient(text::RelOrientation::PAGE_FRAME); - SetAttr(item, *pContact->GetFormat()); - } - } if ( _bPosCorr ) { // #i33313# - consider not connected 'virtual' drawing @@ -962,6 +950,20 @@ bool SwDoc::ChgAnchor( const SdrMarkList& _rMrkList, ->AdjustPositioningAttr( pNewAnchorFrame ); } } + if (aNewAnch.GetAnchorId() == RndStdIds::FLY_AT_PAGE) + { + SwFormatHoriOrient item(pContact->GetFormat()->GetHoriOrient()); + sal_Int16 nRelOrient(item.GetRelationOrient()); + if (sw::GetAtPageRelOrientation(nRelOrient, false)) + { + SAL_INFO("sw.ui", "fixing horizontal RelOrientation for at-page anchor"); + item.SetRelationOrient(nRelOrient); + SetAttr(item, *pContact->GetFormat()); + } + } + // tdf#136385 set the anchor last - otherwise it messes up the + // position in SwDrawContact::Changed_() callback + SetAttr(aNewAnch, *pContact->GetFormat()); } // we have changed the anchoring attributes, and those are used to diff --git a/sw/source/core/layout/anchoreddrawobject.cxx b/sw/source/core/layout/anchoreddrawobject.cxx index b48e307858e9..a5631667c1e5 100644 --- a/sw/source/core/layout/anchoreddrawobject.cxx +++ b/sw/source/core/layout/anchoreddrawobject.cxx @@ -793,11 +793,12 @@ void SwAnchoredDrawObject::AdjustPositioningAttr( const SwFrame* _pNewAnchorFram nVertRelPos = aObjRect.Top() - aAnchorPos.Y(); } - GetFrameFormat().SetFormatAttr( SwFormatHoriOrient( nHoriRelPos, text::HoriOrientation::NONE, - GetFrameFormat().GetAnchor().GetAnchorId() == RndStdIds::FLY_AT_PAGE - ? text::RelOrientation::PAGE_FRAME - : text::RelOrientation::FRAME ) ); - GetFrameFormat().SetFormatAttr( SwFormatVertOrient( nVertRelPos, text::VertOrientation::NONE, text::RelOrientation::FRAME ) ); + SwFormatHoriOrient hori(nHoriRelPos, text::HoriOrientation::NONE, text::RelOrientation::FRAME); + SwFormatVertOrient vert(nVertRelPos, text::VertOrientation::NONE, text::RelOrientation::FRAME); + SfxItemSet items(GetFrameFormat().GetDoc()->GetAttrPool(), svl::Items<RES_VERT_ORIENT, RES_HORI_ORIENT>()); + items.Put(hori); + items.Put(vert); + GetFrameFormat().GetDoc()->SetAttr(items, GetFrameFormat()); } // --> #i34748# - change return type. _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits