Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Step:15-SP2
libreoffice.18168
bsc1174465.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bsc1174465.diff of Package libreoffice.18168
From f767b83d1c5493815708135f0f2aec03e47615ac Mon Sep 17 00:00:00 2001 From: Miklos Vajna <vmiklos@collabora.com> Date: Fri, 12 Feb 2021 17:22:57 +0100 Subject: [PATCH] svx: fix import of multiple paragraphs into title shapes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) Change-Id: I6796f83c40e83f65cfb0f6c7e66069c3e08c1e2d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110900 Tested-by: Jenkins Reviewed-by: Gülşah Köse <gulsah.kose@collabora.com> Reviewed-by: Caolán McNamara <caolanm@redhat.com> --- svx/qa/unit/unodraw.cxx | 33 +++++++++++++++++++++++++++++++++ svx/source/unodraw/unoshtxt.cxx | 12 ------------ 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/svx/qa/unit/unodraw.cxx b/svx/qa/unit/unodraw.cxx index 938e44f9ca21..d8e7c03183d1 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> @@ -175,6 +176,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 7f2a8af49606..39cad52c073b 100644 --- a/svx/source/unodraw/unoshtxt.cxx +++ b/svx/source/unodraw/unoshtxt.cxx @@ -780,18 +780,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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor