oox/source/export/drawingml.cxx               |    8 -
 sd/source/filter/eppt/pptx-animations.cxx     |   14 +-
 sw/qa/extras/layout/data/nested-sections.fodt |  157 ++++++++++++++++++++++++++
 sw/qa/extras/layout/layout3.cxx               |   37 ++++++
 sw/source/core/inc/sectfrm.hxx                |   10 +
 sw/source/core/layout/calcmove.cxx            |   20 +--
 sw/source/core/layout/sectfrm.cxx             |   12 +
 7 files changed, 234 insertions(+), 24 deletions(-)

New commits:
commit 4f2b3ccbe0b7ac494cd56f38ba6c8375f3e89898
Author:     Michael Stahl <[email protected]>
AuthorDate: Tue Sep 23 16:19:36 2025 +0200
Commit:     Xisco Fauli <[email protected]>
CommitDate: Wed Nov 5 09:36:18 2025 +0100

    sw: layout: when positioning SwSectionFrame, ignore dead prev sections
    
    The place where it went wrong was in a second layout iteration when
    after positioning some objects everything was moved down, in
    SwSectionFrame::SimpleFormat(), where an empty section frame 72 of the
    1st outer section was the prev of the 2nd outer section frame 73, and
    was itself not positioned properly.
    
    Apparently this empty section frame is inserted by InsertCnt_() but of
    course empty section frames can happen in other ways too.
    
    (reportedly regression from commit a85bd1bc9305af059d880ee422a656a3d9ce1b0b)
    
    Change-Id: I7513a2171fe4f3763f7b73b2e4368032e015c495
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191410
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <[email protected]>
    (cherry picked from commit 528d5c8e0b9401ba945967e66775aea17aec7d00)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191718
    Reviewed-by: Xisco Fauli <[email protected]>

diff --git a/sw/qa/extras/layout/data/nested-sections.fodt 
b/sw/qa/extras/layout/data/nested-sections.fodt
new file mode 100644
index 000000000000..cb27f13fd9d8
--- /dev/null
+++ b/sw/qa/extras/layout/data/nested-sections.fodt
@@ -0,0 +1,157 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/"; 
xmlns:grddl="http://www.w3.org/2003/g/data-view#"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xforms="http://www.w3.org/2002/xforms"; 
xmlns:dom="http://www.w3.org/2001/xml-events"; 
xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" 
xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" 
xmlns:math="http://www.w3.org/1998/Math/MathML"; 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:ooo="http://openoffice.org/2004/office"; 
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" 
xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" 
xmlns:ooow="http://openoffice.org/2004/writer"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; 
xmlns:drawooo="http://openoffice.org/2010/draw"; 
xmlns:oooc="http://openoffice.org/2004/calc"; 
xmlns:dc="http://purl.org/dc/elements/1.1/"; xmlns:c
 alcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" 
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" 
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" 
xmlns:tableooo="http://openoffice.org/2009/table"; 
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" 
xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" 
xmlns:rpt="http://openoffice.org/2005/report"; 
xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0"
 xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" 
xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" 
xmlns:officeooo="http://openoffice.org/2009/office"; 
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" 
xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" 
xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" 
xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:
 meta:1.0" 
xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0"
 office:version="1.4" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:font-face-decls>
+  <style:font-face style:name="Liberation Serif" svg:font-family="'Liberation 
Serif'" style:font-family-generic="roman" style:font-pitch="variable"/>
+  <style:font-face style:name="Lucida Sans1" svg:font-family="'Lucida Sans'" 
style:font-family-generic="system" style:font-pitch="variable"/>
+  <style:font-face style:name="Noto Serif CJK SC" svg:font-family="'Noto Serif 
CJK SC'" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+  <style:default-style style:family="graphic">
+   <style:graphic-properties svg:stroke-color="#3465a4" 
draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" 
draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" 
draw:start-line-spacing-vertical="0.283cm" 
draw:end-line-spacing-horizontal="0.283cm" 
draw:end-line-spacing-vertical="0.283cm" style:writing-mode="lr-tb" 
style:flow-with-text="false"/>
+   <style:paragraph-properties style:text-autospace="ideograph-alpha" 
style:line-break="strict" loext:tab-stop-distance="0cm" 
style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+    <style:tab-stops/>
+   </style:paragraph-properties>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" 
fo:language="de" fo:country="DE" style:letter-kerning="true" 
style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" 
style:language-asian="zh" style:country-asian="CN" 
style:font-name-complex="Lucida Sans1" style:font-size-complex="12pt" 
style:language-complex="hi" style:country-complex="IN"/>
+  </style:default-style>
+  <style:default-style style:family="paragraph">
+   <style:paragraph-properties fo:orphans="2" fo:widows="2" 
fo:hyphenation-ladder-count="no-limit" fo:hyphenation-keep="auto" 
loext:hyphenation-keep-type="column" loext:hyphenation-keep-line="false" 
style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" 
style:line-break="strict" style:tab-stop-distance="1.251cm" 
style:writing-mode="page"/>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" 
fo:language="de" fo:country="DE" style:letter-kerning="true" 
style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" 
style:language-asian="zh" style:country-asian="CN" 
style:font-name-complex="Lucida Sans1" style:font-size-complex="12pt" 
style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" 
fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" 
loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" 
loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+  </style:default-style>
+  <style:default-style style:family="table">
+   <style:table-properties table:border-model="collapsing"/>
+  </style:default-style>
+  <style:default-style style:family="table-row">
+   <style:table-row-properties fo:keep-together="auto"/>
+  </style:default-style>
+  <style:style style:name="Standard" style:family="paragraph" 
style:class="text"/>
+  <text:outline-style style:name="Outline">
+   <text:outline-level-style text:level="1" loext:num-list-format="%1%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="2" loext:num-list-format="%2%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="3" loext:num-list-format="%3%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="4" loext:num-list-format="%4%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="5" loext:num-list-format="%5%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="6" loext:num-list-format="%6%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="7" loext:num-list-format="%7%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="8" loext:num-list-format="%8%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="9" loext:num-list-format="%9%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+   <text:outline-level-style text:level="10" loext:num-list-format="%10%" 
style:num-format="">
+    <style:list-level-properties 
text:list-level-position-and-space-mode="label-alignment">
+     <style:list-level-label-alignment text:label-followed-by="listtab"/>
+    </style:list-level-properties>
+   </text:outline-level-style>
+  </text:outline-style>
+  <text:notes-configuration text:note-class="footnote" style:num-format="1" 
text:start-value="0" text:footnotes-position="page" 
text:start-numbering-at="document"/>
+  <text:notes-configuration text:note-class="endnote" style:num-format="i" 
text:start-value="0"/>
+  <text:linenumbering-configuration text:number-lines="false" 
text:offset="0.499cm" style:num-format="1" text:number-position="left" 
text:increment="5"/>
+  </office:styles>
+ <office:automatic-styles>
+  <style:style style:name="Sect1" style:family="section">
+   <style:section-properties fo:background-color="#81d41a" 
style:editable="false">
+    <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+    <style:background-image/>
+   </style:section-properties>
+  </style:style>
+  <style:style style:name="Sect2" style:family="section">
+   <style:section-properties fo:background-color="#00a933" 
style:editable="false">
+    <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+    <style:background-image/>
+   </style:section-properties>
+  </style:style>
+  <style:style style:name="Sect3" style:family="section">
+   <style:section-properties fo:background-color="#77caee" 
style:editable="false">
+    <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+    <style:background-image/>
+   </style:section-properties>
+  </style:style>
+  <style:style style:name="gr1" style:family="graphic">
+   <style:graphic-properties draw:textarea-horizontal-align="justify" 
draw:textarea-vertical-align="middle" draw:auto-grow-height="false" 
fo:min-height="2.499cm" fo:min-width="3.099cm" loext:decorative="false" 
style:run-through="foreground" style:wrap="none" style:vertical-pos="from-top" 
style:vertical-rel="paragraph" style:horizontal-pos="from-left" 
style:horizontal-rel="paragraph" 
draw:wrap-influence-on-position="once-concurrent" loext:allow-overlap="true" 
style:flow-with-text="false"/>
+  </style:style>
+  <style:page-layout style:name="pm1">
+   <style:page-layout-properties fo:page-width="10.5cm" 
fo:page-height="14.801cm" style:num-format="1" 
style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" 
fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" 
style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" 
style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" 
style:layout-grid-mode="none" style:layout-grid-ruby-below="false" 
style:layout-grid-print="false" style:layout-grid-display="false" 
style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+    <style:footnote-sep style:width="0.018cm" 
style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" 
style:line-style="solid" style:adjustment="left" style:rel-width="25%" 
style:color="#000000"/>
+   </style:page-layout-properties>
+   <style:header-style/>
+   <style:footer-style/>
+  </style:page-layout>
+  <style:style style:name="dp1" style:family="drawing-page">
+   <style:drawing-page-properties draw:background-size="full"/>
+  </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+  <style:master-page style:name="Standard" style:page-layout-name="pm1" 
draw:style-name="dp1"/>
+  </office:master-styles>
+ <office:body>
+  <office:text text:use-soft-page-breaks="true">
+   <text:sequence-decls>
+    <text:sequence-decl text:display-outline-level="0" 
text:name="Illustration"/>
+    <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+    <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+    <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+    <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+   </text:sequence-decls>
+   <text:section text:style-name="Sect1" text:name="Section1">
+    <text:p text:style-name="Standard"/>
+    <text:p text:style-name="Standard"/>
+    <text:p text:style-name="Standard"/>
+    <text:p text:style-name="Standard"/>
+    <text:p text:style-name="Standard"/>
+    <text:p text:style-name="Standard"/>
+    <text:p text:style-name="Standard"/>
+    <text:p text:style-name="Standard"/>
+    <text:p text:style-name="Standard"/>
+    <text:p text:style-name="Standard"/>
+    <text:p text:style-name="Standard"/>
+    <text:p text:style-name="Standard"/>
+    <text:p text:style-name="Standard"><draw:custom-shape 
text:anchor-type="paragraph" draw:z-index="0" draw:name="Shape 1" 
draw:style-name="gr1" svg:width="3.1cm" svg:height="2.5cm" svg:x="2.559cm" 
svg:y="0.09cm">
+      <text:p/>
+      <draw:enhanced-geometry svg:viewBox="0 0 21600 21600" 
draw:type="rectangle" draw:enhanced-path="M 0 0 L 21600 0 21600 21600 0 21600 0 
0 Z N"/>
+     </draw:custom-shape>Outer 1</text:p>
+    <text:section text:style-name="Sect2" text:name="Section2">
+     <text:p text:style-name="Standard">Inner 1</text:p>
+     <text:p text:style-name="Standard">more</text:p>
+    </text:section>
+   </text:section>
+   <text:section text:style-name="Sect3" text:name="Section4">
+    <text:p text:style-name="Standard">Outer 2</text:p>
+    <text:p text:style-name="Standard"><text:soft-page-break/>more2</text:p>
+   </text:section>
+   <text:p text:style-name="Standard"/>
+  </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/extras/layout/layout3.cxx b/sw/qa/extras/layout/layout3.cxx
index 23dd0dc51221..581ee5aa08ee 100644
--- a/sw/qa/extras/layout/layout3.cxx
+++ b/sw/qa/extras/layout/layout3.cxx
@@ -137,6 +137,43 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testTdf120287)
     assertXPath(pXmlDoc, "/root/page/body/txt[1]/SwParaPortion/SwLineLayout", 
1);
 }
 
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter3, testNestedSectionOverlap)
+{
+    createSwDoc("nested-sections.fodt");
+
+    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+    SwTwips nOuterSection1Bottom
+        = getXPath(pXmlDoc, "/root/page[1]/body/section[1]/infos/bounds", 
"bottom").toInt32();
+    SwTwips nInnerSection1Top
+        = getXPath(pXmlDoc, "/root/page[1]/body/section[2]/infos/bounds", 
"top").toInt32();
+    SwTwips nInnerSection1Bottom
+        = getXPath(pXmlDoc, "/root/page[1]/body/section[2]/infos/bounds", 
"bottom").toInt32();
+    SwTwips nOuterSection2Top
+        = getXPath(pXmlDoc, "/root/page[1]/body/section[3]/infos/bounds", 
"top").toInt32();
+
+    SwTwips nOuterSection1TextBottom
+        = getXPath(pXmlDoc, 
"/root/page[1]/body/section[1]/txt[13]/infos/bounds", "bottom")
+              .toInt32();
+    CPPUNIT_ASSERT_EQUAL(nOuterSection1Bottom, nOuterSection1TextBottom);
+
+    SwTwips nInnerSection1TextTop
+        = getXPath(pXmlDoc, 
"/root/page[1]/body/section[2]/txt[1]/infos/bounds", "top").toInt32();
+    CPPUNIT_ASSERT_EQUAL(nInnerSection1Top, nInnerSection1TextTop);
+    SwTwips nInnerSection1TextBottom
+        = getXPath(pXmlDoc, 
"/root/page[1]/body/section[2]/txt[2]/infos/bounds", "bottom")
+              .toInt32();
+    CPPUNIT_ASSERT_EQUAL(nInnerSection1Bottom, nInnerSection1TextBottom);
+
+    SwTwips nOuterSection2TextTop
+        = getXPath(pXmlDoc, 
"/root/page[1]/body/section[3]/txt[1]/infos/bounds", "top").toInt32();
+    CPPUNIT_ASSERT_EQUAL(nOuterSection2Top, nOuterSection2TextTop);
+
+    // the problem was that the outer section 2 was positioned above inner 1
+    CPPUNIT_ASSERT_EQUAL(nOuterSection1Bottom + 1, nInnerSection1Top);
+    CPPUNIT_ASSERT_EQUAL(nInnerSection1Bottom + 1, nOuterSection2Top);
+}
+
 auto getXPathIntAttributeValue(xmlXPathContextPtr pXmlXpathCtx, char const* 
const pXPath)
     -> sal_Int32
 {
diff --git a/sw/source/core/inc/sectfrm.hxx b/sw/source/core/inc/sectfrm.hxx
index 4222a6e6443d..b8361ac93465 100644
--- a/sw/source/core/inc/sectfrm.hxx
+++ b/sw/source/core/inc/sectfrm.hxx
@@ -191,6 +191,16 @@ inline const SwContentFrame 
*SwSectionFrame::FindLastContent() const
     return const_cast<SwSectionFrame*>(this)->FindLastContent();
 }
 
+namespace sw {
+
+/** GetPrev() but ignore dead empty SectionFrames
+    @param bSectPrev    if true, and pFrame is first child of section frame,
+                        get section frame's prev
+ */
+SwFrame* PrevSkipDead(SwFrame* pFrame, bool bSectPrv);
+
+} // namespace sw
+
 #endif // INCLUDED_SW_SOURCE_CORE_INC_SECTFRM_HXX
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/core/layout/calcmove.cxx 
b/sw/source/core/layout/calcmove.cxx
index 1d4a002f6706..65c51dab25e7 100644
--- a/sw/source/core/layout/calcmove.cxx
+++ b/sw/source/core/layout/calcmove.cxx
@@ -521,8 +521,10 @@ void SwFrame::PrepareCursor()
     Calc(getRootFrame()->GetCurrShell() ? 
getRootFrame()->GetCurrShell()->GetOut() : nullptr);
 }
 
+namespace sw {
+
 // Here we return GetPrev(); however we will ignore empty SectionFrames
-static SwFrame* lcl_Prev( SwFrame* pFrame, bool bSectPrv = true )
+SwFrame* PrevSkipDead(SwFrame *const pFrame, bool const bSectPrv)
 {
     SwFrame* pRet = pFrame->GetPrev();
     if( !pRet && pFrame->GetUpper() && pFrame->GetUpper()->IsSctFrame() &&
@@ -534,12 +536,14 @@ static SwFrame* lcl_Prev( SwFrame* pFrame, bool bSectPrv 
= true )
     return pRet;
 }
 
+} // namespace sw
+
 static SwFrame* lcl_NotHiddenPrev( SwFrame* pFrame )
 {
     SwFrame *pRet = pFrame;
     do
     {
-        pRet = lcl_Prev( pRet );
+        pRet = ::sw::PrevSkipDead(pRet, true);
     } while ( pRet && pRet->IsHiddenNow() );
     return pRet;
 }
@@ -551,7 +555,7 @@ void SwFrame::MakePos()
 
     setFrameAreaPositionValid(true);
     bool bUseUpper = false;
-    SwFrame* pPrv = lcl_Prev( this );
+    SwFrame* pPrv = ::sw::PrevSkipDead(this, true);
     if ( pPrv &&
          ( !pPrv->IsContentFrame() ||
            ( static_cast<SwContentFrame*>(pPrv)->GetFollow() != this ) )
@@ -574,7 +578,7 @@ void SwFrame::MakePos()
         }
     }
 
-    pPrv = lcl_Prev( this, false );
+    pPrv = ::sw::PrevSkipDead(this, false);
     const SwFrameType nMyType = GetType();
     SwRectFnSet aRectFnSet((IsCellFrame() && GetUpper() ? GetUpper() : this));
     if ( !bUseUpper && pPrv )
@@ -637,7 +641,7 @@ void SwFrame::MakePos()
         {
             GetUpper()->Calc(getRootFrame()->GetCurrShell()->GetOut());
         }
-        pPrv = lcl_Prev( this, false );
+        pPrv = ::sw::PrevSkipDead(this, false);
         if ( !bUseUpper && pPrv )
         {
             SwFrameAreaDefinition::FrameAreaWriteAccess aFrm(*this);
@@ -1415,7 +1419,7 @@ void SwContentFrame::MakeAll(vcl::RenderContext* 
/*pRenderContext*/)
         // Also move a paragraph forward, which is the first one inside a 
table cell.
         if ( bMoveFwdByObjPos &&
              FindPageFrame()->GetPhyPageNum() < nToPageNum &&
-             ( lcl_Prev( this ) ||
+             ( ::sw::PrevSkipDead(this, true) ||
                GetUpper()->IsCellFrame() ||
                ( GetUpper()->IsSctFrame() &&
                  GetUpper()->GetUpper()->IsCellFrame() ) ) &&
@@ -1425,7 +1429,7 @@ void SwContentFrame::MakeAll(vcl::RenderContext* 
/*pRenderContext*/)
             MoveFwd( bMakePage, false );
         }
     }
-    else if (auto* prev = lcl_Prev(this); prev && IsMoveable())
+    else if (auto *const prev{::sw::PrevSkipDead(this, true)}; prev && 
IsMoveable())
     {
         // If a Follow sits next to its Master and doesn't fit, we know it can 
be moved right now.
         bMovedFwd = true;
@@ -1645,7 +1649,7 @@ void SwContentFrame::MakeAll(vcl::RenderContext* 
/*pRenderContext*/)
         auto const pTemp(GetIndPrev());
         auto const bTemp(pTemp && pTemp->isFrameAreaSizeValid()
                                && pTemp->isFramePrintAreaValid());
-        if ( !lcl_Prev( this ) &&
+        if ( !::sw::PrevSkipDead(this, true) &&
              !bMovedFwd &&
              ( bMoveable || ( bFly && !bTab ) ) &&
              ( !bFootnote || !GetUpper()->FindFootnoteFrame()->GetPrev() )
diff --git a/sw/source/core/layout/sectfrm.cxx 
b/sw/source/core/layout/sectfrm.cxx
index 29cd7be95b0a..ed0431ab3f07 100644
--- a/sw/source/core/layout/sectfrm.cxx
+++ b/sw/source/core/layout/sectfrm.cxx
@@ -418,7 +418,7 @@ void SwSectionFrame::Paste( SwFrame* pParent, SwFrame* 
pSibling )
         if (bInserted)
         {
             pSect->Init();
-            aRectFnSet.MakePos( *pSect, pSect->GetUpper(), pSect->GetPrev(), 
true);
+            aRectFnSet.MakePos(*pSect, pSect->GetUpper(), 
::sw::PrevSkipDead(pSect, false), true);
         }
         if( !static_cast<SwLayoutFrame*>(pParent)->Lower() )
         {
@@ -561,6 +561,7 @@ SwSectionFrame* SwSectionFrame::SplitSect( SwFrame* 
pFrameStartAfter, SwFrame* p
     pNew->InsertBehind( pFramePutAfter->GetUpper(), pFramePutAfter );
     pNew->Init();
     SwRectFnSet aRectFnSet(this);
+    assert(!pFramePutAfter->IsSctFrame() || 
static_cast<SwSectionFrame*>(pFramePutAfter)->GetSection()); // it's not dead
     aRectFnSet.MakePos( *pNew, nullptr, pFramePutAfter, true );
     // OD 25.03.2003 #108339# - restore content:
     // determine layout frame for restoring content after the initialization
@@ -820,7 +821,7 @@ void SwSectionFrame::MakeAll(vcl::RenderContext* 
pRenderContext)
             if( GetUpper() )
             {
                 SwRectFnSet aRectFnSet(GetUpper());
-                aRectFnSet.MakePos( *this, GetUpper(), GetPrev(), false );
+                aRectFnSet.MakePos(*this, GetUpper(), ::sw::PrevSkipDead(this, 
false), false);
             }
 
             if (getFrameArea().Height() == 0)
@@ -1264,11 +1265,12 @@ void SwSectionFrame::SimpleFormat()
         return;
     LockJoin();
     SwRectFnSet aRectFnSet(this);
-    if( GetPrev() || GetUpper() )
+    SwFrame *const pPrev{::sw::PrevSkipDead(this, false)};
+    if (pPrev || GetUpper())
     {
         // assure notifications on position changes.
         const SwLayNotify aNotify( this );
-        aRectFnSet.MakePos( *this, GetUpper(), GetPrev(), false );
+        aRectFnSet.MakePos(*this, GetUpper(), pPrev, false);
         setFrameAreaPositionValid(true);
     }
     SwTwips nDeadLine = aRectFnSet.GetPrtBottom(*GetUpper());
@@ -2204,7 +2206,7 @@ SwLayoutFrame *SwFrame::GetPrevSctLeaf()
         pNew->InsertBefore( pLayLeaf, nullptr );
         pNew->Init();
         SwRectFnSet aRectFnSet(pNew);
-        aRectFnSet.MakePos( *pNew, pLayLeaf, pNew->GetPrev(), true );
+        aRectFnSet.MakePos(*pNew, pLayLeaf, ::sw::PrevSkipDead(pNew, false), 
true);
 
         pLayLeaf = FirstLeaf( pNew );
         if( !pNew->Lower() )    // Format single column sections
commit 80aa6a38127882e15015b0ce5e9066f007671340
Author:     Michael Meeks <[email protected]>
AuthorDate: Fri Oct 3 17:58:59 2025 +0100
Commit:     Xisco Fauli <[email protected]>
CommitDate: Wed Nov 5 09:36:09 2025 +0100

    pptx export: re-order attributes to better match MSO.
    
    This helps to minimize the diff.
    
    Change-Id: I8a16932725094ca047350503f65c673fa85f8398
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191943
    Reviewed-by: Michael Meeks <[email protected]>
    Tested-by: Jenkins
    (cherry picked from commit 1950a7fd912dd08f2555472871b944d551a5ad9a)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/193421
    Reviewed-by: Xisco Fauli <[email protected]>

diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 56513d465e57..9098e6d9d4bd 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -2696,14 +2696,14 @@ void DrawingML::WriteRunProperties( const Reference< 
XPropertySet >& rRun, bool
     assert(nSize >= 200 && "Minimum accepted value for 
fontsize(ST_TextFontSize) is 200");
 
     mpFS->startElementNS( XML_a, nElement,
-                          XML_b, bold,
-                          XML_i, italic,
                           XML_lang, sax_fastparser::UseIf(usLanguage, 
!usLanguage.isEmpty()),
                           XML_sz, OString::number(nSize),
-            // For Condensed character spacing spc value is negative.
+                          XML_b, bold,
+                          XML_i, italic,
+                          XML_u, underline,
+                          // For Condensed character spacing spc value is 
negative.
                           XML_spc, 
sax_fastparser::UseIf(OString::number(nCharKerning), nCharKerning != 0),
                           XML_strike, strikeout,
-                          XML_u, underline,
                           XML_baseline, 
sax_fastparser::UseIf(OString::number(nCharEscapement*1000), nCharEscapement != 
0),
                           XML_cap, cap );
 
diff --git a/sd/source/filter/eppt/pptx-animations.cxx 
b/sd/source/filter/eppt/pptx-animations.cxx
index 90c9da85b038..7943962f4857 100644
--- a/sd/source/filter/eppt/pptx-animations.cxx
+++ b/sd/source/filter/eppt/pptx-animations.cxx
@@ -920,13 +920,13 @@ void 
PPTXAnimationExport::WriteAnimationNodeCommonPropsStart()
     if (fRepeatCount != 0)
         sRepeatCount = OString::number(static_cast<sal_Int32>(fRepeatCount * 
1000.0));
 
-    mpFS->startElementNS(
-        XML_p, XML_cTn, XML_id, 
OString::number(GetNextAnimationNodeId(rXNode)), XML_dur, sDuration,
-        XML_autoRev, sax_fastparser::UseIf("1", bAutoReverse), XML_restart, 
pRestart, XML_nodeType,
-        pNodeType, XML_fill, pFill, XML_presetClass, pPresetClass, 
XML_presetID,
-        sax_fastparser::UseIf(OString::number(nPresetId), bPresetId), 
XML_presetSubtype,
-        sax_fastparser::UseIf(OString::number(nPresetSubType), 
bPresetSubType), XML_repeatCount,
-        sRepeatCount);
+    mpFS->startElementNS(XML_p, XML_cTn, XML_id, 
OString::number(GetNextAnimationNodeId(rXNode)),
+                         XML_dur, sDuration, XML_restart, pRestart, 
XML_presetID,
+                         sax_fastparser::UseIf(OString::number(nPresetId), 
bPresetId),
+                         XML_presetClass, pPresetClass, XML_fill, pFill, 
XML_nodeType, pNodeType,
+                         XML_autoRev, sax_fastparser::UseIf("1", 
bAutoReverse), XML_presetSubtype,
+                         
sax_fastparser::UseIf(OString::number(nPresetSubType), bPresetSubType),
+                         XML_repeatCount, sRepeatCount);
 
     WriteAnimationCondList(mpContext->getBeginCondList(), XML_stCondLst);
     WriteAnimationCondList(mpContext->getEndCondList(), XML_endCondLst);

Reply via email to