sw/qa/core/draw/data/textbox-undo-ordnum.docx |binary sw/qa/core/draw/draw.cxx | 53 ++++++++++++++++++++++++++ 2 files changed, 53 insertions(+)
New commits: commit d2a45762f1b5f1c7093469e34d9f56defa88e9e4 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Mon Mar 8 21:06:10 2021 +0100 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Tue Mar 9 08:37:07 2021 +0100 tdf#140292 sw: fix z-order of textbox on undo Regression from commit 200cd2b99bee18962a970edc5d059286f6c3ea0e (tdf#138995 DOCX import: fix handling of textbox zorders, 2021-01-11), the problem was already fixed by Michael Stahl, this just adds a test for it. Change-Id: Id613224d5fab0c2d2a3bdfd58bff6d77a92dd374 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112181 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmik...@collabora.com> diff --git a/sw/qa/core/draw/data/textbox-undo-ordnum.docx b/sw/qa/core/draw/data/textbox-undo-ordnum.docx new file mode 100644 index 000000000000..96b00973289a Binary files /dev/null and b/sw/qa/core/draw/data/textbox-undo-ordnum.docx differ diff --git a/sw/qa/core/draw/draw.cxx b/sw/qa/core/draw/draw.cxx index b8544022589a..c4654dde8127 100644 --- a/sw/qa/core/draw/draw.cxx +++ b/sw/qa/core/draw/draw.cxx @@ -10,11 +10,14 @@ #include <swmodeltestbase.hxx> #include <svx/svdpage.hxx> +#include <vcl/scheduler.hxx> #include <IDocumentDrawModelAccess.hxx> #include <docsh.hxx> #include <drawdoc.hxx> #include <wrtsh.hxx> +#include <frameformats.hxx> +#include <textboxhelper.hxx> constexpr OUStringLiteral DATA_DIRECTORY = u"/sw/qa/core/draw/data/"; @@ -46,6 +49,56 @@ CPPUNIT_TEST_FIXTURE(SwCoreDrawTest, testTextboxDeleteAsChar) CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), nActual); } +CPPUNIT_TEST_FIXTURE(SwCoreDrawTest, testTextboxUndoOrdNum) +{ + // Given a document with 5 frame formats: + // - picture + // - draw format + fly format and a picture in it + // - picture + SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "textbox-undo-ordnum.docx"); + SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell(); + const SwFrameFormats& rFormats = *pDoc->GetSpzFrameFormats(); + // Test the state before del + undo. + for (const auto& pFormat : rFormats) + { + const SwFrameFormat* pFlyFormat + = SwTextBoxHelper::getOtherTextBoxFormat(pFormat, RES_DRAWFRMFMT); + if (!pFlyFormat) + { + continue; + } + + sal_Int32 nDrawOrdNum = pFormat->FindRealSdrObject()->GetOrdNum(); + sal_Int32 nFlyOrdNum = pFlyFormat->FindRealSdrObject()->GetOrdNum(); + CPPUNIT_ASSERT_EQUAL(nDrawOrdNum + 1, nFlyOrdNum); + } + + // When selecting the first page, deleting the selection and undoing: + pWrtShell->Down(true, 3); + pWrtShell->DelLeft(); + pWrtShell->Undo(); + + // Then the z-order of the fly format should be still the z-order of the draw format + 1, when + // the fly and draw formats form a textbox pair. + for (const auto& pFormat : rFormats) + { + const SwFrameFormat* pFlyFormat + = SwTextBoxHelper::getOtherTextBoxFormat(pFormat, RES_DRAWFRMFMT); + if (!pFlyFormat) + { + continue; + } + + sal_Int32 nDrawOrdNum = pFormat->FindRealSdrObject()->GetOrdNum(); + sal_Int32 nFlyOrdNum = pFlyFormat->FindRealSdrObject()->GetOrdNum(); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 4 + // - Actual : 2 + // i.e. the fly format was behind the draw format, not visible. + CPPUNIT_ASSERT_EQUAL(nDrawOrdNum + 1, nFlyOrdNum); + } +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits