File bsc1174465.diff of Package libreoffice

From 4350e48a6e074b25b23e45a1ed3a425c46598aaf Mon Sep 17 00:00:00 2001
From: Miklos Vajna <vmiklos@collabora.com>
Date: Fri, 12 Feb 2021 17:22:57 +0100
Subject: [PATCH] bsc1174465.diff

svx: fix import of multiple paragraphs into title shapes

Title shapes try hard to have a single paragraph only, the Impress UI
inserts linebreaks instead of paragraphs breaks in
sd::FuText::KeyInput(), ever since commit
f47a9d9db3d06927380bb79b04bb6d4721a92d2b (initial import, 2000-09-18).
This matches the PowerPoint behavior. This is most visible when the
paragraph has a bullet associated with it.

Interestingly you can still put multiple paragraphs into title shapes
using paste special -> plain text.

In that case, it was inconsistent that we exported these multiple
paragraphs to ODP, but merged them to a single paragraph on import since
commit 0a783c1a041e2b74b7bf238d11ee2c303f6708f4 (#100190# don't allow
more then one paragraph on title text objects, 2002-06-25).

This results in loosing your bullets on save + open, both in the ODP and
PPTX cases, since removeActionLock() on the XShape triggers this tweak.
Also, PowerPoint does not do this merging on import. So fix the problem
by removing the import-time tweak but leave the UI unchanged.

Conflicts:
	svx/qa/unit/unodraw.cxx
	svx/source/unodraw/unoshtxt.cxx

(cherry picked from commit 043690eff82d5798774452a8364e1566b866a320)

Change-Id: I6796f83c40e83f65cfb0f6c7e66069c3e08c1e2d
---
 svx/qa/unit/unodraw.cxx         | 35 +++++++++++++++++++++++++++++++++
 svx/source/unodraw/unoshtxt.cxx | 12 -----------
 2 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/svx/qa/unit/unodraw.cxx b/svx/qa/unit/unodraw.cxx
index a835dee951bd..d65b2cacc281 100644
--- a/svx/qa/unit/unodraw.cxx
+++ b/svx/qa/unit/unodraw.cxx
@@ -16,6 +16,9 @@
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/awt/XControlModel.hpp>
 #include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/text/ControlCharacter.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/text/XTextRange.hpp>
 
 #include <comphelper/processfactory.hxx>
 #include <comphelper/propertysequence.hxx>
@@ -107,6 +110,38 @@ CPPUNIT_TEST_FIXTURE(UnodrawTest, testTdf93998)
     xModelProps->getPropertyValue("Graphic") >>= xGraphic;
     CPPUNIT_ASSERT(xGraphic.is());
 }
+
+CPPUNIT_TEST_FIXTURE(UnodrawTest, testTitleShapeBullets)
+{
+    // Create a title shape with 2 paragraphs in it.
+    mxComponent = loadFromDesktop("private:factory/simpress",
+                                  "com.sun.star.presentation.PresentationDocument");
+    uno::Reference<drawing::XDrawPagesSupplier> xSupplier(mxComponent, uno::UNO_QUERY);
+    uno::Reference<drawing::XDrawPages> xDrawPages = xSupplier->getDrawPages();
+    uno::Reference<drawing::XDrawPage> xDrawPage(xDrawPages->getByIndex(0), uno::UNO_QUERY);
+    // A default document contains a title shape and a text shape on the first slide.
+    uno::Reference<drawing::XShape> xTitleShape(xDrawPage->getByIndex(0), uno::UNO_QUERY);
+    uno::Reference<lang::XServiceInfo> xTitleShapeInfo(xTitleShape, uno::UNO_QUERY);
+    CPPUNIT_ASSERT(xTitleShapeInfo->supportsService("com.sun.star.presentation.TitleTextShape"));
+    uno::Reference<text::XTextRange> xTitleShapeText(xTitleShape, uno::UNO_QUERY);
+    uno::Reference<text::XText> xText = xTitleShapeText->getText();
+    uno::Reference<text::XTextRange> xCursor = xText->createTextCursor();
+    xText->insertString(xCursor, "foo", /*bAbsorb=*/false);
+    xText->insertControlCharacter(xCursor, text::ControlCharacter::APPEND_PARAGRAPH,
+                                  /*bAbsorb=*/false);
+    xText->insertString(xCursor, "bar", /*bAbsorb=*/false);
+
+    // Check that the title shape has 2 paragraphs.
+    uno::Reference<container::XEnumerationAccess> xTextEA(xText, uno::UNO_QUERY);
+    uno::Reference<container::XEnumeration> xTextE = xTextEA->createEnumeration();
+    // Has a first paragraph.
+    CPPUNIT_ASSERT(xTextE->hasMoreElements());
+    xTextE->nextElement();
+    // Has a second paragraph.
+    // Without the accompanying fix in place, this test would have failed, because the 2 paragraphs
+    // were merged together (e.g. 1 bullet instead of 2 bullets for bulleted paragraphs).
+    CPPUNIT_ASSERT(xTextE->hasMoreElements());
+}
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/unodraw/unoshtxt.cxx b/svx/source/unodraw/unoshtxt.cxx
index 61fdc3636b74..a7abfb87281a 100644
--- a/svx/source/unodraw/unoshtxt.cxx
+++ b/svx/source/unodraw/unoshtxt.cxx
@@ -776,18 +776,6 @@ void SvxTextEditSourceImpl::UpdateData()
                 {
                     if( mpOutliner->GetParagraphCount() != 1 || mpOutliner->GetEditEngine().GetTextLen( 0 ) )
                     {
-                        if( mpOutliner->GetParagraphCount() > 1 )
-                        {
-                            if (pTextObj->IsTextFrame() && pTextObj->GetTextKind() == OBJ_TITLETEXT)
-                            {
-                                while( mpOutliner->GetParagraphCount() > 1 )
-                                {
-                                    ESelection aSel( 0,mpOutliner->GetEditEngine().GetTextLen( 0 ), 1,0 );
-                                    mpOutliner->QuickInsertLineBreak( aSel );
-                                }
-                            }
-                        }
-
                         pTextObj->NbcSetOutlinerParaObjectForText( mpOutliner->CreateParaObject(), mpText );
                     }
                     else
-- 
2.26.2

openSUSE Build Service is sponsored by