summaryrefslogtreecommitdiffstats
path: root/sw/source/core/layout/frmtool.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/layout/frmtool.cxx')
-rw-r--r--sw/source/core/layout/frmtool.cxx39
1 files changed, 33 insertions, 6 deletions
diff --git a/sw/source/core/layout/frmtool.cxx b/sw/source/core/layout/frmtool.cxx
index c3fa35fcdc..eeab5c60c1 100644
--- a/sw/source/core/layout/frmtool.cxx
+++ b/sw/source/core/layout/frmtool.cxx
@@ -1025,7 +1025,7 @@ void SwContentNotify::ImplDestroy()
SwSortedObjs* pObjs = pMasterFrame->GetDrawObjs();
for (SwAnchoredObject* pAnchoredObj : *pObjs)
{
- if ( pAnchoredObj->GetFrameFormat().GetAnchor().GetAnchorId()
+ if ( pAnchoredObj->GetFrameFormat()->GetAnchor().GetAnchorId()
== RndStdIds::FLY_AT_CHAR )
{
pAnchoredObj->CheckCharRectAndTopOfLine( !pMasterFrame->IsEmpty() );
@@ -2835,7 +2835,7 @@ static void lcl_RemoveObjsFromPage( SwFrame* _pFrame )
// #115759# - remove also drawing objects from page
else if ( auto pDrawObj = dynamic_cast<SwAnchoredDrawObject*>( pObj) )
{
- if (pObj->GetFrameFormat().GetAnchor().GetAnchorId() != RndStdIds::FLY_AS_CHAR)
+ if (pObj->GetFrameFormat()->GetAnchor().GetAnchorId() != RndStdIds::FLY_AS_CHAR)
{
if (SwPageFrame *pPg = pObj->GetPageFrame())
pPg->RemoveDrawObjFromPage( *pDrawObj );
@@ -2996,7 +2996,7 @@ static void lcl_AddObjsToPage( SwFrame* _pFrame, SwPageFrame* _pPage )
// #115759# - remove also drawing objects from page
else if ( dynamic_cast<const SwAnchoredDrawObject*>( pObj) != nullptr )
{
- if (pObj->GetFrameFormat().GetAnchor().GetAnchorId() != RndStdIds::FLY_AS_CHAR)
+ if (pObj->GetFrameFormat()->GetAnchor().GetAnchorId() != RndStdIds::FLY_AS_CHAR)
{
pObj->InvalidateObjPos();
_pPage->AppendDrawObjToPage(
@@ -3404,8 +3404,10 @@ void Notify_Background( const SdrObject* pObj,
else
{
pFlyFrame = nullptr;
- pAnchor = const_cast<SwFrame*>(
- GetUserCall(pObj)->GetAnchoredObj( pObj )->GetAnchorFrame() );
+ if (SwDrawContact* pC = static_cast<SwDrawContact*>(GetUserCall(pObj)))
+ pAnchor = const_cast<SwFrame*>(pC->GetAnchoredObj(pObj)->GetAnchorFrame());
+ else
+ return;
}
if( PrepareHint::FlyFrameLeave != eHint && pAnchor->IsInFly() )
pArea = pAnchor->FindFlyFrame();
@@ -3879,7 +3881,32 @@ SwFrame* GetFrameOfModify(SwRootFrame const*const pLayout, sw::BroadcastingModif
} while( bClientIterChanged );
if( pPos && pMinFrame && pMinFrame->IsTextFrame() )
- return static_cast<SwTextFrame*>(pMinFrame)->GetFrameAtPos( *pPos );
+ {
+ SwTextFrame * pAtPos(static_cast<SwTextFrame*>(pMinFrame)->GetFrameAtPos(*pPos));
+ if (!pViewPosAndCalcFrame)
+ {
+ return pAtPos;
+ }
+ TextFrameIndex nPos(pAtPos->MapModelToViewPos(*pPos));
+ SwPageFrame const*const pPage(pAtPos->getRootFrame()->GetPageAtPos(
+ pViewPosAndCalcFrame->first, nullptr, true));
+ SwFrame * pOnPage(pAtPos); // if all else fails return first one
+ ++nPos; // follow field portions are on follow frames that have mnOffset
+ // already incremented past the field, need to check that index too
+ while (pAtPos && pAtPos->GetOffset() <= nPos)
+ {
+ if (pAtPos->getFrameArea().Contains(pViewPosAndCalcFrame->first))
+ {
+ return pAtPos;
+ }
+ if (pAtPos->FindPageFrame() == pPage)
+ {
+ pOnPage = pAtPos;
+ }
+ pAtPos = pAtPos->GetFollow();
+ }
+ return pOnPage;
+ }
return pMinFrame;
}