sw/qa/extras/uiwriter/data/tdf142715.odt |binary
 sw/qa/extras/uiwriter/uiwriter6.cxx      |   42 +++++++++++++++++++++++++++++++
 sw/source/core/doc/textboxhelper.cxx     |   13 +--------
 3 files changed, 44 insertions(+), 11 deletions(-)

New commits:
commit 2f93eb49db71c8cbaffbd022cb2b654d56920bda
Author:     Attila Bakos (NISZ) <bakos.attilakar...@nisz.hu>
AuthorDate: Thu Jun 30 15:48:07 2022 +0200
Commit:     László Németh <nem...@numbertext.org>
CommitDate: Tue Jul 12 15:14:36 2022 +0200

    tdf#142715 sw: fix crash on exit when textbox inserted to table
    
    This reverts commit 06e2cbb31d0ea703df872b91eb8eacdcaced7653
    "tdf#130805 SwTextBoxHelper::create: fix frame position in shape"
    which caused this regression. That fix is not necessary any more: 
synchronization does the same without crashing.
    
    Note: according to this, unit test of commit 
06e2cbb31d0ea703df872b91eb8eacdcaced7653 wasn't removed.
    
    Change-Id: I45bc15d3cf6a5d93b8c54cb4e68018702e58efff
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136674
    Tested-by: László Németh <nem...@numbertext.org>
    Reviewed-by: László Németh <nem...@numbertext.org>

diff --git a/sw/qa/extras/uiwriter/data/tdf142715.odt 
b/sw/qa/extras/uiwriter/data/tdf142715.odt
new file mode 100644
index 000000000000..70682a54056c
Binary files /dev/null and b/sw/qa/extras/uiwriter/data/tdf142715.odt differ
diff --git a/sw/qa/extras/uiwriter/uiwriter6.cxx 
b/sw/qa/extras/uiwriter/uiwriter6.cxx
index e52e16abba71..6a341088d8e6 100644
--- a/sw/qa/extras/uiwriter/uiwriter6.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter6.cxx
@@ -31,6 +31,7 @@
 
 #include <com/sun/star/text/XTextTable.hpp>
 #include <com/sun/star/text/XTextViewCursorSupplier.hpp>
+#include <com/sun/star/view/XSelectionSupplier.hpp>
 #include <o3tl/cppunittraitshelper.hxx>
 #include <swdtflvr.hxx>
 #include <comphelper/propertysequence.hxx>
@@ -2055,6 +2056,47 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, 
testNestedGroupTextBoxCopyCrash)
     assertXPath(pLayout, "/root/page/body/txt/anchored/fly[2]");
 }
 
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testCrashOnExit)
+{
+    // Load the bugdoc with a table and a textbox shape inside.
+    CPPUNIT_ASSERT(createSwDoc(DATA_DIRECTORY, "tdf142715.odt"));
+
+    // Get the textbox selected
+    CPPUNIT_ASSERT_EQUAL(1, getShapes());
+    auto xShape = getShape(1);
+    CPPUNIT_ASSERT(xShape);
+    uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+    CPPUNIT_ASSERT(xModel);
+    uno::Reference<frame::XController> xController = 
xModel->getCurrentController();
+    CPPUNIT_ASSERT(xController);
+    uno::Reference<view::XSelectionSupplier> xSelection(xController, 
uno::UNO_QUERY);
+    CPPUNIT_ASSERT(xSelection);
+    CPPUNIT_ASSERT(xSelection->select(uno::Any(xShape)));
+    CPPUNIT_ASSERT(xSelection->getSelection().hasValue());
+    uno::Reference<beans::XPropertySet> xProperties(xShape, uno::UNO_QUERY);
+
+    // Check if the textbox is selected
+    CPPUNIT_ASSERT_EQUAL(true, 
xProperties->getPropertyValue("TextBox").get<bool>());
+
+    // Remove the textbox
+    dispatchCommand(mxComponent, ".uno:RemoveTextBox", {});
+    Scheduler::ProcessEventsToIdle();
+
+    CPPUNIT_ASSERT_EQUAL(false, 
xProperties->getPropertyValue("TextBox").get<bool>());
+
+    // Readd the textbox (to run the textboxhelper::create() method)
+    dispatchCommand(mxComponent, ".uno:AddTextBox", {});
+    Scheduler::ProcessEventsToIdle();
+
+    CPPUNIT_ASSERT_EQUAL(true, 
xProperties->getPropertyValue("TextBox").get<bool>());
+
+    // save and reload
+    reload("writer8", "tdf142715_.odt");
+
+    // Before the fix this crashed here and could not reopen.
+    CPPUNIT_ASSERT_MESSAGE("Crash on exit, isn't it?", mxComponent);
+}
+
 CPPUNIT_TEST_FIXTURE(SwUiWriterTest6, testCaptionShape)
 {
     createSwDoc();
diff --git a/sw/source/core/doc/textboxhelper.cxx 
b/sw/source/core/doc/textboxhelper.cxx
index db081a466b37..674b22b3f4d4 100644
--- a/sw/source/core/doc/textboxhelper.cxx
+++ b/sw/source/core/doc/textboxhelper.cxx
@@ -93,17 +93,8 @@ void SwTextBoxHelper::create(SwFrameFormat* pShape, 
SdrObject* pObject, bool bCo
         pShape->GetDoc()->GetDocShell()->GetBaseModel(), uno::UNO_QUERY);
     uno::Reference<text::XTextContentAppend> 
xTextContentAppend(xTextDocument->getText(),
                                                                 
uno::UNO_QUERY);
-    try
-    {
-        uno::Reference<text::XTextContent> XSourceShape(pObject->getUnoShape(),
-                                                        uno::UNO_QUERY_THROW);
-        xTextContentAppend->insertTextContentWithProperties(
-            xTextFrame, uno::Sequence<beans::PropertyValue>(), 
XSourceShape->getAnchor());
-    }
-    catch (uno::Exception&)
-    {
-        xTextContentAppend->appendTextContent(xTextFrame, 
uno::Sequence<beans::PropertyValue>());
-    }
+    xTextContentAppend->appendTextContent(xTextFrame, 
uno::Sequence<beans::PropertyValue>());
+
     // Link FLY and DRAW formats, so it becomes a text box (needed for 
syncProperty calls).
     uno::Reference<text::XTextFrame> xRealTextFrame(xTextFrame, 
uno::UNO_QUERY);
     auto pTextFrame = dynamic_cast<SwXTextFrame*>(xRealTextFrame.get());

Reply via email to