sw/qa/extras/layout/data/tdf169999.fodt |   13 +++++++++++++
 sw/qa/extras/layout/layout6.cxx         |   26 ++++++++++++++++++++++++++
 sw/source/core/layout/calcmove.cxx      |    3 ++-
 3 files changed, 41 insertions(+), 1 deletion(-)

New commits:
commit 3fee62758506d1667df37402ad8aab8cdc01032f
Author:     Mike Kaganski <[email protected]>
AuthorDate: Mon Feb 16 16:45:49 2026 +0500
Commit:     Xisco Fauli <[email protected]>
CommitDate: Fri Feb 20 10:28:57 2026 +0100

    tdf#169999: Also hide footnotes when text frame is hidden
    
    This is similar to what MakePrtArea does in that case: call HideHidden.
    
    Change-Id: I0625c00c5ec168698feed9d34079a1e84a8fa1b9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199477
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <[email protected]>
    Signed-off-by: Xisco Fauli <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/199499

diff --git a/sw/qa/extras/layout/data/tdf169999.fodt 
b/sw/qa/extras/layout/data/tdf169999.fodt
new file mode 100644
index 000000000000..c554309a6e5b
--- /dev/null
+++ b/sw/qa/extras/layout/data/tdf169999.fodt
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:ooow="http://openoffice.org/2004/writer"; office:version="1.4" 
office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:body>
+  <office:text>
+   <text:p/>
+   <text:section text:name="Section1" text:condition="ooow:0" 
text:display="condition">
+    <text:p>This is a hidden section.<text:note text:id="ftn1" 
text:note-class="footnote"><text:note-citation>1</text:note-citation><text:note-body>
+       <text:p>This is a footnote in the hidden 
section.</text:p></text:note-body></text:note> Here are some random words in 
it.</text:p>
+   </text:section>
+  </office:text>
+ </office:body>
+</office:document>
\ No newline at end of file
diff --git a/sw/qa/extras/layout/layout6.cxx b/sw/qa/extras/layout/layout6.cxx
index f4c8cb590ffc..75abbc4fc7d5 100644
--- a/sw/qa/extras/layout/layout6.cxx
+++ b/sw/qa/extras/layout/layout6.cxx
@@ -2204,6 +2204,32 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter6, testTdf170811)
     parseLayoutDump();
 }
 
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter6, testTdf169999)
+{
+    // Open a document with a section with a paragraph with a footnote
+    createSwDoc("tdf169999.fodt");
+
+    // Initially, the hide condition evaluates to false, so footnote is 
visible:
+    {
+        xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+        assertXPath(pXmlDoc, "//ftn", 1);
+    }
+
+    // Set hide condition to "1"
+    auto xTextSectionsSupplier = 
mxComponent.queryThrow<css::text::XTextSectionsSupplier>();
+    auto xSections = xTextSectionsSupplier->getTextSections();
+    CPPUNIT_ASSERT(xSections);
+    auto xSection = 
xSections->getByName(u"Section1"_ustr).queryThrow<css::beans::XPropertySet>();
+    xSection->setPropertyValue(u"Condition"_ustr, css::uno::Any(u"1"_ustr));
+    Scheduler::ProcessEventsToIdle();
+
+    // The footnote must get hidden - without the fix, the text failed, 
because there was a ftn
+    {
+        xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+        assertXPath(pXmlDoc, "//ftn", 0);
+    }
+}
+
 } // end of anonymous namespace
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/sw/source/core/layout/calcmove.cxx 
b/sw/source/core/layout/calcmove.cxx
index 1fdc0c047e5e..e7d8d4949b79 100644
--- a/sw/source/core/layout/calcmove.cxx
+++ b/sw/source/core/layout/calcmove.cxx
@@ -1326,11 +1326,12 @@ void SwContentFrame::MakeAll(vcl::RenderContext* 
/*pRenderContext*/)
     bool const isHiddenNow(static_cast<SwTextFrame*>(this)->IsHiddenNowImpl());
     if (isHiddenNow)
     {
+        // Similar to respective code in MakePrtArea
         while (HasFollow())
         {
             static_cast<SwTextFrame&>(*this).JoinFrame();
         }
-        HideAndShowObjects();
+        static_cast<SwTextFrame*>(this)->HideHidden(); // also hides footnotes
     }
 
     std::optional<SwFrameDeleteGuard> oDeleteGuard(std::in_place, this);

Reply via email to