chart2/source/model/main/ChartModel_Persistence.cxx    |   14 -
 icon-themes/elementary/cmd/32/dbviewfunctions.png      |binary
 icon-themes/elementary/cmd/lc_dbviewfunctions.png      |binary
 icon-themes/elementary_svg/cmd/32/dbviewfunctions.svg  |    2 
 icon-themes/elementary_svg/cmd/lc_dbviewfunctions.svg  |    2 
 include/svx/sdr/contact/viewcontact.hxx                |    8 
 oox/source/drawingml/table/predefined-table-styles.cxx |    6 
 sc/qa/unit/data/functions/statistical/fods/rsq.fods    |   55 +++-
 sc/source/core/data/document.cxx                       |    2 
 sc/source/core/tool/interpr3.cxx                       |    4 
 sc/source/ui/navipi/content.cxx                        |   21 -
 sc/source/ui/unoobj/chartuno.cxx                       |    2 
 sc/uiconfig/scalc/ui/managenamesdialog.ui              |    2 
 sd/qa/unit/data/pptx/tdf132472.pptx                    |binary
 sd/qa/unit/export-tests-ooxml2.cxx                     |   31 ++
 sfx2/uiconfig/ui/extrabutton.ui                        |    2 
 sfx2/uiconfig/ui/infobar.ui                            |    2 
 slideshow/Library_slideshow.mk                         |    4 
 slideshow/source/engine/effectrewinder.cxx             |   61 ----
 slideshow/source/engine/effectrewinder.hxx             |    3 
 solenv/gbuild/platform/com_GCC_defs.mk                 |    4 
 starmath/source/ElementsDockingWindow.cxx              |   12 
 svx/source/dialog/fntctrl.cxx                          |   10 
 svx/source/sdr/contact/viewcontact.cxx                 |   15 -
 svx/uiconfig/ui/navigationbar.ui                       |    2 
 sw/inc/anchoreddrawobject.hxx                          |    1 
 sw/inc/anchoredobject.hxx                              |    2 
 sw/source/core/inc/flyfrm.hxx                          |    1 
 sw/source/core/inc/flyfrms.hxx                         |    2 
 sw/source/core/inc/layact.hxx                          |    2 
 sw/source/core/layout/anchoreddrawobject.cxx           |   14 -
 sw/source/core/layout/fly.cxx                          |    5 
 sw/source/core/layout/flycnt.cxx                       |   36 ++
 sw/source/core/layout/layact.cxx                       |   41 +++
 sw/source/core/layout/objectformattertxtfrm.cxx        |  142 ++++++++++-
 sw/source/core/layout/objectformattertxtfrm.hxx        |    9 
 sw/source/core/layout/pagechg.cxx                      |    5 
 sw/source/uibase/docvw/edtwin.cxx                      |    6 
 vcl/source/control/button.cxx                          |   22 +
 vcl/source/outdev/map.cxx                              |  217 +++++++++++------
 vcl/source/uitest/uno/uiobject_uno.cxx                 |    8 
 41 files changed, 537 insertions(+), 240 deletions(-)

New commits:
commit 32d6df89c3d35e10e647bb28bd2fa2098c425c1f
Author:     Andreas Heinisch <andreas.heini...@yahoo.de>
AuthorDate: Sun Apr 25 12:23:55 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:56:44 2021 +0200

    tdf#99991 - Don't resize toplevel widget containing the options expander
    
    Change-Id: I930445e9047478b26142d049598fbe656d25d666
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114628
    Tested-by: Jenkins
    Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de>
    (cherry picked from commit dc83f99c466296caaa6b236e32b39e04ae9e6d8c)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114598

diff --git a/sc/uiconfig/scalc/ui/managenamesdialog.ui 
b/sc/uiconfig/scalc/ui/managenamesdialog.ui
index 1bade2d51e8d..5e5710e81448 100644
--- a/sc/uiconfig/scalc/ui/managenamesdialog.ui
+++ b/sc/uiconfig/scalc/ui/managenamesdialog.ui
@@ -345,7 +345,7 @@
               <object class="GtkExpander" id="more">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="resize_toplevel">True</property>
+                <property name="resize_toplevel">False</property>
                 <child>
                   <object class="GtkAlignment" id="alignment1">
                     <property name="visible">True</property>
commit d84eb7a18da93f44b1f1716e6de418e5e4365024
Author:     Pedro Pinto Silva <pedro.si...@collabora.com>
AuthorDate: Mon Apr 26 11:14:35 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:56:16 2021 +0200

    AboutDialog: imgBrand: Fix alignment
    
    The imgBrand was "centered" aligned with the text bellow which was
    resulting in not only going against the dialog layout (2 sections) but
    was also appearing "false" centered aligned:
    
    - Left section: imgAbout
    - Right section: text left aligned
    - Right section: imgBrand was not left aligned and not centered aligned
    etheir (with the dialog)
    
    Fix: Left align imgBrand to be consistent with other elements in the
    same section.
    
    Signed-off-by: Pedro Pinto Silva <pedro.si...@collabora.com>
    Change-Id: I227f67863d5b6e951c498ee7acdfadc0fac75e6c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114648
    Tested-by: Jenkins
    (cherry picked from commit 4e9df130a7f4084d1642a213792100187569900b)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114606
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>
commit 8109688c0c7f1180a72170f5010f3cfb207c3a74
Author:     Jan-Marek Glogowski <glo...@fbihome.de>
AuthorDate: Sun Apr 25 11:06:11 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:06 2021 +0200

    tdf#141887 SW don't crash on missing SwWrtShell
    
    The code assumes that SwEditWin::Command can just be called,
    while there is still an m_rView.GetWrtShell(), which is at least
    not true, if you have an IM in pre-selection and close the Writer
    window via Window decoration.
    
    Change-Id: I67d5f1f917e9b2180037babb8c70c72d75c4a7ae
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114624
    Tested-by: Jenkins
    Reviewed-by: Jan-Marek Glogowski <glo...@fbihome.de>
    (cherry picked from commit 9a1c4a10b08ccb8d874a85a2cd984fd71f08c022)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114604
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sw/source/uibase/docvw/edtwin.cxx 
b/sw/source/uibase/docvw/edtwin.cxx
index 535a9e1aaf79..e07c9fd89e6f 100644
--- a/sw/source/uibase/docvw/edtwin.cxx
+++ b/sw/source/uibase/docvw/edtwin.cxx
@@ -5346,15 +5346,15 @@ void SwEditWin::LoseFocus()
 
 void SwEditWin::Command( const CommandEvent& rCEvt )
 {
-    SwWrtShell &rSh = m_rView.GetWrtShell();
-
-    if ( !m_rView.GetViewFrame() )
+    if (!m_rView.GetViewFrame() || isDisposed())
     {
         // If ViewFrame dies shortly, no popup anymore!
         Window::Command(rCEvt);
         return;
     }
 
+    SwWrtShell &rSh = m_rView.GetWrtShell();
+
     // The command event is send to the window after a possible context
     // menu from an inplace client has been closed. Now we have the chance
     // to deactivate the inplace client without any problem regarding parent
commit 289d91fba55b25fbb577681b53d8cd7e080cacf4
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Mon Apr 26 16:14:07 2021 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:05 2021 +0200

    tdf#141914: Allow to unset modified anyway
    
    IsEnableSetModified returning true means kind of "treat this document
    as read-only". Marking object unmodified does not break this idea.
    
    Change-Id: I3efd5b3b25e2d9318702cdbf24ac5eb61aeda3ba
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114666
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    (cherry picked from commit eeb2854e085fdd9f7a38d6e952a8aedf43e90323)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114605
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/chart2/source/model/main/ChartModel_Persistence.cxx 
b/chart2/source/model/main/ChartModel_Persistence.cxx
index c505da695e73..b26cf6815d72 100644
--- a/chart2/source/model/main/ChartModel_Persistence.cxx
+++ b/chart2/source/model/main/ChartModel_Persistence.cxx
@@ -669,11 +669,15 @@ sal_Bool SAL_CALL ChartModel::isModified()
 
 void SAL_CALL ChartModel::setModified( sal_Bool bModified )
 {
-    // tdf#77007: honor parent's IsEnableSetModified
-    // Check it before LifeTimeGuard, to avoid deadlocking solar mutex and 
this guard
-    if (auto pParentShell = SfxObjectShell::GetShellFromComponent(getParent());
-        pParentShell && !pParentShell->IsEnableSetModified())
-        return;
+    // tdf#141914: allow to set *unmodified* when parent does not allow to set 
modified
+    if (bModified)
+    {
+        // tdf#77007: honor parent's IsEnableSetModified
+        // Check it before LifeTimeGuard, to avoid deadlocking solar mutex and 
this guard
+        if (auto pParentShell = 
SfxObjectShell::GetShellFromComponent(getParent());
+            pParentShell && !pParentShell->IsEnableSetModified())
+            return;
+    }
 
     apphelper::LifeTimeGuard aGuard(m_aLifeTimeManager);
     if(!aGuard.startApiCall())//@todo ? is this a long lasting call??
commit 04618fd0cfaeba12dea4cf472dc3b187104a2cae
Author:     Julien Nabet <serval2...@yahoo.fr>
AuthorDate: Sun Dec 20 11:54:30 2020 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:05 2021 +0200

    tdf#141902 Fix domain in ui files (found with ui-checkdomain.sh)
    
    Backport to 7-1 to fix a user visible problem
    
    Change-Id: I6ec07748616c6ddbe12a48077a777c91ffb8f96f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108046
    Tested-by: Jenkins
    Reviewed-by: Julien Nabet <serval2...@yahoo.fr>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114682
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sfx2/uiconfig/ui/extrabutton.ui b/sfx2/uiconfig/ui/extrabutton.ui
index 4f3d03866b69..cec9c2b676b3 100644
--- a/sfx2/uiconfig/ui/extrabutton.ui
+++ b/sfx2/uiconfig/ui/extrabutton.ui
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- Generated with glade 3.36.0 -->
-<interface domain="svt">
+<interface domain="sfx">
   <requires lib="gtk+" version="3.20"/>
   <object class="GtkBox" id="ExtraButton">
     <property name="visible">True</property>
diff --git a/sfx2/uiconfig/ui/infobar.ui b/sfx2/uiconfig/ui/infobar.ui
index 7a47a03d31c3..50b1a7cc1d1d 100644
--- a/sfx2/uiconfig/ui/infobar.ui
+++ b/sfx2/uiconfig/ui/infobar.ui
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- Generated with glade 3.36.0 -->
-<interface domain="svt">
+<interface domain="sfx">
   <requires lib="gtk+" version="3.20"/>
   <object class="GtkBox" id="InfoBar">
     <property name="visible">True</property>
diff --git a/svx/uiconfig/ui/navigationbar.ui b/svx/uiconfig/ui/navigationbar.ui
index 8d87e2b64ca9..e5b773246b74 100644
--- a/svx/uiconfig/ui/navigationbar.ui
+++ b/svx/uiconfig/ui/navigationbar.ui
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- Generated with glade 3.36.0 -->
-<interface domain="dba">
+<interface domain="svx">
   <requires lib="gtk+" version="3.20"/>
   <object class="GtkImage" id="image1">
     <property name="visible">True</property>
commit df931a6bfce2765639f9e9557a9bbd8d7e079b07
Author:     Armin Le Grand (Allotropia) <armin.le.gr...@me.com>
AuthorDate: Mon Apr 19 19:51:27 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:05 2021 +0200

    tdf#141761 Avoid vanishing FormControls
    
    For details see task documentaion, but BG is that
    a Rectangle gets not transformed in
    OutputDevice::LogicToPixel and corresponding
    methods of OutputDevice due to the given
    Rectangle.IsEmpty() == true. This ignores that
    the Rectangle has a valid position and that
    we have cases where a Rectangle is used to hold
    a Position without having a Size != 0 in X and Y.
    Thus I added transforming the Position in these
    methods in all cases - a Rectangle always has
    a valid position - and take care of Sizes that
    exist.
    This *may* need to be done different due to old
    hiccups of Rectangle itself, see explanation at
    OutputDevice::ImplLogicToDevicePixel
    Had to do it different now, see comment in map.cxx
    for expalantions.
    Also needed to adapt the ancient optical geometric
    paint position correctionsfor Buttons - these can
    get zero or negative due to using Zoom and MapMode
    settings. A Width shoul not get zero or negative.
    
    Adapted to LibreOffice-7-1 as needed.
    
    Change-Id: Ide085fbe74f9c0387de3c1bf6320b7e873238029
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114304
    Tested-by: Jenkins
    Reviewed-by: Armin Le Grand <armin.le.gr...@me.com>
    (cherry picked from commit 35e4a45260f128f353d25e2a2f2b800e6bd11d61)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114596

diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx
index 9493454d00b9..0fb24dc744a0 100644
--- a/vcl/source/control/button.cxx
+++ b/vcl/source/control/button.cxx
@@ -825,7 +825,11 @@ void PushButton::ImplDrawPushButtonContent(OutputDevice 
*pDev, DrawFlags nDrawFl
             nSymbolSize = aSize.Width() / 2;
 
         nSeparatorX = aInRect.Right() - 2*nSymbolSize;
-        aSize.AdjustWidth( -(2*nSymbolSize) );
+
+        // tdf#141761 Minimum width should be (1) Pixel, see comment
+        // with same task number above for more info
+        const tools::Long nWidthAdjust(2*nSymbolSize);
+        aSize.setWidth(std::max(static_cast<tools::Long>(1), aSize.getWidth() 
- nWidthAdjust));
 
         // center symbol rectangle in the separated area
         aSymbolRect.AdjustRight( -(nSymbolSize/2) );
@@ -1982,7 +1986,16 @@ void RadioButton::ImplDraw( OutputDevice* pDev, 
DrawFlags nDrawFlags,
             Size aSize( rSize );
             Point aPos( rPos );
             aPos.AdjustX(rImageSize.Width() + nImageSep );
-            aSize.AdjustWidth( -(rImageSize.Width() + nImageSep) );
+
+            // tdf#141761 Old (convenience?) adjustment of width may lead to 
empty
+            // or negative(!) Size, that needs to be avoided. The coordinate 
context
+            // is pixel-oriented (all Paints of Controls are, historically), so
+            // the minimum width should be '1' Pixel.
+            // Hint: nImageSep is based on Zoom (using Window::CalcZoom) and
+            // MapModes (using Window::GetDrawPixel) - so potenially a wide 
range
+            // of unpredictable values is possible
+            const tools::Long nWidthAdjust(rImageSize.Width() + nImageSep);
+            aSize.setWidth(std::max(static_cast<tools::Long>(1), 
aSize.getWidth() - nWidthAdjust));
 
             // if the text rect height is smaller than the height of the image
             // then for single lines the default should be centered text
@@ -3004,7 +3017,10 @@ void CheckBox::ImplDraw( OutputDevice* pDev, DrawFlags 
nDrawFlags,
         Size aSize( rSize );
         Point aPos( rPos );
         aPos.AdjustX(rImageSize.Width() + nImageSep );
-        aSize.AdjustWidth( -(rImageSize.Width() + nImageSep) );
+
+        // tdf#141761 See comment with same ID above
+        const tools::Long nWidthAdjust(rImageSize.Width() + nImageSep);
+        aSize.setWidth(std::max(static_cast<tools::Long>(1), aSize.getWidth() 
- nWidthAdjust));
 
         // if the text rect height is smaller than the height of the image
         // then for single lines the default should be centered text
diff --git a/vcl/source/outdev/map.cxx b/vcl/source/outdev/map.cxx
index efd8e587ce0e..3f478f2fdf88 100644
--- a/vcl/source/outdev/map.cxx
+++ b/vcl/source/outdev/map.cxx
@@ -405,23 +405,48 @@ Size OutputDevice::ImplLogicToDevicePixel( const Size& 
rLogicSize ) const
 
 tools::Rectangle OutputDevice::ImplLogicToDevicePixel( const tools::Rectangle& 
rLogicRect ) const
 {
-    if ( rLogicRect.IsEmpty() )
-        return rLogicRect;
+    // tdf#141761 IsEmpty() removed
+    // Even if rLogicRect.IsEmpty(), transform of the Position contained
+    // in the Rectangle is necessary. Due to Rectangle::Right() returning
+    // Left() when IsEmpty(), the code *could* stay unchanged (same for 
Bottom),
+    // but:
+    // The Rectangle constructor used with the four tools::Long values does not
+    // check for IsEmpty(), so to keep that state correct there are two 
possibilities:
+    // (1) Add a test to the Rectangle constructor in question
+    // (2) Do it handish here
+    // I have tried (1) first, but test Test::test_rectangle() claims that for
+    //  tools::Rectangle aRect(1, 1, 1, 1);
+    //    tools::Long(1) == aRect.GetWidth()
+    //    tools::Long(0) == aRect.getWidth()
+    // (remember: this means Left == Right == 1 -> GetWidth => 1, getWidth == 
0)
+    // so indeed tthe 1's have to go uncommened/unchecked into the data body
+    // of rectangle. Switching to (2) *is* needed, doing so
+    tools::Rectangle aRetval;
 
     if ( !mbMap )
     {
-        return tools::Rectangle( rLogicRect.Left()+mnOutOffX, 
rLogicRect.Top()+mnOutOffY,
-                          rLogicRect.Right()+mnOutOffX, 
rLogicRect.Bottom()+mnOutOffY );
+        aRetval = tools::Rectangle(
+            rLogicRect.Left()+mnOutOffX,
+            rLogicRect.Top()+mnOutOffY,
+            rLogicRect.IsWidthEmpty() ? 0 : rLogicRect.Right()+mnOutOffX,
+            rLogicRect.IsHeightEmpty() ? 0 : rLogicRect.Bottom()+mnOutOffY );
+    }
+    else
+    {
+        aRetval = tools::Rectangle(
+            ImplLogicToPixel( rLogicRect.Left()+maMapRes.mnMapOfsX, mnDPIX, 
maMapRes.mnMapScNumX, maMapRes.mnMapScDenomX )+mnOutOffX+mnOutOffOrigX,
+            ImplLogicToPixel( rLogicRect.Top()+maMapRes.mnMapOfsY, mnDPIY, 
maMapRes.mnMapScNumY, maMapRes.mnMapScDenomY )+mnOutOffY+mnOutOffOrigY,
+            rLogicRect.IsWidthEmpty() ? 0 : ImplLogicToPixel( 
rLogicRect.Right()+maMapRes.mnMapOfsX, mnDPIX, maMapRes.mnMapScNumX, 
maMapRes.mnMapScDenomX )+mnOutOffX+mnOutOffOrigX,
+            rLogicRect.IsHeightEmpty() ? 0 : ImplLogicToPixel( 
rLogicRect.Bottom()+maMapRes.mnMapOfsY, mnDPIY, maMapRes.mnMapScNumY, 
maMapRes.mnMapScDenomY )+mnOutOffY+mnOutOffOrigY );
     }
 
-    return tools::Rectangle( ImplLogicToPixel( 
rLogicRect.Left()+maMapRes.mnMapOfsX, mnDPIX,
-                                        maMapRes.mnMapScNumX, 
maMapRes.mnMapScDenomX )+mnOutOffX+mnOutOffOrigX,
-                      ImplLogicToPixel( rLogicRect.Top()+maMapRes.mnMapOfsY, 
mnDPIY,
-                                        maMapRes.mnMapScNumY, 
maMapRes.mnMapScDenomY )+mnOutOffY+mnOutOffOrigY,
-                      ImplLogicToPixel( rLogicRect.Right()+maMapRes.mnMapOfsX, 
mnDPIX,
-                                        maMapRes.mnMapScNumX, 
maMapRes.mnMapScDenomX )+mnOutOffX+mnOutOffOrigX,
-                      ImplLogicToPixel( 
rLogicRect.Bottom()+maMapRes.mnMapOfsY, mnDPIY,
-                                        maMapRes.mnMapScNumY, 
maMapRes.mnMapScDenomY )+mnOutOffY+mnOutOffOrigY );
+    if(rLogicRect.IsWidthEmpty())
+        aRetval.SetWidthEmpty();
+
+    if(rLogicRect.IsHeightEmpty())
+        aRetval.SetHeightEmpty();
+
+    return aRetval;
 }
 
 tools::Polygon OutputDevice::ImplLogicToDevicePixel( const tools::Polygon& 
rLogicPoly ) const
@@ -506,23 +531,33 @@ LineInfo OutputDevice::ImplLogicToDevicePixel( const 
LineInfo& rLineInfo ) const
 
 tools::Rectangle OutputDevice::ImplDevicePixelToLogic( const tools::Rectangle& 
rPixelRect ) const
 {
-    if ( rPixelRect.IsEmpty() )
-        return rPixelRect;
+    // tdf#141761 see comments above, IsEmpty() removed
+    tools::Rectangle aRetval;
 
     if ( !mbMap )
     {
-        return tools::Rectangle( rPixelRect.Left()-mnOutOffX, 
rPixelRect.Top()-mnOutOffY,
-                          rPixelRect.Right()-mnOutOffX, 
rPixelRect.Bottom()-mnOutOffY );
+        aRetval = tools::Rectangle(
+            rPixelRect.Left()-mnOutOffX,
+            rPixelRect.Top()-mnOutOffY,
+            rPixelRect.IsWidthEmpty() ? 0 : rPixelRect.Right()-mnOutOffX,
+            rPixelRect.IsHeightEmpty() ? 0 : rPixelRect.Bottom()-mnOutOffY );
+    }
+    else
+    {
+        aRetval = tools::Rectangle(
+            ImplPixelToLogic( rPixelRect.Left()-mnOutOffX-mnOutOffOrigX, 
mnDPIX, maMapRes.mnMapScNumX, maMapRes.mnMapScDenomX )-maMapRes.mnMapOfsX,
+            ImplPixelToLogic( rPixelRect.Top()-mnOutOffY-mnOutOffOrigY, 
mnDPIY, maMapRes.mnMapScNumY, maMapRes.mnMapScDenomY )-maMapRes.mnMapOfsY,
+            rPixelRect.IsWidthEmpty() ? 0 : ImplPixelToLogic( 
rPixelRect.Right()-mnOutOffX-mnOutOffOrigX, mnDPIX, maMapRes.mnMapScNumX, 
maMapRes.mnMapScDenomX )-maMapRes.mnMapOfsX,
+            rPixelRect.IsHeightEmpty() ? 0 : ImplPixelToLogic( 
rPixelRect.Bottom()-mnOutOffY-mnOutOffOrigY, mnDPIY, maMapRes.mnMapScNumY, 
maMapRes.mnMapScDenomY )-maMapRes.mnMapOfsY );
     }
 
-    return tools::Rectangle( ImplPixelToLogic( 
rPixelRect.Left()-mnOutOffX-mnOutOffOrigX, mnDPIX,
-                                        maMapRes.mnMapScNumX, 
maMapRes.mnMapScDenomX )-maMapRes.mnMapOfsX,
-                      ImplPixelToLogic( 
rPixelRect.Top()-mnOutOffY-mnOutOffOrigY, mnDPIY,
-                                        maMapRes.mnMapScNumY, 
maMapRes.mnMapScDenomY )-maMapRes.mnMapOfsY,
-                      ImplPixelToLogic( 
rPixelRect.Right()-mnOutOffX-mnOutOffOrigX, mnDPIX,
-                                        maMapRes.mnMapScNumX, 
maMapRes.mnMapScDenomX )-maMapRes.mnMapOfsX,
-                      ImplPixelToLogic( 
rPixelRect.Bottom()-mnOutOffY-mnOutOffOrigY, mnDPIY,
-                                        maMapRes.mnMapScNumY, 
maMapRes.mnMapScDenomY )-maMapRes.mnMapOfsY );
+    if(rPixelRect.IsWidthEmpty())
+        aRetval.SetWidthEmpty();
+
+    if(rPixelRect.IsHeightEmpty())
+        aRetval.SetHeightEmpty();
+
+    return aRetval;
 }
 
 vcl::Region OutputDevice::ImplPixelToDevicePixel( const vcl::Region& rRegion ) 
const
@@ -851,18 +886,23 @@ Size OutputDevice::LogicToPixel( const Size& rLogicSize ) 
const
 
 tools::Rectangle OutputDevice::LogicToPixel( const tools::Rectangle& 
rLogicRect ) const
 {
-
-    if ( !mbMap || rLogicRect.IsEmpty() )
+    // tdf#141761 see comments above, IsEmpty() removed
+    if ( !mbMap )
         return rLogicRect;
 
-    return tools::Rectangle( ImplLogicToPixel( rLogicRect.Left() + 
maMapRes.mnMapOfsX, mnDPIX,
-                                        maMapRes.mnMapScNumX, 
maMapRes.mnMapScDenomX )+mnOutOffOrigX,
-                      ImplLogicToPixel( rLogicRect.Top() + maMapRes.mnMapOfsY, 
mnDPIY,
-                                        maMapRes.mnMapScNumY, 
maMapRes.mnMapScDenomY )+mnOutOffOrigY,
-                      ImplLogicToPixel( rLogicRect.Right() + 
maMapRes.mnMapOfsX, mnDPIX,
-                                        maMapRes.mnMapScNumX, 
maMapRes.mnMapScDenomX )+mnOutOffOrigX,
-                      ImplLogicToPixel( rLogicRect.Bottom() + 
maMapRes.mnMapOfsY, mnDPIY,
-                                        maMapRes.mnMapScNumY, 
maMapRes.mnMapScDenomY )+mnOutOffOrigY );
+    tools::Rectangle aRetval(
+        ImplLogicToPixel( rLogicRect.Left() + maMapRes.mnMapOfsX, mnDPIX, 
maMapRes.mnMapScNumX, maMapRes.mnMapScDenomX )+mnOutOffOrigX,
+        ImplLogicToPixel( rLogicRect.Top() + maMapRes.mnMapOfsY, mnDPIY, 
maMapRes.mnMapScNumY, maMapRes.mnMapScDenomY )+mnOutOffOrigY,
+        rLogicRect.IsWidthEmpty() ? 0 : ImplLogicToPixel( rLogicRect.Right() + 
maMapRes.mnMapOfsX, mnDPIX, maMapRes.mnMapScNumX, maMapRes.mnMapScDenomX 
)+mnOutOffOrigX,
+        rLogicRect.IsHeightEmpty() ? 0 : ImplLogicToPixel( rLogicRect.Bottom() 
+ maMapRes.mnMapOfsY, mnDPIY, maMapRes.mnMapScNumY, maMapRes.mnMapScDenomY 
)+mnOutOffOrigY );
+
+    if(rLogicRect.IsWidthEmpty())
+        aRetval.SetWidthEmpty();
+
+    if(rLogicRect.IsHeightEmpty())
+        aRetval.SetHeightEmpty();
+
+    return aRetval;
 }
 
 tools::Polygon OutputDevice::LogicToPixel( const tools::Polygon& rLogicPoly ) 
const
@@ -987,22 +1027,27 @@ Size OutputDevice::LogicToPixel( const Size& rLogicSize,
 tools::Rectangle OutputDevice::LogicToPixel( const tools::Rectangle& 
rLogicRect,
                                       const MapMode& rMapMode ) const
 {
-
-    if ( rMapMode.IsDefault() || rLogicRect.IsEmpty() )
+    // tdf#141761 see comments above, IsEmpty() removed
+    if ( rMapMode.IsDefault() )
         return rLogicRect;
 
     // convert MapMode resolution and convert
     ImplMapRes          aMapRes;
     ImplCalcMapResolution(rMapMode, mnDPIX, mnDPIY, aMapRes);
 
-    return tools::Rectangle( ImplLogicToPixel( rLogicRect.Left() + 
aMapRes.mnMapOfsX, mnDPIX,
-                                        aMapRes.mnMapScNumX, 
aMapRes.mnMapScDenomX )+mnOutOffOrigX,
-                      ImplLogicToPixel( rLogicRect.Top() + aMapRes.mnMapOfsY, 
mnDPIY,
-                                        aMapRes.mnMapScNumY, 
aMapRes.mnMapScDenomY )+mnOutOffOrigY,
-                      ImplLogicToPixel( rLogicRect.Right() + 
aMapRes.mnMapOfsX, mnDPIX,
-                                        aMapRes.mnMapScNumX, 
aMapRes.mnMapScDenomX )+mnOutOffOrigX,
-                      ImplLogicToPixel( rLogicRect.Bottom() + 
aMapRes.mnMapOfsY, mnDPIY,
-                                        aMapRes.mnMapScNumY, 
aMapRes.mnMapScDenomY )+mnOutOffOrigY );
+    tools::Rectangle aRetval(
+        ImplLogicToPixel( rLogicRect.Left() + aMapRes.mnMapOfsX, mnDPIX, 
aMapRes.mnMapScNumX, aMapRes.mnMapScDenomX )+mnOutOffOrigX,
+        ImplLogicToPixel( rLogicRect.Top() + aMapRes.mnMapOfsY, mnDPIY, 
aMapRes.mnMapScNumY, aMapRes.mnMapScDenomY )+mnOutOffOrigY,
+        rLogicRect.IsWidthEmpty() ? 0 : ImplLogicToPixel( rLogicRect.Right() + 
aMapRes.mnMapOfsX, mnDPIX,   aMapRes.mnMapScNumX, aMapRes.mnMapScDenomX 
)+mnOutOffOrigX,
+        rLogicRect.IsHeightEmpty() ? 0 : ImplLogicToPixel( rLogicRect.Bottom() 
+ aMapRes.mnMapOfsY, mnDPIY, aMapRes.mnMapScNumY, aMapRes.mnMapScDenomY 
)+mnOutOffOrigY );
+
+    if(rLogicRect.IsWidthEmpty())
+        aRetval.SetWidthEmpty();
+
+    if(rLogicRect.IsHeightEmpty())
+        aRetval.SetHeightEmpty();
+
+    return aRetval;
 }
 
 tools::Polygon OutputDevice::LogicToPixel( const tools::Polygon& rLogicPoly,
@@ -1072,18 +1117,23 @@ Size OutputDevice::PixelToLogic( const Size& 
rDeviceSize ) const
 
 tools::Rectangle OutputDevice::PixelToLogic( const tools::Rectangle& 
rDeviceRect ) const
 {
-
-    if ( !mbMap || rDeviceRect.IsEmpty() )
+    // tdf#141761 see comments above, IsEmpty() removed
+    if ( !mbMap )
         return rDeviceRect;
 
-    return tools::Rectangle( ImplPixelToLogic( rDeviceRect.Left(), mnDPIX,
-                                        maMapRes.mnMapScNumX, 
maMapRes.mnMapScDenomX ) - maMapRes.mnMapOfsX - mnOutOffLogicX,
-                      ImplPixelToLogic( rDeviceRect.Top(), mnDPIY,
-                                        maMapRes.mnMapScNumY, 
maMapRes.mnMapScDenomY ) - maMapRes.mnMapOfsY - mnOutOffLogicY,
-                      ImplPixelToLogic( rDeviceRect.Right(), mnDPIX,
-                                        maMapRes.mnMapScNumX, 
maMapRes.mnMapScDenomX ) - maMapRes.mnMapOfsX - mnOutOffLogicX,
-                      ImplPixelToLogic( rDeviceRect.Bottom(), mnDPIY,
-                                        maMapRes.mnMapScNumY, 
maMapRes.mnMapScDenomY ) - maMapRes.mnMapOfsY - mnOutOffLogicY );
+    tools::Rectangle aRetval(
+        ImplPixelToLogic( rDeviceRect.Left(), mnDPIX, maMapRes.mnMapScNumX, 
maMapRes.mnMapScDenomX ) - maMapRes.mnMapOfsX - mnOutOffLogicX,
+        ImplPixelToLogic( rDeviceRect.Top(), mnDPIY, maMapRes.mnMapScNumY, 
maMapRes.mnMapScDenomY ) - maMapRes.mnMapOfsY - mnOutOffLogicY,
+        rDeviceRect.IsWidthEmpty() ? 0 : ImplPixelToLogic( 
rDeviceRect.Right(), mnDPIX, maMapRes.mnMapScNumX, maMapRes.mnMapScDenomX ) - 
maMapRes.mnMapOfsX - mnOutOffLogicX,
+        rDeviceRect.IsHeightEmpty() ? 0 : ImplPixelToLogic( 
rDeviceRect.Bottom(), mnDPIY, maMapRes.mnMapScNumY, maMapRes.mnMapScDenomY ) - 
maMapRes.mnMapOfsY - mnOutOffLogicY );
+
+    if(rDeviceRect.IsWidthEmpty())
+        aRetval.SetWidthEmpty();
+
+    if(rDeviceRect.IsHeightEmpty())
+        aRetval.SetHeightEmpty();
+
+    return aRetval;
 }
 
 tools::Polygon OutputDevice::PixelToLogic( const tools::Polygon& rDevicePoly ) 
const
@@ -1210,23 +1260,28 @@ Size OutputDevice::PixelToLogic( const Size& 
rDeviceSize,
 tools::Rectangle OutputDevice::PixelToLogic( const tools::Rectangle& 
rDeviceRect,
                                       const MapMode& rMapMode ) const
 {
-
     // calculate nothing if default-MapMode
-    if ( rMapMode.IsDefault() || rDeviceRect.IsEmpty() )
+    // tdf#141761 see comments above, IsEmpty() removed
+    if ( rMapMode.IsDefault() )
         return rDeviceRect;
 
     // calculate MapMode-resolution and convert
     ImplMapRes          aMapRes;
     ImplCalcMapResolution(rMapMode, mnDPIX, mnDPIY, aMapRes);
 
-    return tools::Rectangle( ImplPixelToLogic( rDeviceRect.Left(), mnDPIX,
-                                        aMapRes.mnMapScNumX, 
aMapRes.mnMapScDenomX ) - aMapRes.mnMapOfsX - mnOutOffLogicX,
-                      ImplPixelToLogic( rDeviceRect.Top(), mnDPIY,
-                                        aMapRes.mnMapScNumY, 
aMapRes.mnMapScDenomY ) - aMapRes.mnMapOfsY - mnOutOffLogicY,
-                      ImplPixelToLogic( rDeviceRect.Right(), mnDPIX,
-                                        aMapRes.mnMapScNumX, 
aMapRes.mnMapScDenomX ) - aMapRes.mnMapOfsX - mnOutOffLogicX,
-                      ImplPixelToLogic( rDeviceRect.Bottom(), mnDPIY,
-                                        aMapRes.mnMapScNumY, 
aMapRes.mnMapScDenomY ) - aMapRes.mnMapOfsY - mnOutOffLogicY );
+    tools::Rectangle aRetval(
+        ImplPixelToLogic( rDeviceRect.Left(), mnDPIX, aMapRes.mnMapScNumX, 
aMapRes.mnMapScDenomX ) - aMapRes.mnMapOfsX - mnOutOffLogicX,
+        ImplPixelToLogic( rDeviceRect.Top(), mnDPIY, aMapRes.mnMapScNumY, 
aMapRes.mnMapScDenomY ) - aMapRes.mnMapOfsY - mnOutOffLogicY,
+        rDeviceRect.IsWidthEmpty() ? 0 : ImplPixelToLogic( 
rDeviceRect.Right(), mnDPIX, aMapRes.mnMapScNumX, aMapRes.mnMapScDenomX ) - 
aMapRes.mnMapOfsX - mnOutOffLogicX,
+        rDeviceRect.IsHeightEmpty() ? 0 : ImplPixelToLogic( 
rDeviceRect.Bottom(), mnDPIY, aMapRes.mnMapScNumY, aMapRes.mnMapScDenomY ) - 
aMapRes.mnMapOfsY - mnOutOffLogicY );
+
+    if(rDeviceRect.IsWidthEmpty())
+        aRetval.SetWidthEmpty();
+
+    if(rDeviceRect.IsHeightEmpty())
+        aRetval.SetHeightEmpty();
+
+    return aRetval;
 }
 
 tools::Polygon OutputDevice::PixelToLogic( const tools::Polygon& rDevicePoly,
@@ -1695,18 +1750,20 @@ tools::Rectangle OutputDevice::LogicToLogic( const 
tools::Rectangle& rRectSource
     MapUnit eUnitDest   = rMapModeDest.GetMapUnit();
     verifyUnitSourceDest( eUnitSource, eUnitDest );
 
+    tools::Rectangle aRetval;
+
     if (rMapModeSource.IsSimple() && rMapModeDest.IsSimple())
     {
         ENTER3( eUnitSource, eUnitDest );
 
-        auto left = fn3( rRectSource.Left(), nNumerator, nDenominator );
-        auto top = fn3( rRectSource.Top(), nNumerator, nDenominator );
-        if (rRectSource.IsEmpty())
-            return tools::Rectangle( left, top );
+        auto left = fn3(rRectSource.Left(), nNumerator, nDenominator);
+        auto top = fn3(rRectSource.Top(), nNumerator, nDenominator);
+
+        // tdf#141761 see comments above, IsEmpty() removed
+        auto right = rRectSource.IsWidthEmpty() ? 0 : fn3(rRectSource.Right(), 
nNumerator, nDenominator);
+        auto bottom = rRectSource.IsHeightEmpty() ? 0 : 
fn3(rRectSource.Bottom(), nNumerator, nDenominator);
 
-        auto right = fn3( rRectSource.Right(), nNumerator, nDenominator );
-        auto bottom = fn3( rRectSource.Bottom(), nNumerator, nDenominator );
-        return tools::Rectangle(left, top, right, bottom);
+        aRetval = tools::Rectangle(left, top, right, bottom);
     }
     else
     {
@@ -1720,19 +1777,27 @@ tools::Rectangle OutputDevice::LogicToLogic( const 
tools::Rectangle& rRectSource
                                aMapResSource.mnMapScNumY, 
aMapResDest.mnMapScDenomY,
                                aMapResSource.mnMapScDenomY, 
aMapResDest.mnMapScNumY ) -
                           aMapResDest.mnMapOfsY;
-        if (rRectSource.IsEmpty())
-            return tools::Rectangle(left, top);
 
-        auto right = fn5( rRectSource.Right() + aMapResSource.mnMapOfsX,
+        // tdf#141761 see comments above, IsEmpty() removed
+        auto right = rRectSource.IsWidthEmpty() ? 0 : fn5( rRectSource.Right() 
+ aMapResSource.mnMapOfsX,
                                aMapResSource.mnMapScNumX, 
aMapResDest.mnMapScDenomX,
                                aMapResSource.mnMapScDenomX, 
aMapResDest.mnMapScNumX ) -
                           aMapResDest.mnMapOfsX;
-        auto bottom = fn5( rRectSource.Bottom() + aMapResSource.mnMapOfsY,
+        auto bottom = rRectSource.IsHeightEmpty() ? 0 : fn5( 
rRectSource.Bottom() + aMapResSource.mnMapOfsY,
                                aMapResSource.mnMapScNumY, 
aMapResDest.mnMapScDenomY,
                                aMapResSource.mnMapScDenomY, 
aMapResDest.mnMapScNumY ) -
                           aMapResDest.mnMapOfsY;
-        return tools::Rectangle(left, top, right, bottom);
+
+        aRetval = tools::Rectangle(left, top, right, bottom);
     }
+
+    if(rRectSource.IsWidthEmpty())
+        aRetval.SetWidthEmpty();
+
+    if(rRectSource.IsHeightEmpty())
+        aRetval.SetHeightEmpty();
+
+    return aRetval;
 }
 
 tools::Long OutputDevice::LogicToLogic( tools::Long nLongSource,
commit 868586bcb0f1163eed701fa38685e398d3ab7374
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Fri Apr 23 12:49:52 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:04 2021 +0200

    vcl: use SolarMutexGuard when accessing UIObjectUnoObj::mpObj
    
    This recently crashed in jenkins, in UITest_sw_navigator:
    
    Thread 1 (Thread 0x2b46be801700 (LWP 8577)):
    0  rtl::Reference<vcl::Window>::get() const (this=0x9999999999999a21)
    1  VclPtr<vcl::Window>::operator vcl::Window*() const 
(this=0x9999999999999a19)
    2  vcl::Window::GetChildCount() const (this=0x2636360)
    [...]
    13 WindowUIObject::get_children() const (this=0x1899cd0)
    14 UIObjectUnoObj::getChildren() (this=0x18986f0)
    15 non-virtual thunk to UIObjectUnoObj::getChildren()
    16 gcc3::callVirtualMethod(void*, unsigned int, void*, 
_typelib_TypeDescriptionReference*, bool, unsigned long*, unsigned int, 
unsigned long*, double*)
    
    Change-Id: I190738a436e4cd957362f5bb2cd8993c8424512a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114541
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit e7d302a9a540394264bfe813d4eb74d76b94802c)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114599
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/vcl/source/uitest/uno/uiobject_uno.cxx 
b/vcl/source/uitest/uno/uiobject_uno.cxx
index 593f4a4c11fe..75899c9bc12c 100644
--- a/vcl/source/uitest/uno/uiobject_uno.cxx
+++ b/vcl/source/uitest/uno/uiobject_uno.cxx
@@ -162,7 +162,12 @@ css::uno::Sequence<OUString> UIObjectUnoObj::getChildren()
     if (!mpObj)
         throw css::uno::RuntimeException();
 
-    std::set<OUString> aChildren = mpObj->get_children();
+    std::set<OUString> aChildren;
+
+    {
+        SolarMutexGuard aGuard;
+        aChildren = mpObj->get_children();
+    }
 
     css::uno::Sequence<OUString> aRet(aChildren.size());
     sal_Int32 i = 0;
@@ -180,6 +185,7 @@ OUString SAL_CALL UIObjectUnoObj::getType()
     if (!mpObj)
         throw css::uno::RuntimeException();
 
+    SolarMutexGuard aGuard;
     return mpObj->get_type();
 }
 
commit c84d0ca5da57c249848d18e890ac4bcdcb6402f1
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Thu Apr 22 14:10:57 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:04 2021 +0200

    tdf#132472: do not set text color when table style is 'Themed-Style-2'
    
    and it has no Accent
    
    Regression from 2c3f7d4ee0a0b2bf6efc41670645bd361f1b76ef
    < tdf#107604 Handle predefined table styles. >
    
    Change-Id: Id9ab5b20825e2eaf8cc138c108608fe446f33db4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114477
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>
    (cherry picked from commit 54f7c32beca5a9c99d7316dc38818edad55f7415)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114497
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/oox/source/drawingml/table/predefined-table-styles.cxx 
b/oox/source/drawingml/table/predefined-table-styles.cxx
index 4a8aec4cef1a..ea68911112a0 100644
--- a/oox/source/drawingml/table/predefined-table-styles.cxx
+++ b/oox/source/drawingml/table/predefined-table-styles.cxx
@@ -516,11 +516,11 @@ std::unique_ptr<TableStyle> CreateTableStyle(const 
OUString& styleId)
     }
     else if (style_name == "Themed-Style-2")
     {
-        wholeTblTextColor.setSchemeClr(XML_lt1);
-        firstRowTextColor.setSchemeClr(XML_lt1);
-
         if (!accent_name.isEmpty())
         {
+            wholeTblTextColor.setSchemeClr(XML_lt1);
+            firstRowTextColor.setSchemeClr(XML_lt1);
+
             accent_val = tokens[mStyleIdMap[styleId].second];
 
             pTblBgFillProperties->maFillColor.setSchemeClr(accent_val);
diff --git a/sd/qa/unit/data/pptx/tdf132472.pptx 
b/sd/qa/unit/data/pptx/tdf132472.pptx
new file mode 100644
index 000000000000..e7873dcd5090
Binary files /dev/null and b/sd/qa/unit/data/pptx/tdf132472.pptx differ
diff --git a/sd/qa/unit/export-tests-ooxml2.cxx 
b/sd/qa/unit/export-tests-ooxml2.cxx
index 10a2b5371e26..0b4778eebbd8 100644
--- a/sd/qa/unit/export-tests-ooxml2.cxx
+++ b/sd/qa/unit/export-tests-ooxml2.cxx
@@ -95,6 +95,7 @@ public:
     void testTdf123090();
     void testTdf126324();
     void testTdf119187();
+    void testTdf132472();
     void testTdf80224();
     void testExportTransitionsPPTX();
     void testPresetShapesExport();
@@ -218,6 +219,7 @@ public:
     CPPUNIT_TEST(testTdf123090);
     CPPUNIT_TEST(testTdf126324);
     CPPUNIT_TEST(testTdf119187);
+    CPPUNIT_TEST(testTdf132472);
     CPPUNIT_TEST(testTdf80224);
     CPPUNIT_TEST(testExportTransitionsPPTX);
     CPPUNIT_TEST(testPresetShapesExport);
@@ -610,6 +612,35 @@ void SdOOXMLExportTest2::testTdf119187()
     }
 }
 
+void SdOOXMLExportTest2::testTdf132472()
+{
+    sd::DrawDocShellRef xDocShRef = loadURL( 
m_directories.getURLFromSrc(u"/sd/qa/unit/data/pptx/tdf132472.pptx"), PPTX );
+    const SdrPage *pPage = GetPage( 1, xDocShRef );
+
+    sdr::table::SdrTableObj *pTableObj = 
dynamic_cast<sdr::table::SdrTableObj*>(pPage->GetObj(0));
+    CPPUNIT_ASSERT( pTableObj );
+
+    uno::Reference< table::XCellRange > xTable(pTableObj->getTable(), 
uno::UNO_QUERY_THROW);
+    uno::Reference< beans::XPropertySet > xCell;
+    Color nColor;
+
+    xCell.set(xTable->getCellByPosition(0, 0), uno::UNO_QUERY_THROW);
+    xCell->getPropertyValue("FillColor") >>= nColor;
+    CPPUNIT_ASSERT_EQUAL(Color(0x729fcf), nColor);
+
+    uno::Reference<text::XTextRange> xParagraph(getParagraphFromShape(0, 
xCell));
+    uno::Reference<text::XTextRange> xRun(getRunFromParagraph(0, xParagraph));
+    uno::Reference<beans::XPropertySet> xPropSet(xRun, uno::UNO_QUERY);
+    xPropSet->getPropertyValue("CharColor") >>= nColor;
+
+    // Without the fix in place, this test would have failed with
+    // - Expected: Color: R:0 G:0 B:0 A:0
+    // - Actual  : Color: R:255 G:255 B:255 A:0
+    CPPUNIT_ASSERT_EQUAL(COL_BLACK, nColor);
+
+    xDocShRef->DoClose();
+}
+
 void SdOOXMLExportTest2::testTdf80224()
 {
     ::sd::DrawDocShellRef xDocShRef = loadURL( 
m_directories.getURLFromSrc("/sd/qa/unit/data/odp/tdf80224.odp"), ODP);
commit be6f04ac60e597c57e097002df23792fdb8a27a9
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Tue Apr 20 12:47:40 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:03 2021 +0200

    Revert "tdf#125949 Allow the slide to continue with ..." (tdf#133447)
    
    These animations were causing problems because of Cairo not handling
    well large matrix values. With the real problem fixed this can now
    be reverted. I assume the commit claiming to occur with OpenGL was
    a mistake, I cannot reproduce any problem, or possibly the problem
    went away when the OpenGL VCL backend was removed.
    
    This reverts commit 8eb2d2972583b909a249f5b0f22a9b1fbf533d24.
    This reverts commit 3e88fc6b0eef06e1e12fcfe765e3092c6c06ce5c.
    
    Change-Id: I1c1fff94ff65c7937197a32176a8775ecb2a502e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114345
    Tested-by: Luboš Luňák <l.lu...@collabora.com>
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>
    (cherry picked from commit 093f90fa9bf71174c08c271fc9ac1469af504441)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114420
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/slideshow/Library_slideshow.mk b/slideshow/Library_slideshow.mk
index 3ff098c01639..de589f210602 100644
--- a/slideshow/Library_slideshow.mk
+++ b/slideshow/Library_slideshow.mk
@@ -32,10 +32,6 @@ $(eval $(call gb_Library_use_externals,slideshow,\
  ))
 endif
 
-$(eval $(call gb_Library_use_custom_headers,slideshow,\
-       officecfg/registry \
-))
-
 $(eval $(call gb_Library_use_sdk_api,slideshow))
 
 $(eval $(call gb_Library_use_libraries,slideshow,\
diff --git a/slideshow/source/engine/effectrewinder.cxx 
b/slideshow/source/engine/effectrewinder.cxx
index 55666b752bc4..403b8fde244b 100644
--- a/slideshow/source/engine/effectrewinder.cxx
+++ b/slideshow/source/engine/effectrewinder.cxx
@@ -28,11 +28,8 @@
 #include <com/sun/star/animations/Event.hpp>
 #include <com/sun/star/animations/EventTrigger.hpp>
 #include <com/sun/star/container/XEnumerationAccess.hpp>
-#include <com/sun/star/animations/XAnimate.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
 
-#include <officecfg/Office/Canvas.hxx>
-
 using ::com::sun::star::uno::Reference;
 using namespace ::com::sun::star;
 
@@ -312,66 +309,9 @@ bool EffectRewinder::resetEffectCount()
     return false;
 }
 
-bool EffectRewinder::hasBlockedAnimation( const 
css::uno::Reference<css::animations::XAnimationNode>& xNode)
-{
-    bool isShapeTarget = false;;
-    OUString preset_id;
-    OUString preset_sub_type;
-    OUString preset_property;
-
-    if (xNode->getUserData().getLength())
-    {
-        for(int i = 0; i < xNode->getUserData().getLength(); i++)
-        {
-            if(xNode->getUserData()[i].Name == "preset-id")
-                xNode->getUserData()[i].Value >>= preset_id;
-            if(xNode->getUserData()[i].Name == "preset-sub-type")
-                xNode->getUserData()[i].Value >>= preset_sub_type;
-            if(xNode->getUserData()[i].Name == "preset-property")
-                xNode->getUserData()[i].Value >>= preset_property;
-        }
-    }
-
-    uno::Reference<container::XEnumerationAccess> xEnumerationAccess (xNode, 
uno::UNO_QUERY);
-    if (xEnumerationAccess.is())
-    {
-        uno::Reference<container::XEnumeration> xEnumeration (
-            xEnumerationAccess->createEnumeration());
-        if (xEnumeration.is())
-            while (xEnumeration->hasMoreElements())
-            {
-                uno::Reference<animations::XAnimationNode> xNext 
(xEnumeration->nextElement(), uno::UNO_QUERY);
-                uno::Reference<animations::XAnimate> xAnimate( xNext, 
uno::UNO_QUERY );
-
-                if(xAnimate.is())
-                {
-                    uno::Reference< drawing::XShape > xShape( 
xAnimate->getTarget(), uno::UNO_QUERY );
-
-                    if (xShape.is() || xAnimate->getTarget().getValueType() == 
cppu::UnoType<void>::get())
-                        isShapeTarget=true;
-                }
-            }
-    }
-
-    if(isShapeTarget &&
-       ((preset_id == "ooo-entrance-zoom" && preset_sub_type == "in") || // 
Entrance Zoom In
-        (preset_id == "ooo-entrance-swivel" )                         || // 
Entrance Swivel
-        (preset_id == "ooo-entrance-spiral-in")                       || // 
Entrance Spiral-In
-        (preset_id == "ooo-entrance-stretchy")))                         // 
Entrance Stretchy
-        return true;
-
-    return false;
-}
 
 bool EffectRewinder::notifyAnimationStart (const AnimationNodeSharedPtr& 
rpNode)
 {
-    Reference<animations::XAnimationNode> xNode (rpNode->getXAnimationNode());
-
-    if( xNode.is() &&
-        !officecfg::Office::Canvas::ForceSafeServiceImpl::get() &&
-        hasBlockedAnimation(xNode) )
-        skipSingleMainSequenceEffects();
-
     // This notification is only relevant for us when the rpNode belongs to
     // the main sequence.
     BaseNodeSharedPtr pBaseNode 
(::std::dynamic_pointer_cast<BaseNode>(rpNode));
@@ -386,6 +326,7 @@ bool EffectRewinder::notifyAnimationStart (const 
AnimationNodeSharedPtr& rpNode)
     // triggered.
     bool bIsUserTriggered (false);
 
+    Reference<animations::XAnimationNode> xNode (rpNode->getXAnimationNode());
     if (xNode.is())
     {
         animations::Event aEvent;
diff --git a/slideshow/source/engine/effectrewinder.hxx 
b/slideshow/source/engine/effectrewinder.hxx
index 8084b03f6248..093259785c93 100644
--- a/slideshow/source/engine/effectrewinder.hxx
+++ b/slideshow/source/engine/effectrewinder.hxx
@@ -102,9 +102,6 @@ public:
     */
     void skipAllMainSequenceEffects();
 
-    //FIXME: That is an opengl issue(it doesn't allow to animate some 
animations), remove that function when opengl fixed.
-    static bool hasBlockedAnimation( const 
css::uno::Reference<css::animations::XAnimationNode>& xNode);
-
 private:
     EventMultiplexer& mrEventMultiplexer;
     EventQueue& mrEventQueue;
commit 1c06d7f2d3fd4d711190422f96fd8da6756c5963
Author:     scito <i...@scito.ch>
AuthorDate: Fri Apr 23 11:07:46 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:03 2021 +0200

    tdf#95554 fix ScDocument::GetClipArea() for rows: use > instead of <
    
    I did not write any tests, as the multi range copying to system clipboard
    has another issue, see  tdf#141847
    
    Change-Id: I3af58d68370038274a07d753809fb4ceca9016f9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114534
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>
    Tested-by: Jenkins
    (cherry picked from commit 7c1e22152ed1a1837782a55fc9997f8e7801681b)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114510
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>

diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 5911cb686cb5..77c61d626a4b 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -3134,7 +3134,7 @@ void ScDocument::GetClipArea(SCCOL& nClipX, SCROW& 
nClipY, bool bIncludeFiltered
             nStartRow = rRange2.aStart.Row();
         if (rRange2.aEnd.Col() > nEndCol)
             nEndCol = rRange2.aEnd.Col();
-        if (rRange2.aEnd.Row() < nEndRow)
+        if (rRange2.aEnd.Row() > nEndRow)
             nEndRow = rRange2.aEnd.Row();
     }
 
commit 66b3c3f63832f810bc75dc8366ad595d5796e05c
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Fri Apr 23 17:15:57 2021 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:02 2021 +0200

    Related: tdf#130326: GetDrawNames doesn't do anything when 
!bisInNavigatoeDlg
    
    so return early instead of looping to do nothing
    
    Change-Id: Ibb8fe1409a8e66d37d51d9a1b99ce135f36b9522
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114589
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sc/source/ui/navipi/content.cxx b/sc/source/ui/navipi/content.cxx
index 9383f343bfc0..9ec35128176b 100644
--- a/sc/source/ui/navipi/content.cxx
+++ b/sc/source/ui/navipi/content.cxx
@@ -863,6 +863,9 @@ bool ScContentTree::IsPartOfType( ScContentId nContentType, 
sal_uInt16 nObjIdent
 
 void ScContentTree::GetDrawNames( ScContentId nType )
 {
+    if (!bisInNavigatoeDlg)
+        return;
+
     if ( nRootType != ScContentId::ROOT && nRootType != nType )              
// hidden ?
         return;
 
@@ -894,19 +897,15 @@ void ScContentTree::GetDrawNames( ScContentId nType )
                     OUString aName = ScDrawLayer::GetVisibleName( pObject );
                     if (!aName.isEmpty())
                     {
-                        if( bisInNavigatoeDlg )
+                        weld::TreeIter* pParent = m_aRootNodes[nType].get();
+                        if (pParent)
                         {
-                            weld::TreeIter* pParent = 
m_aRootNodes[nType].get();
-                            if (pParent)
-                            {
-                                m_xTreeView->insert(pParent, -1, &aName, 
nullptr, nullptr, nullptr, false, m_xScratchIter.get());
-                                m_xTreeView->set_sensitive(*m_xScratchIter, 
true);
-                            }//end if parent
-                            else
-                                SAL_WARN("sc", "InsertContent without parent");
-                        }
+                            m_xTreeView->insert(pParent, -1, &aName, nullptr, 
nullptr, nullptr, false, m_xScratchIter.get());
+                            m_xTreeView->set_sensitive(*m_xScratchIter, true);
+                        }//end if parent
+                        else
+                            SAL_WARN("sc", "InsertContent without parent");
                     }
-
                 }
 
                 pObject = aIter.Next();
commit a521747c51eb77b03ffad8a212677bb1d32d042f
Author:     Rizal Muttaqin <riz_17_...@yahoo.co.id>
AuthorDate: Sat Apr 24 11:03:08 2021 +0700
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:02 2021 +0200

    elementary: tdf#141823 unify function icons
    
    Change-Id: I01a3f6be32a02c8762d81d27c93b38760ebfc66e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114511
    Tested-by: Jenkins
    Reviewed-by: Rizal Muttaqin <riz...@libreoffice.org>

diff --git a/icon-themes/elementary/cmd/32/dbviewfunctions.png 
b/icon-themes/elementary/cmd/32/dbviewfunctions.png
index 1c9ba54ff167..e9b8fbb1b32e 100644
Binary files a/icon-themes/elementary/cmd/32/dbviewfunctions.png and 
b/icon-themes/elementary/cmd/32/dbviewfunctions.png differ
diff --git a/icon-themes/elementary/cmd/lc_dbviewfunctions.png 
b/icon-themes/elementary/cmd/lc_dbviewfunctions.png
index 079281b7b02d..3e3940372795 100644
Binary files a/icon-themes/elementary/cmd/lc_dbviewfunctions.png and 
b/icon-themes/elementary/cmd/lc_dbviewfunctions.png differ
diff --git a/icon-themes/elementary_svg/cmd/32/dbviewfunctions.svg 
b/icon-themes/elementary_svg/cmd/32/dbviewfunctions.svg
index ceb6a9a718f9..17ba30e20ec4 100644
--- a/icon-themes/elementary_svg/cmd/32/dbviewfunctions.svg
+++ b/icon-themes/elementary_svg/cmd/32/dbviewfunctions.svg
@@ -1 +1 @@
-<svg height="32" width="32" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink";><linearGradient id="a"><stop 
offset="0" stop-color="#737373"/><stop offset=".262" 
stop-color="#636363"/><stop offset=".705" stop-color="#4b4b4b"/><stop 
offset="1" stop-color="#3f3f3f"/></linearGradient><linearGradient id="b" 
gradientUnits="userSpaceOnUse" x1="19.823" x2="16.693" xlink:href="#a" 
y1="10.543" y2="20.128"/><linearGradient id="c" gradientUnits="userSpaceOnUse" 
x1="17.736" x2="17.736" xlink:href="#a" y1="11.502" 
y2="18.211"/><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="14.606" 
x2="14.606" xlink:href="#a" y1="10.543" y2="20.128"/><linearGradient id="e" 
gradientTransform="matrix(.95435 0 0 1.04784 0 8)" 
gradientUnits="userSpaceOnUse" x1="7.335" x2="6.473" xlink:href="#a" y1=".954" 
y2="18.605"/><linearGradient id="f" gradientUnits="userSpaceOnUse" x1="16.083" 
x2="13.281" xlink:href="#a" y1="15.414" y2="12.051"/><radialGradient id="g" 
cx="11.25" cy="19.031" g
 radientTransform="matrix(1.48837 0 0 .4093 -2.795 21.097)" 
gradientUnits="userSpaceOnUse" r="8.063"><stop offset="0" 
stop-color="#0d0d0d"/><stop offset="1" stop-color="#0d0d0d" 
stop-opacity="0"/></radialGradient><g transform="matrix(1.33333 0 0 1.33333 
-2.732 -12.14)"><ellipse cx="13.949" cy="28.886" fill="url(#g)" opacity=".163" 
rx="12" ry="3.3"/><g stroke="#000" stroke-linecap="round" 
stroke-linejoin="round" stroke-opacity=".49" stroke-width=".75"><path d="m10.16 
18.332h-2.415v9.163h-1.567v-9.163h-1.673v-.807l1.673-.593v-.602q0-1.912.758-2.87.766-.954
 2.353-.954.913 0 1.854.353l-.418 1.347q-.81-.286-1.422-.286-.792 
0-1.176.576-.382.574-.382 1.818v.68h2.412z" fill="url(#e)"/><g fill="url(#f)" 
transform="matrix(.9585 0 0 1.0433 0 8)"><path d="m12.812 
16.335q0-1.343.39-2.513.395-1.17 1.135-2.052h.86q-.728.978-1.098 2.148-.367 
1.17-.367 2.407 0 1.216.375 2.376.374 1.16 1.078 
2.12h-.85q-.746-.86-1.136-2.01-.39-1.15-.39-2.474z" fill="url(#d)"/><path 
d="m17.716 16.335-1.92-2.72h1.038l1.4
 34 2.097 1.418-2.098h1.03l-1.92 2.72 2.025 2.843h-1.036l-1.515-2.22-1.536 
2.22h-1.028z" fill="url(#c)"/><path d="m23.704 16.335q0 1.332-.395 2.482-.39 
1.15-1.13 2h-.853q.704-.95 1.08-2.11.374-1.166.374-2.382 
0-1.236-.37-2.407-.364-1.17-1.093-2.148h.86q.746.887 1.136 2.062.39 1.17.39 
2.503z" fill="url(#b)"/></g></g></g></svg>
\ No newline at end of file
+<svg height="32" width="32" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink";><radialGradient id="a" cx="7.417969" 
cy="7.986645" gradientTransform="matrix(.46049413 6.4469173 -3.3565628 
.23975451 32.224345 -46.341403)" gradientUnits="userSpaceOnUse" r="3.376953" 
xlink:href="#c"/><radialGradient id="b" cx="15" cy="11.280065" 
gradientTransform="matrix(-.00000033 2.8690549 -2.4591902 -.00000029 48.951248 
-28.740103)" gradientUnits="userSpaceOnUse" r="3.751054" 
xlink:href="#c"/><linearGradient id="c"><stop offset="0" 
stop-color="#737373"/><stop offset=".262" stop-color="#636363"/><stop 
offset=".705" stop-color="#4b4b4b"/><stop offset="1" 
stop-color="#3f3f3f"/></linearGradient><radialGradient id="d" cx="11.25" 
cy="19.031" gradientTransform="matrix(1.9844884 0 0 .54573197 -6.325278 
15.245197)" gradientUnits="userSpaceOnUse" r="8.063"><stop offset="0" 
stop-color="#0d0d0d"/><stop offset="1" stop-color="#0d0d0d" 
stop-opacity="0"/></radialGradient><ellipse cx="16" 
 cy="25.630505" fill="url(#d)" opacity=".163" rx="15.99996" ry="4.399989" 
stroke-width="1.33333"/><path d="m15.5 15.5 4.170179 
5.309022c.105008.159332.105008.365903 0 .525233l-4.115686 
6.165745h3.595947l2.158428-4.187287c.183122-.321035.645946-.321035.829068 
0l2.42971 
4.187287h3.394283l-4.158505-6.165745c-.105311-.160358-.104441-.368197.0023-.527588l3.694276-5.306667h-3.396641l-1.963035
 3.302302c-.182919.326081-.65275.324778-.833778-.0023l-2.208213-3.300062z" 
fill="url(#b)" stroke="#000" stroke-opacity=".580392"/><path d="m10.806641 
4.197266c-.01175-.0000718-.02349.0005794-.03516.00195-1.2342956.1530017-1.9470443.2828368-2.5097623.6718781-.562718.3890414-.8255625.9860762-1.3691405
 
1.9804688-.00616.01262-.011381.025676-.015625.039063-.0107112.0268486-.0172962.0551641-.019531.083984-.2394219.6940757-.3574277
 1.7555398-.3574222 
2.7851561v1.427734c-.0001323.126272-.070983.237451-.1835937.292968-.0005401.000267.000542.0017
 0 .002l-2.8164063 1.0605v1.957032h2.6835938c.1765403-.000332.31676
 
84.15278.3164062.345703v12.367188.287109h3v-.287109-12.367188c-.0003478-.185282.1437046-.328475.3300781-.328124.00065.000002.0013.000002.00195
 
0l3.6679719-.01758v-2.999999l-3.6699219.01758c-.185282.000345-.3304261-.1448-.3300781-.33008v-.912109c0-.327026.033542-.7990142.1054687-1.2402344.071927-.4412202.1944606-.8611184.3105469-1.0449218.0007284-.00113.00122-.00277.00195-.00391.3127044-.4835855.9086564-.748046
 1.5761724-.7480469.490939.0000011.92434.051146 
1.306641.1523438.135415.035843.272708.084732.427734.1308594.149812.045078.308078-.038403.355469-.1875l.724608-2.25c.04775-.1504552-.03523-.3111846-.185547-.359375-.298202-.097259-.592109-.205312-.996094-.296875.04115.012687.03883.010477-.0059-.00391-.0071-.00223-.01425-.00419-.02148-.00586-.6085-.1449183-1.373289-.2206952-2.292928-.2206951z"
 fill="url(#a)" stroke="#000" stroke-opacity=".580392"/><path d="m10.806641 
4.1972656c-.01175-.0000718-.023487.0005826-.035157.0019532-1.2342948.1530016-1.9470473.2828337-2.5097652.671875-.5627
 181.3890413-.8255627.9860761-1.3691407 
1.9804687-.00616.01262-.011381.0256755-.015625.0390625-.0107112.0268486-.0172964.0551645-.0195312.0839844-.2394219.6940757-.3574274
 1.7555399-.3574219 
2.7851562v1.0000004c-.0000055-1.0296171.1180028-2.0910778.3574219-2.7851566.002235-.028819.0088202-.0571354.0195312-.0839844.004244-.013387.009465-.0264425.015625-.0390625.543578-.9943926.8064226-1.5914275
 1.3691407-1.9804687.5627179-.3890413 1.2754704-.5188735 
2.5097652-.671875.01167-.0013675.023407-.002025.035157-.0019532.919639-.0000001 
1.684518.0757929 
2.292968.2207032.00724.00167.014385.0036293.021485.0058593.04477.014391.047009.0165933.005859.0039063.39606.0897667.684333.1952597.976563.2910156l.205078-.6347656c.04775-.1504552-.03523-.3111846-.185547-.359375-.298202-.097259-.592109-.205312-.996094-.296875.04115.012687.038871.0104807-.005859-.0039063-.0071-.00223-.014255-.0041893-.021485-.0058593-.6085-.1449183-1.373329-.2207033-2.292968-.2207032zm-4.306641
 6.9902344c-.0001323.126272-.070983.
 237452-.1835938.292969v.001953l-2.8164062 
1.060547v1l2.8164062-1.060547v-.001953c.1126108-.055517.1834615-.166697.1835938-.292969zm3.0039062.015625c-.0002634.021539-.0039062.051817-.0039062.072266v.912109c-.000348.18528.1447961.330421.3300781.330078l3.6699219-.017578v-1l-3.6699219.017578c-.1796109.000335-.3179711-.137321-.3261719-.314453zm5.9960938
 4.296875.785156 1h2.8125l2.208985 
3.300781c.181028.327125.651065.328034.833984.001953l1.962891-3.302734h2.701172l.695312-1h-3.396484l-1.962891
 
3.302734c-.182919.326081-.652956.325125-.833984-.001953l-2.208985-3.300781zm8.466797
 6.076172-.160156.230469c-.106734.159391-.109218.366985-.003907.527343l3.486328 
5.166016h.673829zm-4.46875.013672-3.943359 
5.910156h.667968l3.447266-5.166016c.105008-.15933.105008-.366058 0-.52539z" 
fill="#fff" opacity=".1"/></svg>
\ No newline at end of file
diff --git a/icon-themes/elementary_svg/cmd/lc_dbviewfunctions.svg 
b/icon-themes/elementary_svg/cmd/lc_dbviewfunctions.svg
index 315f018942a0..75dae64ef215 100644
--- a/icon-themes/elementary_svg/cmd/lc_dbviewfunctions.svg
+++ b/icon-themes/elementary_svg/cmd/lc_dbviewfunctions.svg
@@ -1 +1 @@
-<svg height="24" width="24" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink";><linearGradient id="a"><stop 
offset="0" stop-color="#737373"/><stop offset=".262" 
stop-color="#636363"/><stop offset=".705" stop-color="#4b4b4b"/><stop 
offset="1" stop-color="#3f3f3f"/></linearGradient><linearGradient id="b" 
gradientUnits="userSpaceOnUse" x1="19.823" x2="16.693" xlink:href="#a" 
y1="10.543" y2="20.128"/><linearGradient id="c" gradientUnits="userSpaceOnUse" 
x1="17.736" x2="17.736" xlink:href="#a" y1="11.502" 
y2="18.211"/><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="14.606" 
x2="14.606" xlink:href="#a" y1="10.543" y2="20.128"/><linearGradient id="e" 
gradientUnits="userSpaceOnUse" x1="7.335" x2="6.473" xlink:href="#a" y1=".954" 
y2="18.605"/><linearGradient id="f" gradientUnits="userSpaceOnUse" x1="16.083" 
x2="13.281" xlink:href="#a" y1="15.414" y2="12.051"/><radialGradient id="g" 
cx="11.25" cy="19.031" gradientTransform="matrix(1.48837 0 0 .4093 -2.795 1
 3.097)" gradientUnits="userSpaceOnUse" r="8.063"><stop offset="0" 
stop-color="#0d0d0d"/><stop offset="1" stop-color="#0d0d0d" 
stop-opacity="0"/></radialGradient><ellipse cx="13.949" cy="20.886" 
fill="url(#g)" opacity=".163" rx="12" ry="3.3"/><g stroke="#000" 
stroke-linecap="round" stroke-linejoin="round" stroke-opacity=".49"><path 
d="m10.645 
9.86h-2.528v8.745h-1.644v-8.745h-1.753v-.77l1.753-.566v-.574q0-1.825.795-2.738.802-.912
 2.465-.912.958 0 1.944.337l-.438 1.287q-.85-.273-1.49-.273-.83 
0-1.232.548-.4.548-.4 1.735v.648h2.527z" fill="url(#e)" stroke-width="1.01" 
transform="scale(.95435 1.04784)"/><g fill="url(#f)" stroke-width=".561" 
transform="scale(.9585 1.0433)"><path d="m12.812 
16.335q0-1.343.39-2.513.395-1.17 1.135-2.052h.86q-.728.978-1.098 2.148-.366 
1.17-.366 2.407 0 1.216.375 2.376.374 1.16 1.078 
2.118h-.85q-.746-.86-1.136-2.01-.39-1.15-.39-2.473z" fill="url(#d)"/><path 
d="m17.716 16.335-1.92-2.72h1.038l1.434 2.097 1.418-2.098h1.03l-1.92 2.72 2.025 
2.843h-1.037l-1.515-2.22
 -1.535 2.22h-1.028z" fill="url(#c)"/><path d="m23.704 16.335q0 1.332-.395 
2.482-.39 1.15-1.13 2h-.852q.704-.95 1.08-2.11.374-1.166.374-2.382 
0-1.236-.37-2.407-.365-1.17-1.094-2.148h.86q.746.887 1.136 2.062.39 1.17.39 
2.503z" fill="url(#b)"/></g></g></svg>
\ No newline at end of file
+<svg height="24" width="24" xmlns="http://www.w3.org/2000/svg"; 
xmlns:xlink="http://www.w3.org/1999/xlink";><radialGradient id="a" cx="7.417969" 
cy="7.986645" gradientTransform="matrix(.34537146 4.8352001 -2.5174284 
.17981633 23.793307 -34.881191)" gradientUnits="userSpaceOnUse" r="3.376953" 
xlink:href="#c"/><radialGradient id="b" cx="15" cy="11.280065" 
gradientTransform="matrix(-.00000025 2.1764872 -1.8655607 -.00000022 36.623529 
-22.060884)" gradientUnits="userSpaceOnUse" r="3.751054" 
xlink:href="#c"/><linearGradient id="c"><stop offset="0" 
stop-color="#737373"/><stop offset=".262" stop-color="#636363"/><stop 
offset=".705" stop-color="#4b4b4b"/><stop offset="1" 
stop-color="#3f3f3f"/></linearGradient><radialGradient id="d" cx="11.25" 
cy="19.031" gradientTransform="matrix(1.48837 0 0 .4093 -4.744 12.911)" 
gradientUnits="userSpaceOnUse" r="8.063"><stop offset="0" 
stop-color="#0d0d0d"/><stop offset="1" stop-color="#0d0d0d" 
stop-opacity="0"/></radialGradient><ellipse cx="12" cy="20.70000
 1" fill="url(#d)" opacity=".163" rx="12" ry="3.3"/><path d="m11.559378 11.5 
3.16353 4.027466c.07966.12087.07966.277576 0 .398446l-3.225089 
4.574088h2.41569l1.740298-3.073215c.138917-.243539.490019-.243539.628937 
0l1.740299 
3.073215h2.224507l-3.051776-4.574088c-.07989-.12165-.07923-.279318.0017-.400233l2.802526-4.025679h-2.226295l-1.489174
 2.505152c-.138764.247368-.495181.246379-.632511-.0017l-1.675167-2.503446z" 
fill="url(#b)" stroke="#000" stroke-opacity=".580392"/><path d="m7.6959163 
3.4542066c-1.8405276.2281441-2.1138792.3893198-2.9271199 
1.8770191.0000019.000758.0000019.00152 0 .00227-.1721039.463364-.2687964 
1.2961077-.2687964 
2.0766671v.9407875c-.0001849.1764761-.1009829.3373991-.2596847.4145844l-1.7403153.813223v.9339543h1.5375791c.2555864-.000481.4629007.206834.4624209.462421v9.524867h2v-9.524867c-.0004798-.255587.2068346-.462902.462421-.462421l2.537579-.012712v-1.6993406l-2.537579.0127119c-.2555867.00048-.462901-.2068343-.462421-.462421v-.8041113c0-.5189879.1036528-1.193685
 1.3462463-1.5777913-.0000019-.0007581-.0000019-.00152 
0-.00227.28135-.4389101.8047663-.662883 
1.3644833-.6628831.3831537.0000001.7282707.039151 
1.0364607.1207307.112548.029791.216531.067731.325746.1002286l.5444267-1.6879497c-.2334923-.076154-.4456903-.1544722-.7448847-.2209599-.0024-.0007399-.0045-.0015-.0069-.00227-.433089-.1031442-.9918726-.1594678-1.669662-.1594677z"
 fill="url(#a)" stroke="#000" stroke-opacity=".580392"/><path d="m7.6953125 
3.4550781c-1.8405276.2281441-2.1125405.3892539-2.9257813 
1.8769531v.00195c-.1721039.4633672-.2695312 1.2956156-.2695312 
2.076175v.9414063c-.0001849.1764761-.1010638.3368772-.2597656.4140625l-1.7402344.8125v.935547h.1386719l1.6015625-.748047c.1587018-.0771853.2595807-.2375864.2597656-.4140625v-.9414063c0-.7805593.097427-1.6128046.2695312-2.0761718v-.00195c.8132408-1.4877024
 1.0852537-1.6488122 2.9257813-1.8769563.6777894-.0000001 1.2368304.055056 
1.6699219.1582031.0024.00077.00541.00121.00781.00195.1805699.040127.3084332.087218.4492187.1328125l
 
.2949249-.9121062c-.2334933-.076154-.4449467-.1542154-.7441411-.2207031-.0024-.0007399-.00541-.00118-.00781-.00195-.4330915-.1031472-.992135-.1582064-1.6699244-.1582063zm-1.1816406
 
4.9589844c-.0013086.042789-.0136719.0917553-.0136719.1328125v.8046875c-.00048.2555867.2073039.4614175.4628906.4609375l2.5371094-.0117188v-1l-2.5371094.0117188c-.2333079.0004382-.4176271-.1741335-.4492187-.3984375zm5.0449221
 3.0859375.785156 1h1.632812l1.675782 
2.503906c.13733.248126.494048.249321.632812.002l1.488282-2.505906h1.53125l.695312-1h-2.226562l-1.488282
 
2.505859c-.138764.247368-.495482.246126-.632812-.002l-1.675782-2.503859zm5.841797
 4.732422-.203125.292969c-.08098.120915-.08184.27874-.002.40039l2.384812 
3.574219h.667969zm-2.900391.009766-3.001953 
4.257812h.705078l2.519531-3.574219c.07966-.12087.07966-.277567 0-.398437z" 
fill="#fff" opacity=".1"/></svg>
\ No newline at end of file
commit 24e65dc29f72b697c3dba12e6af2739611b8362d
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Thu Apr 22 13:43:07 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:01 2021 +0200

    tdf#138518 sw: layout: avoid moving flys forward prematurely
    
    (regression from b9ef71476fd70bc13f50ebe80390e0730d1b7afb
    "tdf#134298 sw: layout: remove left-over page frame without content")
    
    When updating the 3rd ToX, the change to remove empty page frames
    causes one page frame to be deleted.
    
    On the subsequent layout, things generally move backward, but there are
    some fly-related hiccups; the first problem is visible on page 7.
    
    Commit eb85de8e6b61fb3fcb6c03ae0145f7fe5478bccf
    "sw: layout: if fly's anchor moves forward, move fly off SwPageFrame"
    helps quite a bit, but not completely; now the first problem happens on
    page 54, when SwTextFrame 1261 and its fly 3132 are formatted.
    
    Frame 1261 moves forward to page 55, and then
    SwObjectFormatterTextFrame::CheckMovedFwdCondition() returns true and so
    SwMovedFwdFramesByObjPos::Insert() is called to prevent frame 1261 from
    moving back to page 54.
    
    But the reason why it moved forward is that there are 3 flys on page 54
    that are anchored on frames in the next-chain of 1261, namely 1275,
    1283 and 1284; if these flys weren't on the page then 1261 would fit.
    
    While the move forward cannot be easily prevented in the situation, it's
    possible to avoid the entry into the SwMovedFwdFramesByObjPos map,
    by detecting that there are flys on the page that would should forward
    *before* the current one does.
    
    With this fix and the above mentioned commit to get the flys off the
    page, frame 1261 will eventually move back to page 54 again.
    
    Change-Id: I83e44d65a0b889a49a313b0cd8b08efce4c3afa7
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114478
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit c799de145f7e289f31e3669646e5bd12814e6c5e)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114521
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>

diff --git a/sw/source/core/layout/flycnt.cxx b/sw/source/core/layout/flycnt.cxx
index bcc75a032e31..2656e800fd3f 100644
--- a/sw/source/core/layout/flycnt.cxx
+++ b/sw/source/core/layout/flycnt.cxx
@@ -427,9 +427,11 @@ void SwFlyAtContentFrame::MakeAll(vcl::RenderContext* 
pRenderContext)
             // <SwObjectFormatterTextFrame::CheckMovedFwdCondition(..)>
             sal_uInt32 nToPageNum( 0 );
             bool bDummy( false );
+            bool bPageHasFlysAnchoredBelowThis(false);
             if ( SwObjectFormatterTextFrame::CheckMovedFwdCondition(
                                 *this, GetPageFrame()->GetPhyPageNum(),
-                                bAnchoredAtMaster, nToPageNum, bDummy ) )
+                                bAnchoredAtMaster, nToPageNum, bDummy,
+                                bPageHasFlysAnchoredBelowThis) )
             {
                 bConsiderWrapInfluenceDueToMovedFwdAnchor = true;
                 // mark anchor text frame
@@ -442,14 +444,22 @@ void SwFlyAtContentFrame::MakeAll(vcl::RenderContext* 
pRenderContext)
                                         rDoc, *pAnchorTextFrame, 
nAnchorFrameToPageNum ) )
                 {
                     if ( nAnchorFrameToPageNum < nToPageNum )
-                        SwLayouter::RemoveMovedFwdFrame( rDoc, 
*pAnchorTextFrame );
+                    {
+                        if (!bPageHasFlysAnchoredBelowThis)
+                        {
+                            SwLayouter::RemoveMovedFwdFrame(rDoc, 
*pAnchorTextFrame);
+                        }
+                    }
                     else
                         bInsert = false;
                 }
                 if ( bInsert )
                 {
-                    SwLayouter::InsertMovedFwdFrame( rDoc, *pAnchorTextFrame,
-                                                   nToPageNum );
+                    if (!bPageHasFlysAnchoredBelowThis)
+                    {
+                        SwLayouter::InsertMovedFwdFrame(rDoc, 
*pAnchorTextFrame,
+                                                        nToPageNum);
+                    }
                 }
             }
         }
diff --git a/sw/source/core/layout/objectformattertxtfrm.cxx 
b/sw/source/core/layout/objectformattertxtfrm.cxx
index 98e374a7e5fb..005f14902079 100644
--- a/sw/source/core/layout/objectformattertxtfrm.cxx
+++ b/sw/source/core/layout/objectformattertxtfrm.cxx
@@ -30,6 +30,7 @@
 #include <fmtwrapinfluenceonobjpos.hxx>
 #include <fmtfollowtextflow.hxx>
 #include <layact.hxx>
+#include <flyfrm.hxx>
 #include <ftnfrm.hxx>
 #include <fmtornt.hxx>
 #include <textboxhelper.hxx>
@@ -233,11 +234,13 @@ bool SwObjectFormatterTextFrame::DoFormatObj( 
SwAnchoredObject& _rAnchoredObj,
                 sal_uInt32 nToPageNum( 0 );
                 // #i43913#
                 bool bDummy( false );
+                bool bPageHasFlysAnchoredBelowThis(false);
                 // #i58182# - consider new method signature
                 if ( SwObjectFormatterTextFrame::CheckMovedFwdCondition( 
*GetCollectedObj( nIdx ),
                                               GetPgNumOfCollected( nIdx ),
                                               IsCollectedAnchoredAtMaster( 
nIdx ),
-                                              nToPageNum, bDummy ) )
+                                              nToPageNum, bDummy,
+                                              bPageHasFlysAnchoredBelowThis))
                 {
                     // #i49987# - consider, that anchor frame
                     // could already been marked to move forward.
@@ -248,7 +251,12 @@ bool SwObjectFormatterTextFrame::DoFormatObj( 
SwAnchoredObject& _rAnchoredObj,
                                             rDoc, mrAnchorTextFrame, 
nMovedFwdToPageNum ) )
                     {
                         if ( nMovedFwdToPageNum < nToPageNum )
-                            SwLayouter::RemoveMovedFwdFrame( rDoc, 
mrAnchorTextFrame );
+                        {
+                            if (!bPageHasFlysAnchoredBelowThis)
+                            {
+                                SwLayouter::RemoveMovedFwdFrame(rDoc, 
mrAnchorTextFrame);
+                            }
+                        }
                         else
                             bInsert = false;
                     }
@@ -256,8 +264,11 @@ bool SwObjectFormatterTextFrame::DoFormatObj( 
SwAnchoredObject& _rAnchoredObj,
                     {
                         // Indicate that anchor text frame has to move forward 
and
                         // invalidate its position to force a re-format.
-                        SwLayouter::InsertMovedFwdFrame( rDoc, 
mrAnchorTextFrame,
-                                                       nToPageNum );
+                        if (!bPageHasFlysAnchoredBelowThis)
+                        {
+                            SwLayouter::InsertMovedFwdFrame(rDoc,
+                                    mrAnchorTextFrame, nToPageNum);
+                        }
                         mrAnchorTextFrame.InvalidatePos();
 
                         // Indicate restart of the layout process
@@ -359,13 +370,14 @@ bool SwObjectFormatterTextFrame::DoFormatObjs()
         sal_uInt32 nToPageNum( 0 );
         // #i43913#
         bool bInFollow( false );
+        bool bPageHasFlysAnchoredBelowThis(false);
         SwAnchoredObject* pObj = nullptr;
         if ( !mrAnchorTextFrame.IsFollow() )
         {
             pObj = GetFirstObjWithMovedFwdAnchor(
                     // #i35017# - constant name has changed
                     text::WrapInfluenceOnPosition::ONCE_CONCURRENT,
-                    nToPageNum, bInFollow );
+                    nToPageNum, bInFollow, bPageHasFlysAnchoredBelowThis );
         }
         // #i35911#
         if ( pObj && pObj->HasClearedEnvironment() )
@@ -386,14 +398,22 @@ bool SwObjectFormatterTextFrame::DoFormatObjs()
                                         rDoc, mrAnchorTextFrame, nTmpToPageNum 
) )
                 {
                     if ( nTmpToPageNum < pAnchorPageFrame->GetPhyPageNum() )
-                        SwLayouter::RemoveMovedFwdFrame( rDoc, 
mrAnchorTextFrame );
+                    {
+                        if (!bPageHasFlysAnchoredBelowThis)
+                        {
+                            SwLayouter::RemoveMovedFwdFrame(rDoc, 
mrAnchorTextFrame);
+                        }
+                    }
                     else
                         bInsert = false;
                 }
                 if ( bInsert )
                 {
-                    SwLayouter::InsertMovedFwdFrame( rDoc, mrAnchorTextFrame,
-                                                   
pAnchorPageFrame->GetPhyPageNum() );
+                    if (bPageHasFlysAnchoredBelowThis)
+                    {
+                        SwLayouter::InsertMovedFwdFrame(rDoc, 
mrAnchorTextFrame,
+                               pAnchorPageFrame->GetPhyPageNum());
+                    }
                     mrAnchorTextFrame.InvalidatePos();
                     bSuccess = false;
                     InvalidatePrevObjs( *pObj );
@@ -512,7 +532,8 @@ void SwObjectFormatterTextFrame::InvalidateFollowObjs( 
SwAnchoredObject& _rAncho
 SwAnchoredObject* SwObjectFormatterTextFrame::GetFirstObjWithMovedFwdAnchor(
                                     const sal_Int16 _nWrapInfluenceOnPosition,
                                     sal_uInt32& _noToPageNum,
-                                    bool& _boInFollow )
+                                    bool& _boInFollow,
+                                    bool& o_rbPageHasFlysAnchoredBelowThis)
 {
     // #i35017# - constant names have changed
     OSL_ENSURE( _nWrapInfluenceOnPosition == 
text::WrapInfluenceOnPosition::ONCE_SUCCESSIVE ||
@@ -536,7 +557,8 @@ SwAnchoredObject* 
SwObjectFormatterTextFrame::GetFirstObjWithMovedFwdAnchor(
             if ( SwObjectFormatterTextFrame::CheckMovedFwdCondition( 
*GetCollectedObj( i ),
                                           GetPgNumOfCollected( i ),
                                           IsCollectedAnchoredAtMaster( i ),
-                                          _noToPageNum, _boInFollow ) )
+                                          _noToPageNum, _boInFollow,
+                                          o_rbPageHasFlysAnchoredBelowThis) )
             {
                 pRetAnchoredObj = pAnchoredObj;
                 break;
@@ -547,6 +569,38 @@ SwAnchoredObject* 
SwObjectFormatterTextFrame::GetFirstObjWithMovedFwdAnchor(
     return pRetAnchoredObj;
 }
 
+static SwRowFrame const* FindTopLevelRowFrame(SwFrame const*const pFrame)
+{
+    SwRowFrame * pRow = const_cast<SwFrame*>(pFrame)->FindRowFrame();
+    // looks like SwTabFrame has mbInfTab = true so go up 2 levels
+    while (pRow->GetUpper()->GetUpper()->IsInTab())
+    {
+        pRow = pRow->GetUpper()->GetUpper()->FindRowFrame();
+    }
+    return pRow;
+}
+
+static SwContentFrame const* FindFrameInBody(SwAnchoredObject const& rAnchored)
+{
+    SwFrame const*const pAnchor(rAnchored.GetAnchorFrame());
+    assert(pAnchor);
+    if (pAnchor->IsPageFrame() || pAnchor->FindFooterOrHeader())
+    {
+        return nullptr;
+    }
+    if (pAnchor->IsInFly())
+    {
+        return FindFrameInBody(*pAnchor->FindFlyFrame());
+    }
+    if (pAnchor->IsInFootnote())
+    {
+        return pAnchor->FindFootnoteFrame()->GetRef();
+    }
+    assert(pAnchor->IsInDocBody());
+    assert(pAnchor->IsContentFrame());
+    return static_cast<SwContentFrame const*>(pAnchor);
+}
+
 // #i58182#
 // - replace private method by corresponding static public method
 bool SwObjectFormatterTextFrame::CheckMovedFwdCondition(
@@ -554,7 +608,8 @@ bool SwObjectFormatterTextFrame::CheckMovedFwdCondition(
                                             const sal_uInt32 _nFromPageNum,
                                             const bool 
_bAnchoredAtMasterBeforeFormatAnchor,
                                             sal_uInt32& _noToPageNum,
-                                            bool& _boInFollow )
+                                            bool& _boInFollow,
+                                            bool& 
o_rbPageHasFlysAnchoredBelowThis)
 {
     bool bAnchorIsMovedForward( false );
 
@@ -630,6 +685,71 @@ bool SwObjectFormatterTextFrame::CheckMovedFwdCondition(
         }
     }
 
+    if (bAnchorIsMovedForward)
+    {
+        // tdf#138518 try to determine if there is a fly on page _nFromPageNum
+        // which is anchored in a frame that is "below" the anchor frame
+        // of _rAnchoredObj, such that it should move to the next page before
+        // _rAnchoredObj does
+        SwPageFrame const& rAnchoredObjPage(*_rAnchoredObj.GetPageFrame());
+        assert(rAnchoredObjPage.GetPhyPageNum() == _nFromPageNum);
+        if (auto * pObjs = rAnchoredObjPage.GetSortedObjs())
+        {
+            for (SwAnchoredObject *const pObj : *pObjs)
+            {
+                SwPageFrame const*const 
pObjAnchorPage(pObj->FindPageFrameOfAnchor());
+                assert(pObjAnchorPage);
+                if ((pObjAnchorPage == &rAnchoredObjPage
+                        ? _boInFollow // same-page but will move forward
+                        : rAnchoredObjPage.GetPhyPageNum() < 
pObjAnchorPage->GetPhyPageNum())
+                    && pObj->GetFrameFormat().GetAnchor().GetAnchorId()
+                        != RndStdIds::FLY_AS_CHAR)
+                {
+                    if (pPageFrameOfAnchor->GetPhyPageNum() < 
pObjAnchorPage->GetPhyPageNum())
+                    {
+                        SAL_INFO("sw.layout", 
"SwObjectFormatterTextFrame::CheckMovedFwdCondition(): 
o_rbPageHasFlysAnchoredBelowThis because next page");
+                        o_rbPageHasFlysAnchoredBelowThis = true;
+                        break;
+                    }
+                    // on same page: check if it's in next-chain in the 
document body
+                    // (in case both are in the same fly the flag must not be
+                    // set because the whole fly moves at once)
+                    SwContentFrame const*const 
pInBodyFrameObj(FindFrameInBody(*pObj));
+                    SwContentFrame const*const 
pInBodyFrameAnchoredObj(FindFrameInBody(_rAnchoredObj));
+                    if (pInBodyFrameObj && pInBodyFrameAnchoredObj)
+                    {
+                        bool isBreakMore(false);
+                        // currently this ignores index of at-char flys
+                        for (SwContentFrame const* pContentFrame = 
pInBodyFrameAnchoredObj->FindNextCnt();
+                             pContentFrame;
+                             pContentFrame = pContentFrame->FindNextCnt())
+                        {
+                            if (pInBodyFrameObj == pContentFrame)
+                            {
+                                // subsequent cells in a row are not 
automatically
+                                // "below" and the row could potentially be 
split
+                                // TODO refine check if needed
+                                if (!pInBodyFrameAnchoredObj->IsInTab()
+                                    || 
FindTopLevelRowFrame(pInBodyFrameAnchoredObj)
+                                        != 
FindTopLevelRowFrame(pInBodyFrameAnchoredObj))
+                                {   // anchored in next chain on same page
+                                    SAL_INFO("sw.layout", 
"SwObjectFormatterTextFrame::CheckMovedFwdCondition(): 
o_rbPageHasFlysAnchoredBelowThis because next chain on same page");
+                                    o_rbPageHasFlysAnchoredBelowThis = true;
+                                    isBreakMore = true;
+                                }
+                                break;
+                            }
+                        }
+                        if (isBreakMore)
+                        {
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     return bAnchorIsMovedForward;
 }
 
diff --git a/sw/source/core/layout/objectformattertxtfrm.hxx 
b/sw/source/core/layout/objectformattertxtfrm.hxx
index 15667b9ead60..1fc6160507c6 100644
--- a/sw/source/core/layout/objectformattertxtfrm.hxx
+++ b/sw/source/core/layout/objectformattertxtfrm.hxx
@@ -96,7 +96,8 @@ class SwObjectFormatterTextFrame : public SwObjectFormatter
         SwAnchoredObject* GetFirstObjWithMovedFwdAnchor(
                                     const sal_Int16 _nWrapInfluenceOnPosition,
                                     sal_uInt32& _noToPageNum,
-                                    bool& _boInFollow );
+                                    bool& _boInFollow,
+                                    bool& o_rbPageHasFlysAnchoredBelowThis);
 
         /** method to format the anchor frame for checking of the move forward 
condition
 
@@ -169,6 +170,9 @@ class SwObjectFormatterTextFrame : public SwObjectFormatter
             output parameter - boolean, indicating that anchor text frame is
             currently on the same page, but it's a follow of in a follow row,
             which will move forward. value only relevant, if method return 
<true>.
+            @param o_rbPageHasFlysAnchoredBelowThis
+            output parameter - indicates that the page has flys anchored
+            somewhere below the anchor of the passed _rAnchoredObj
 
             @return boolean
             indicating, if 'anchor is moved forward'
@@ -177,7 +181,8 @@ class SwObjectFormatterTextFrame : public SwObjectFormatter
                                             const sal_uInt32 _nFromPageNum,
                                             const bool 
_bAnchoredAtMasterBeforeFormatAnchor,
                                             sal_uInt32& _noToPageNum,
-                                            bool& _boInFollow );
+                                            bool& _boInFollow,
+                                            bool& 
o_rbPageHasFlysAnchoredBelowThis);
 };
 
 #endif
commit 15270217a087497ab7c0ac1e685920af81b9cbd9
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Tue Apr 20 12:45:36 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:01 2021 +0200

    tdf#138785 sw: fix mis-positioned as-char flys when deleting empty page
    
    When SwFrame::CheckPageDescs() deletes an empty page in the middle of
    the document, which happens during SetRedlineFlags() here, the
    SwFlyInContentFrame::maFrameArea is moved in lcl_MoveAllLowers(), but
    the SwFlyInContentFrame::m_aRefPoint stays unchanged.
    
    Because the formatting occurs only after the redline mode is reset, the
    position of the SwFlyInContentFrame when it is formatted is exactly the
    same as its (stale) m_aRefPoint, so the setting of (updated) maFrameArea
    is skipped in SwAsCharAnchoredObjectPosition::CalcPosition(), so the
    fly ends up a page above where it should be.
    
    So keep m_aRefPoint consistent with maFrameArea in lcl_MoveAllLowers().
    
    (regression from b9ef71476fd70bc13f50ebe80390e0730d1b7afb)
    
    Change-Id: If1b421daa0d71718d89d9772f5c0d9e367e76845
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114332
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit e656cf2a71e738c282abcd0d610e724b955f274a)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114520
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>

diff --git a/sw/source/core/inc/flyfrms.hxx b/sw/source/core/inc/flyfrms.hxx
index 66e0b27e0655..ff07cc11a6d4 100644
--- a/sw/source/core/inc/flyfrms.hxx
+++ b/sw/source/core/inc/flyfrms.hxx
@@ -228,6 +228,7 @@ public:
 
     //see layact.cxx
     void AddRefOfst( tools::Long nOfst ) { m_aRef.AdjustY( nOfst ); }
+    void AddRefOfst(Point const& rOfst) { m_aRef += rOfst; }
 
     // #i26791#
     virtual void MakeObjPos() override;
diff --git a/sw/source/core/layout/pagechg.cxx 
b/sw/source/core/layout/pagechg.cxx
index a40b9d18bdcc..cd44bbb525c2 100644
--- a/sw/source/core/layout/pagechg.cxx
+++ b/sw/source/core/layout/pagechg.cxx
@@ -2007,6 +2007,11 @@ static void lcl_MoveAllLowerObjs( SwFrame* pFrame, const 
Point& rOffset )
         if ( auto pFlyFrame = dynamic_cast<SwFlyFrame *>( pAnchoredObj ) )
         {
             lcl_MoveAllLowers( pFlyFrame, rOffset );
+            // tdf#138785 update position specific to as-char flys
+            if (pFlyFrame->IsFlyInContentFrame())
+            {
+                
static_cast<SwFlyInContentFrame*>(pFlyFrame)->AddRefOfst(rOffset);
+            }
             pFlyFrame->NotifyDrawObj();
             // --> let the active embedded object be moved
             SwFrame* pLower = pFlyFrame->Lower();
commit 7da71738cd68e16e26fad788bc5fb1e5ba82763e
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Tue Apr 13 20:13:51 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:01 2021 +0200

    sw: layout: if fly's anchor moves forward, move fly off SwPageFrame
    
    The problem is that on Show Changes->Hide Changes->Show Changes
    in a 311 page document, the fly "Grafik1" was initially on page 203
    but ends up on page 204, with a fly-sized gap on page 194.
    
    In a 25 page cut down version of the bugdoc, on layout action 659
    the fly's anchor SwTextFrame moves from page 21 to page 22, but
    the fly remains in the SwPageFrame's m_pSortedObjs, because it's
    not the anchor frame itself that moves but a distant previous frame,
    and page 21 goes valid.
    
    0  SwFlowFrame::PasteTree(SwFrame*, SwLayoutFrame*, SwFrame*, SwFrame*) 
(pStart=0x57c9e30, pParent=0xba15c50, pSibling=0x5a0f920, pOldParent=0xb057690) 
at sw/source/core/layout/flowfrm.cxx:586
    1  SwFlowFrame::MoveSubTree(SwLayoutFrame*, SwFrame*) (this=0x57c9f48, 
pParent=0xba15c50, pSibling=0x5a0f920) at sw/source/core/layout/flowfrm.cxx:677
    2  SwFlowFrame::MoveFwd(bool, bool, bool) (this=0x57c9f48, bMakePage=true, 
bPageBreak=false, bMoveAlways=false) at sw/source/core/layout/flowfrm.cxx:2061
    3  SwContentFrame::MakeAll(OutputDevice*) (this=0x57c9e30) at 
sw/source/core/layout/calcmove.cxx:1831
    4  SwFrame::OptPrepareMake() (this=0x57c9e30) at 
sw/source/core/layout/calcmove.cxx:399
    5  SwFrame::OptCalc() const (this=0x57c9e30) at 
sw/source/core/inc/frame.hxx:1065
    6  SwLayAction::FormatContent_(SwContentFrame const*, SwPageFrame const*) 
(this=0x7ffec0191b30, pContent=0x57c9e30, pPage=0xb9a1fd0) at 
sw/source/core/layout/layact.cxx:1833
    
    In subsequent layout actions the anchor frame moves forward one
    page at a time, until in action 665, when things get really interesting.
    
    On page 24, the anchor text frame 582 is formatted for the first time,
    and it moves the fly to page 24, after positioning it on the page.
    
    2  SwPageFrame::MoveFly(SwFlyFrame*, SwPageFrame*) (this=0xb9a1fd0, 
pToMove=0x641d310, pDest=0x9125bb0) at sw/source/core/layout/flylay.cxx:972
    3  SwFlyAtContentFrame::RegisterAtCorrectPage() (this=0x641d310) at 
sw/source/core/layout/flycnt.cxx:1432
    4  SwAnchoredObject::SetVertPosOrientFrame(SwLayoutFrame const&) 
(this=0x641d468, _rVertPosOrientFrame=...) at 
sw/source/core/layout/anchoredobject.cxx:195
    5  SwFlyAtContentFrame::MakeObjPos() (this=0x641d310) at 
sw/source/core/layout/flycnt.cxx:1466
    6  SwFlyFreeFrame::MakeAll(OutputDevice*) (this=0x641d310) at 
sw/source/core/layout/flylay.cxx:223
    7  SwFlyAtContentFrame::MakeAll(OutputDevice*) (this=0x641d310, 
pRenderContext=0x55b1f00) at sw/source/core/layout/flycnt.cxx:384
    8  SwFrame::PrepareMake(OutputDevice*) (this=0x641d310, 
pRenderContext=0x55b1f00) at sw/source/core/layout/calcmove.cxx:375
    9  SwFrame::Calc(OutputDevice*) const (this=0x641d310, 
pRenderContext=0x55b1f00) at sw/source/core/layout/trvlfrm.cxx:1791
    10 SwFlyFrame::Calc(OutputDevice*) const (this=0x641d310, 
pRenderContext=0x55b1f00) at sw/source/core/layout/fly.cxx:2874
    11 SwLayAction::FormatLayoutFly(SwFlyFrame*) (this=0x7ffec0191b30, 
pFly=0x641d310) at sw/source/core/layout/layact.cxx:1455
    12 SwObjectFormatter::FormatObj_(SwAnchoredObject&) (this=0xa5c0d10, 
_rAnchoredObj=...) at sw/source/core/layout/objectformatter.cxx:286
    13 SwObjectFormatterTextFrame::DoFormatObj(SwAnchoredObject&, bool) 
(this=0xa5c0d10, _rAnchoredObj=..., _bCheckForMovedFwd=false) at 
sw/source/core/layout/objectformattertxtfrm.cxx:135
    14 SwObjectFormatter::FormatObjsAtFrame_(SwTextFrame*) (this=0xa5c0d10, 
_pMasterTextFrame=0x0) at sw/source/core/layout/objectformatter.cxx:408
    15 SwObjectFormatterTextFrame::DoFormatObjs() (this=0xa5c0d10) at 
sw/source/core/layout/objectformattertxtfrm.cxx:337
    16 SwObjectFormatter::FormatObjsAtFrame(SwFrame&, SwPageFrame const&, 
SwLayAction*) (_rAnchorFrame=..., _rPageFrame=..., _pLayAction=0x7ffec0191b30) 
at sw/source/core/layout/objectformatter.cxx:160
    17 SwLayAction::FormatContent(SwPageFrame const*) (this=0x7ffec0191b30, 
pPage=0x9125bb0) at sw/source/core/layout/layact.cxx:1675
    18 SwLayAction::InternalAction(OutputDevice*) (this=0x7ffec0191b30, 
pRenderContext=0x55b1f00) at sw/source/core/layout/layact.cxx:771
    
    Nothing invalidates page 21 now that the fly is gone, and formatting
    on page 24 is kind of pointless now because everything from page 21
    on is wrongly positioned.  (It's possible to skip out of the main layout
    action loop via SetNextCycle()/IsAgain(), but at this point it's in
    layact:771 in the layout-all-the-visible-pages loop that follows
    the main loop, and that one can't be cancelled.)
    
    Then DoFormatObjs() is called on frame 582, and this calls
    FormatAnchorFrameForCheckMoveFwd(), which formats previous frame 581,
    splitting it and moving its follow along with 582 to page 25.
    
    Here SwMovedFwdFramesByObjPos::Insert() is called, and now the anchor
    text frame 582 cannot move back to page 24 because it's prevented by
    SwMovedFwdFramesByObjPos::FrameMovedFwdByObjPos(), but that was all
    based on the wrong assumption that the pages before 24 were
    completely formatted (this happens in action 670).
    
    Something later formats page 21 again, and so at the end there is a
    fly-sized hole at the bottom of page 24, with frame 582 at the top
    of page 25.
    
    It won't help to detect a situation where the fly is on a page previous
    to the page it's anchor frame is on in DoFormatObjs() because it was
    actually moved to the same page in a previous formatting of the anchor
    frame, in the same layout action.
    
    To fix this, try to detect in SwLayAction::FormatContent() if the
    anchor frame of any fly on the page has moved forward, and move those
    flys off the page; this is enough for the 25 page document.
    
    The 311 page document still has a hole on page 194 though; apparently
    the last content frame on the page is never reformatted, so
    invalidate its size.
    
    Change-Id: I232c6b305e8593bfecd885c36058777f3980f82f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114066
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit eb85de8e6b61fb3fcb6c03ae0145f7fe5478bccf)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114519
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>

diff --git a/sw/inc/anchoreddrawobject.hxx b/sw/inc/anchoreddrawobject.hxx
index bd74d6ea479a..eb457701a98d 100644
--- a/sw/inc/anchoreddrawobject.hxx
+++ b/sw/inc/anchoreddrawobject.hxx
@@ -94,6 +94,7 @@ class SwAnchoredDrawObject final : public SwAnchoredObject
             page frame
         */
         virtual void RegisterAtCorrectPage() override;
+        virtual void RegisterAtPage(SwPageFrame &) override;
 
         virtual bool SetObjTop_( const SwTwips _nTop) override;
         virtual bool SetObjLeft_( const SwTwips _nLeft) override;
diff --git a/sw/inc/anchoredobject.hxx b/sw/inc/anchoredobject.hxx
index 5309602f9ef0..fa789d755d53 100644
--- a/sw/inc/anchoredobject.hxx
+++ b/sw/inc/anchoredobject.hxx
@@ -295,6 +295,8 @@ class SW_DLLPUBLIC SwAnchoredObject
         /** method to invalidate position of the anchored object */
         virtual void InvalidateObjPos() = 0;
 
+        virtual void RegisterAtPage(SwPageFrame &) = 0;
+
         /** method to perform necessary invalidations for the positioning of
             objects, for whose the wrapping style influence has to be 
considered
             on the object positioning.
diff --git a/sw/source/core/inc/flyfrm.hxx b/sw/source/core/inc/flyfrm.hxx
index df39df57e176..f01c9262ec05 100644
--- a/sw/source/core/inc/flyfrm.hxx
+++ b/sw/source/core/inc/flyfrm.hxx
@@ -135,6 +135,7 @@ protected:
         page frame
     */
     virtual void RegisterAtCorrectPage() override;
+    virtual void RegisterAtPage(SwPageFrame &) override;
 
     virtual bool SetObjTop_( const SwTwips _nTop ) override;
     virtual bool SetObjLeft_( const SwTwips _nLeft ) override;
diff --git a/sw/source/core/inc/flyfrms.hxx b/sw/source/core/inc/flyfrms.hxx
index 82a67b9b5342..66e0b27e0655 100644
--- a/sw/source/core/inc/flyfrms.hxx
+++ b/sw/source/core/inc/flyfrms.hxx
@@ -170,6 +170,7 @@ protected:
         #i28701#
     */
     virtual void RegisterAtCorrectPage() override;
+    virtual void RegisterAtPage(SwPageFrame &) override;
     virtual void Modify( const SfxPoolItem*, const SfxPoolItem* ) override;
 
 public:
diff --git a/sw/source/core/inc/layact.hxx b/sw/source/core/inc/layact.hxx
index a5ed0c4eb37e..433d4b70e59a 100644
--- a/sw/source/core/inc/layact.hxx
+++ b/sw/source/core/inc/layact.hxx
@@ -111,7 +111,7 @@ class SwLayAction
 
     bool FormatLayout( OutputDevice* pRenderContext, SwLayoutFrame *, bool 
bAddRect = true );
     bool FormatLayoutTab( SwTabFrame *, bool bAddRect );
-    bool FormatContent( const SwPageFrame* pPage );
+    bool FormatContent(SwPageFrame * pPage);
     void FormatContent_( const SwContentFrame* pContent,
                        const SwPageFrame* pPage );
     bool IsShortCut( SwPageFrame *& );
diff --git a/sw/source/core/layout/anchoreddrawobject.cxx 
b/sw/source/core/layout/anchoreddrawobject.cxx
index a5631667c1e5..deee176713e9 100644
--- a/sw/source/core/layout/anchoreddrawobject.cxx
+++ b/sw/source/core/layout/anchoreddrawobject.cxx
@@ -918,10 +918,18 @@ void SwAnchoredDrawObject::RegisterAtCorrectPage()
     }
     if ( pPageFrame && GetPageFrame() != pPageFrame )
     {
-        if ( GetPageFrame() )
-            GetPageFrame()->RemoveDrawObjFromPage( *this );
-        pPageFrame->AppendDrawObjToPage( *this );
+        RegisterAtPage(*pPageFrame);
     }
 }
 
+void SwAnchoredDrawObject::RegisterAtPage(SwPageFrame & rPageFrame)
+{
+    assert(GetPageFrame() != &rPageFrame);
+    if (GetPageFrame())
+    {
+        GetPageFrame()->RemoveDrawObjFromPage( *this );
+    }
+    rPageFrame.AppendDrawObjToPage( *this );
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx
index 6e7fad1fcb82..d5b7f5427992 100644
--- a/sw/source/core/layout/fly.cxx
+++ b/sw/source/core/layout/fly.cxx
@@ -2840,6 +2840,11 @@ void SwFlyFrame::RegisterAtCorrectPage()
     // default behaviour is to do nothing.
 }
 
+void SwFlyFrame::RegisterAtPage(SwPageFrame &)
+{
+    // default behaviour is to do nothing.
+}
+
 /** method to determine, if a <MakeAll()> on the Writer fly frame is possible
 
     OD 2004-05-11 #i28701#
diff --git a/sw/source/core/layout/flycnt.cxx b/sw/source/core/layout/flycnt.cxx
index 4dc2db5921d7..bcc75a032e31 100644
--- a/sw/source/core/layout/flycnt.cxx
+++ b/sw/source/core/layout/flycnt.cxx
@@ -1418,10 +1418,20 @@ void SwFlyAtContentFrame::RegisterAtCorrectPage()
     }
     if ( pPageFrame && GetPageFrame() != pPageFrame )
     {
-        if ( GetPageFrame() )
-            GetPageFrame()->MoveFly( this, pPageFrame );
-        else
-            pPageFrame->AppendFlyToPage( this );
+        RegisterAtPage(*pPageFrame);
+    }
+}
+
+void SwFlyAtContentFrame::RegisterAtPage(SwPageFrame & rPageFrame)
+{
+    assert(GetPageFrame() != &rPageFrame);
+    if (GetPageFrame())
+    {
+        GetPageFrame()->MoveFly( this, &rPageFrame );
+    }
+    else
+    {
+        rPageFrame.AppendFlyToPage( this );
     }
 }
 
diff --git a/sw/source/core/layout/layact.cxx b/sw/source/core/layout/layact.cxx
index 45ac680c8f4f..a46a94ff8cd5 100644
--- a/sw/source/core/layout/layact.cxx
+++ b/sw/source/core/layout/layact.cxx
@@ -61,6 +61,8 @@
 #include <sortedobjs.hxx>
 #include <objectformatter.hxx>
 #include <fntcache.hxx>
+#include <fmtanchr.hxx>
+#include <comphelper/scopeguard.hxx>
 #include <vector>
 #include <tools/diagnose_ex.h>
 
@@ -1618,8 +1620,45 @@ bool SwLayAction::FormatLayoutTab( SwTabFrame *pTab, 
bool bAddRect )
     return bChanged;
 }
 
-bool SwLayAction::FormatContent( const SwPageFrame *pPage )
+bool SwLayAction::FormatContent(SwPageFrame *const pPage)
 {
+    ::comphelper::ScopeGuard g([this, pPage]() {
+        if (IsAgain())
+        {
+            return; // pPage probably deleted
+        }
+        if (auto const* pObjs = pPage->GetSortedObjs())
+        {
+            std::vector<std::pair<SwAnchoredObject*, SwPageFrame*>> moved;
+            for (auto const pObj : *pObjs)
+            {
+                SwPageFrame *const pAnchorPage(pObj->FindPageFrameOfAnchor());
+                assert(pAnchorPage);
+                if (pAnchorPage != pPage
+                    && pPage->GetPhyPageNum() < pAnchorPage->GetPhyPageNum()
+                    && pObj->GetFrameFormat().GetAnchor().GetAnchorId()
+                        != RndStdIds::FLY_AS_CHAR)
+                {
+                    moved.emplace_back(pObj, pAnchorPage);
+                }
+            }
+            for (auto const& [pObj, pAnchorPage] : moved)
+            {
+                pObj->RegisterAtPage(*pAnchorPage);
+                ::Notify_Background(pObj->GetDrawObj(), pPage,
+                    pObj->GetObjRect(), PrepareHint::FlyFrameLeave, false);
+            }
+            if (!moved.empty())
+            {
+                pPage->InvalidateFlyLayout();
+                if (auto *const pContent = pPage->FindLastBodyContent())
+                {
+                    pContent->InvalidateSize();
+                }
+            }
+        }
+    });
+
     const SwContentFrame *pContent = pPage->ContainsContent();
     const SwViewShell *pSh = m_pRoot->GetCurrShell();
     const bool bBrowse = pSh && pSh->GetViewOptions()->getBrowseMode();
commit f2a9cc6349381dedd9f0a03514b30abf3177193e
Author:     Michael Stahl <michael.st...@cib.de>
AuthorDate: Sat Feb 27 22:30:41 2021 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:00 2021 +0200

    gbuild: don't use -Wunused-macros with sccache
    
    In at least soltools, jurt and gperf generated files, build with GCC and
    sccache 0.2.16-alpha.0 reports spurious -Werror=implicit-fallthrough=
    due to comments and these go away by configuring sccache with
    rewrite_includes_only = true.
    
    But his results in
    cc1: error: ‘-fdirectives-only’ is incompatible with ‘-Wunused-macros’
    so disable that like for clang-with-icecream builds.
    
    Change-Id: I6dec38e86aa6e22591d7a700a8daddf3fed88b16
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111716
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>
    (cherry picked from commit 6fb9f368c6824a8ff7bc5bc5cf66fc2df7d055b7)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114518
    Reviewed-by: Thorsten Behrens <thorsten.behr...@allotropia.de>

diff --git a/solenv/gbuild/platform/com_GCC_defs.mk 
b/solenv/gbuild/platform/com_GCC_defs.mk
index 047f121106de..66374ce6b0bb 100644
--- a/solenv/gbuild/platform/com_GCC_defs.mk
+++ b/solenv/gbuild/platform/com_GCC_defs.mk
@@ -57,7 +57,7 @@ gb_CFLAGS_COMMON := \
        -Wstrict-prototypes \
        -Wundef \
        -Wunreachable-code \
-       $(if $(and $(COM_IS_CLANG),$(or $(findstring icecc,$(CC)),$(findstring 
icecc,$(CCACHE_PREFIX)))),,-Wunused-macros) \
+       $(if $(or $(and $(COM_IS_CLANG),$(or $(findstring 
icecc,$(CC)),$(findstring icecc,$(CCACHE_PREFIX)))),$(findstring 
sccache,$(CC))),,-Wunused-macros) \
        $(if $(COM_IS_CLANG),-Wembedded-directive) \
        -finput-charset=UTF-8 \
        -fmessage-length=0 \
@@ -74,7 +74,7 @@ gb_CXXFLAGS_COMMON := \
        -Wextra \
        -Wundef \
        -Wunreachable-code \
-       $(if $(and $(COM_IS_CLANG),$(or $(findstring icecc,$(CC)),$(findstring 
icecc,$(CCACHE_PREFIX)))),,-Wunused-macros) \
+       $(if $(or $(and $(COM_IS_CLANG),$(or $(findstring 
icecc,$(CXX)),$(findstring icecc,$(CCACHE_PREFIX)))),$(findstring 
sccache,$(CXX))),,-Wunused-macros) \
        $(if $(COM_IS_CLANG),-Wembedded-directive) \
        -finput-charset=UTF-8 \
        -fmessage-length=0 \
commit 7a8284af71ddb9e0afe3f52a03d71ed7d408d9ed
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Sat Apr 17 14:46:59 2021 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Apr 27 21:55:00 2021 +0200

    tdf#136058: remove some caching
    
    if we going to recreate it every time we call this method,
    there is no point in caching the result.
    
    Change-Id: Ie1f7bde86eca5cdd998fa8626303d3dead479ad3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114231
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

... etc. - the rest is truncated
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to