From 52d265c0d2f2638c386475e58c3ee489ccd3f06c Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Thu, 13 Jul 2023 08:14:42 +0200 Subject: [PATCH] sw floattable: fix lost floating table right before a hidden para from DOCX The bugdoc has a floating table, but that was not visible in Writer. What happens is that the table's anchor was hidden, so Writer was hiding the anchored table as well, but Word still shows the table in this case. Fix the problem similar to what commit 79ddca4def81198e3eee42eca8aca42fef964c80 (sw floattable: fix lost floating table right before a table from DOC, 2023-07-05) did for the DOC import: if the paragraph has an anchored floating table and is hidden, then show the paragraph. An alternative would be to change how NS_ooxml::LN_EG_RPrBase_vanish is handled in DomainMapper::sprmWithProps(), but that would be too early: by the time we get the SPRM, there is no floating table yet. Another alternative would be to make sure floating tables are part of the "anchored object" list in DomainMapper_Impl::finishParagraph() (that's how shapes don't have this problem), but the anchor paragraph is finished before creating the floating table, so that would be again too early. Change-Id: I7df7e318b15e78ceb51474440923a80bfdc6054b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154376 Reviewed-by: Miklos Vajna Tested-by: Jenkins --- .../dmapper/DomainMapperTableHandler.cxx | 19 ++++++++++++++++++ .../data/floattable-hidden-anchor.docx | Bin 0 -> 21698 bytes .../dmapper/DomainMapperTableHandler.cxx | 18 +++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 writerfilter/qa/cppunittests/dmapper/data/floattable-hidden-anchor.docx diff --git a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx index 1f044bc2f309..8c11e3db22c7 100644 --- a/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx +++ b/writerfilter/qa/cppunittests/dmapper/DomainMapperTableHandler.cxx @@ -114,6 +114,25 @@ CPPUNIT_TEST_FIXTURE(Test, testFloatingTablesOuterNonsplitInner) // i.e. the inner floating table was not floating. CPPUNIT_ASSERT_EQUAL(static_cast(4), xFrames->getCount()); } + +CPPUNIT_TEST_FIXTURE(Test, testDOCXFloatingTableHiddenAnchor) +{ + // Given a document with a floating table, anchored in a paragraph that is hidden: + loadFromURL(u"floattable-hidden-anchor.docx"); + + // When checking the visibility of the the anchor paragraph: + uno::Reference xTextDocument(mxComponent, uno::UNO_QUERY); + uno::Reference xText(xTextDocument->getText(), uno::UNO_QUERY); + uno::Reference xParagraphs = xText->createEnumeration(); + uno::Reference xAnchor(xParagraphs->nextElement(), uno::UNO_QUERY); + + // Then make sure the anchor (and thus the table) is visible: + bool bCharHidden{}; + CPPUNIT_ASSERT(xAnchor->getPropertyValue("CharHidden") >>= bCharHidden); + // Without the accompanying fix in place, this test would have failed, the paragraph + table was + // hidden. + CPPUNIT_ASSERT(!bCharHidden); +} } CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/qa/cppunittests/dmapper/data/floattable-hidden-anchor.docx b/writerfilter/qa/cppunittests/dmapper/data/floattable-hidden-anchor.docx new file mode 100644 index 0000000000000000000000000000000000000000..08816aacc47ea932670e37b914ea1d01756a4ce0 GIT binary patch literal 21698 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