summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorBalazs Santha <santha.balazs@simonyi.bme.hu>2021-08-18 09:30:41 +0200
committerMichael Stahl <michael.stahl@allotropia.de>2021-08-27 11:27:44 +0200
commit72590c55ad6c699b34dc404542abc3f60bc32a09 (patch)
treee967a25c146007b94931880ea98ae04f7282211f /sw
parent67879304f61252838a6b2e2549d7205b445776f8 (diff)
tdf#143904 fix direct character formatting copied into paragraph level
Currently, Writer copied the direct character formattings, and applied them on paragraph level, when inserting a new row in a table. This bug is a regression from 498d2b82187ec3ff58f076e0d15741e64c0505ba . Explanation, why this regression happened: MSO Word uses a paragraph mark symbol (i.e the control character than can be configured to be shown), which is imported in Writer as a 0-length hint. To fasten up the import of DOCX tables, the core applies the formattings from this 0-length attribute on paragraph level, directly before inserting a new row. All in all, to solve this bug, we needed to make sure, that we only copy the formattings, if it is from a 0-length hint. Change-Id: Iba52e9318cc588feda559339e42897568d009806 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120624 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
Diffstat (limited to 'sw')
-rw-r--r--sw/qa/extras/uiwriter/data/tdf143904.odtbin0 -> 9763 bytes
-rw-r--r--sw/qa/extras/uiwriter/uiwriter2.cxx23
-rw-r--r--sw/source/core/table/swtable.cxx14
3 files changed, 27 insertions, 10 deletions
diff --git a/sw/qa/extras/uiwriter/data/tdf143904.odt b/sw/qa/extras/uiwriter/data/tdf143904.odt
new file mode 100644
index 000000000000..5a1d28664c31
--- /dev/null
+++ b/sw/qa/extras/uiwriter/data/tdf143904.odt
Binary files differ
diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx
index 70d63e36871a..2b263a7849dd 100644
--- a/sw/qa/extras/uiwriter/uiwriter2.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter2.cxx
@@ -4440,6 +4440,29 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testOfz18563)
TestImportDOCX(aFileStream);
}
+CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf143904)
+{
+ SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf143904.odt");
+
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ CPPUNIT_ASSERT(pWrtShell);
+
+ sal_uLong nIndex = pWrtShell->GetCursor()->GetNode().GetIndex();
+
+ dispatchCommand(mxComponent, ".uno:InsertRowsAfter", {});
+ pWrtShell->Down(false);
+ pWrtShell->Insert("foo");
+
+ SwTextNode* pTextNodeA1 = static_cast<SwTextNode*>(pDoc->GetNodes()[nIndex]);
+ CPPUNIT_ASSERT(pTextNodeA1->GetText().startsWith("Insert"));
+ nIndex = pWrtShell->GetCursor()->GetNode().GetIndex();
+ SwTextNode* pTextNodeA2 = static_cast<SwTextNode*>(pDoc->GetNodes()[nIndex]);
+ CPPUNIT_ASSERT_EQUAL(OUString("foo"), pTextNodeA2->GetText());
+ CPPUNIT_ASSERT_EQUAL(false, pTextNodeA2->GetSwAttrSet().HasItem(RES_CHRATR_FONT));
+ OUString sFontName = pTextNodeA2->GetSwAttrSet().GetItem(RES_CHRATR_FONT)->GetFamilyName();
+ CPPUNIT_ASSERT_EQUAL(OUString("Liberation Serif"), sFontName);
+}
+
CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf90069)
{
SwDoc* pDoc = createSwDoc(DATA_DIRECTORY, "tdf90069.docx");
diff --git a/sw/source/core/table/swtable.cxx b/sw/source/core/table/swtable.cxx
index ad10eccc7d92..fb5839ea687b 100644
--- a/sw/source/core/table/swtable.cxx
+++ b/sw/source/core/table/swtable.cxx
@@ -145,17 +145,11 @@ void InsTableBox( SwDoc& rDoc, SwTableNode* pTableNd,
if( pCNd->GetpSwAttrSet() )
{
SwAttrSet aAttrSet( *pCNd->GetpSwAttrSet() );
- SwTextNode* pTNd = static_cast<SwTextNode*>(pCNd);
- SwpHints * pSwpHints = pTNd->GetpSwpHints();
- if(pSwpHints && pSwpHints->Count()!=0)
+ if(pCNd->GetSwAttrSet().HasItem(RES_PARATR_LIST_AUTOFMT))
{
- SwTextAttr* textAttr = pSwpHints->Get(pSwpHints->Count()-1);
- if(textAttr->Which() == RES_TXTATR_AUTOFMT )
- {
- SwFormatAutoFormat& format = static_cast<SwFormatAutoFormat&>(textAttr->GetAttr());
- const std::shared_ptr<SfxItemSet>& handle = format.GetStyleHandle();
- aAttrSet.Put(*handle);
- }
+ SwFormatAutoFormat format = aAttrSet.Get(RES_PARATR_LIST_AUTOFMT);
+ const std::shared_ptr<SfxItemSet>& handle = format.GetStyleHandle();
+ aAttrSet.Put(*handle);
}
if( pBox->GetSaveNumFormatColor() )
{