From c994f2491dd4e977f726f53de1953feff17c2227 Mon Sep 17 00:00:00 2001 From: Regina Henschel Date: Tue, 9 Jan 2024 21:41:40 +0100 Subject: [PATCH] tdf#159049 use RTF_LINE for EE_FEATURE_LINEBR for copy Copy of simple text uses ImpEditEngine::WriteItemAsRTF() method. Error was, that in case of a line break ('\n') the string OOO_STRING_SVTOOLS_RTF_SL was written, but it needs to be the string OOO_STRING_SVTOOLS_RTF_LINE. Change-Id: I1c2ff2087c563b26e26d8768dfcfd1645be91d2f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161842 Tested-by: Jenkins Reviewed-by: Regina Henschel --- editeng/source/editeng/impedit4.cxx | 2 +- .../data/tdf159049_LineBreakRTFClipboard.fodt | 300 ++++++++++++++++++ sw/qa/extras/uiwriter/uiwriter9.cxx | 35 ++ 3 files changed, 336 insertions(+), 1 deletion(-) create mode 100644 sw/qa/extras/uiwriter/data/tdf159049_LineBreakRTFClipboard.fodt diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx index b5151467079a..d63522a555c1 100644 --- a/editeng/source/editeng/impedit4.cxx +++ b/editeng/source/editeng/impedit4.cxx @@ -905,7 +905,7 @@ void ImpEditEngine::WriteItemAsRTF( const SfxPoolItem& rItem, SvStream& rOutput, break; case EE_FEATURE_LINEBR: { - rOutput.WriteOString( OOO_STRING_SVTOOLS_RTF_SL ); + rOutput.WriteOString( OOO_STRING_SVTOOLS_RTF_LINE ); } break; case EE_CHAR_KERNING: diff --git a/sw/qa/extras/uiwriter/data/tdf159049_LineBreakRTFClipboard.fodt b/sw/qa/extras/uiwriter/data/tdf159049_LineBreakRTFClipboard.fodt new file mode 100644 index 000000000000..22472c197053 --- /dev/null +++ b/sw/qa/extras/uiwriter/data/tdf159049_LineBreakRTFClipboard.fodt @@ -0,0 +1,300 @@ + + + + Regina Henschel2024-01-08T23:25:06.8490000002024-01-09T20:51:07.363000000Regina HenschelPT18M48S8LOmyBuild/24.8.0.0.alpha0$Windows_X86_64 LibreOffice_project/00eae23267bf64e07cf057f828cd85f3c38ac669 + + + 0 + 0 + 21338 + 14543 + true + false + + + view2 + 11003 + 1000 + 0 + 0 + 21336 + 14542 + 0 + 1 + false + 100 + false + false + false + false + false + false + + + + + true + + false + false + false + false + true + 1 + true + false + false + false + + false + + false + false + false + Person + 0 + false + true + true + false + false + false + IDAnredeVornameNachname + 0 + + true + high-resolution + false + false + true + true + true + false + false + true + true + false + true + true + false + false + false + true + false + true + false + false + true + false + false + false + false + false + false + 757206 + 303919 + false + false + true + true + false + true + true + false + true + true + true + false + false + false + false + true + false + true + false + false + false + false + false + true + 0 + true + false + true + true + false + false + true + false + 0 + true + false + true + true + true + false + false + false + false + false + true + + false + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A + breakhere + second paragraph + B + + + \ No newline at end of file diff --git a/sw/qa/extras/uiwriter/uiwriter9.cxx b/sw/qa/extras/uiwriter/uiwriter9.cxx index ef48220bc983..4d7c87c9ed0f 100644 --- a/sw/qa/extras/uiwriter/uiwriter9.cxx +++ b/sw/qa/extras/uiwriter/uiwriter9.cxx @@ -181,6 +181,41 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf111969B) CPPUNIT_ASSERT(!pWrtShell->GetCurField(true)); } +CPPUNIT_TEST_FIXTURE(SwUiWriterTest9, testTdf159049) +{ + // The document contains a shape which has a text with a line break. When copying the text to + // clipboard the line break was missing in the RTF flavor of the clipboard. + createSwDoc("tdf159049_LineBreakRTFClipboard.fodt"); + CPPUNIT_ASSERT_EQUAL(1, getShapes()); + selectShape(1); + + // Bring shape into text edit mode + SwXTextDocument* pTextDoc = dynamic_cast(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_RETURN); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, KEY_RETURN); + Scheduler::ProcessEventsToIdle(); + // Copy text + dispatchCommand(mxComponent, ".uno:SelectAll", {}); + dispatchCommand(mxComponent, ".uno:Copy", {}); + + // Deactivate text edit mode ... + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_ESCAPE); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, KEY_ESCAPE); + Scheduler::ProcessEventsToIdle(); + // ... and deselect shape. + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYINPUT, 0, KEY_ESCAPE); + pTextDoc->postKeyEvent(LOK_KEYEVENT_KEYUP, 0, KEY_ESCAPE); + Scheduler::ProcessEventsToIdle(); + + // Paste special as RTF + uno::Sequence aArgs(comphelper::InitPropertySequence( + { { "SelectedFormat", uno::Any(static_cast(SotClipboardFormatId::RTF)) } })); + dispatchCommand(mxComponent, ".uno:ClipboardFormatItems", aArgs); + // Without fix Actual was "Abreakhere", the line break \n was missing. + CPPUNIT_ASSERT_EQUAL(u"Abreak\nhere"_ustr, getParagraph(1)->getString()); +} + } // end of anonymous namespace CPPUNIT_PLUGIN_IMPLEMENT();