[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.4' - svx/qa svx/source

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Mon Feb 15 13:29:00 UTC 2021


 svx/qa/unit/unodraw.cxx         |   33 +++++++++++++++++++++++++++++++++
 svx/source/unodraw/unoshtxt.cxx |   12 ------------
 2 files changed, 33 insertions(+), 12 deletions(-)

New commits:
commit 41792f205d0de94c81bae511c9707ca0052135f4
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Fri Feb 12 17:22:57 2021 +0100
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Mon Feb 15 14:28:25 2021 +0100

    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.
    
    (cherry picked from commit 043690eff82d5798774452a8364e1566b866a320)
    
    Conflicts:
            svx/source/unodraw/unoshtxt.cxx
    
    Change-Id: I6796f83c40e83f65cfb0f6c7e66069c3e08c1e2d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110935
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>

diff --git a/svx/qa/unit/unodraw.cxx b/svx/qa/unit/unodraw.cxx
index d31bba03eb77..f4b727e5a938 100644
--- a/svx/qa/unit/unodraw.cxx
+++ b/svx/qa/unit/unodraw.cxx
@@ -18,6 +18,7 @@
 #include <com/sun/star/graphic/XGraphic.hpp>
 #include <com/sun/star/table/XCellRange.hpp>
 #include <com/sun/star/text/XTextRange.hpp>
+#include <com/sun/star/text/ControlCharacter.hpp>
 
 #include <comphelper/processfactory.hxx>
 #include <comphelper/propertysequence.hxx>
@@ -177,6 +178,38 @@ CPPUNIT_TEST_FIXTURE(UnodrawTest, testTableShadowDirect)
     // which has no shadow for cell text (only for cell borders and cell background).
     assertXPath(pDocument, "//shadow//sdrblocktext", /*nNumberOfNodes=*/0);
 }
+
+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 adabc3c061ec..a8bbece64e65 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


More information about the Libreoffice-commits mailing list