sw/source/core/draw/dcontact.cxx |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

New commits:
commit 586e100507359514f298a45958c26e6b9cc7783f
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Fri Jul 14 18:51:41 2023 +0300
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Thu Sep 12 18:48:44 2024 +0500

    tdf#156287: don't try to move objects to pages other than their anchor
    
    Objects may have offset moving them outside of the current page, where
    their anchor is. This doesn't mean that they would move to another page,
    just that they will be clipped.
    
    Without this taken into account, objects which rectangle would be on
    another page, would trigger infinite loop because of their position
    invalidation in SwLayAction::FormatContent's cleanup code, where they
    will move to their correct page; and then their off-page rectangle
    would move them to another page again.
    
    Change-Id: I2b818403163041a49a3bc1640b1af9a1705fd671
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154444
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/sw/source/core/draw/dcontact.cxx b/sw/source/core/draw/dcontact.cxx
index ad2a6fe37bc0..2c0c5be60c86 100644
--- a/sw/source/core/draw/dcontact.cxx
+++ b/sw/source/core/draw/dcontact.cxx
@@ -2057,10 +2057,12 @@ void SwDrawContact::ChkPage()
     }
 
     // --> #i28701#
+    // tdf#156287: use anchor page, not current bound rectangle's page,
+    // because an object can't move to a page other than its anchor anyway
     SwPageFrame* pPg = ( maAnchoredDrawObj.GetAnchorFrame() &&
                        maAnchoredDrawObj.GetAnchorFrame()->IsPageFrame() )
                      ? GetPageFrame()
-                     : FindPage( SwRect(GetMaster()->GetCurrentBoundRect()) );
+                     : maAnchoredDrawObj.FindPageFrameOfAnchor();
     if ( GetPageFrame() == pPg )
         return;
 

Reply via email to