diff options
-rw-r--r-- | sw/qa/extras/ooxmlexport/ooxmlexport4.cxx | 5 | ||||
-rw-r--r-- | writerfilter/source/dmapper/StyleSheetTable.cxx | 14 |
2 files changed, 18 insertions, 1 deletions
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx index c575a6ae4740..882c91e69a24 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx @@ -986,6 +986,11 @@ DECLARE_OOXMLEXPORT_TEST(testTdf81345_045Original,"tdf81345.docx") xCursor->jumpToPage(2); OUString pageStyleName = getProperty<OUString>(xCursor, "PageStyleName"); CPPUNIT_ASSERT(pageStyleName != "Standard"); + + // tdf89297 Styles were being added before their base/parent/inherited-from style existed, and so were using default settings. + uno::Reference<container::XNameAccess> xParaStyles(getStyles("ParagraphStyles")); + uno::Reference<beans::XPropertySet> xStyle(xParaStyles->getByName("Pull quote"), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(sal_Int32(6736947), getProperty<sal_Int32>(xStyle, "CharColor")); } CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx index 8385964e03f3..6674c3315963 100644 --- a/writerfilter/source/dmapper/StyleSheetTable.cxx +++ b/writerfilter/source/dmapper/StyleSheetTable.cxx @@ -50,6 +50,7 @@ namespace dmapper { typedef ::std::map< OUString, OUString> StringPairMap_t; +typedef ::std::pair<OUString, uno::Reference< style::XStyle>> ParentOfStylePair_t; StyleSheetEntry::StyleSheetEntry() : @@ -937,6 +938,7 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable ) xStyleFamilies->getByName("NumberingStyles") >>= xNumberingStyles; if(xCharStyles.is() && xParaStyles.is()) { + std::vector< ParentOfStylePair_t > aMissingParent; std::vector<beans::PropertyValue> aTableStylesVec; std::vector< StyleSheetEntryPtr >::iterator aIt = m_pImpl->m_aStyleSheetEntries.begin(); while( aIt != m_pImpl->m_aStyleSheetEntries.end() ) @@ -949,7 +951,7 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable ) bool bInsert = false; uno::Reference< container::XNameContainer > xStyles = bParaStyle ? xParaStyles : (bListStyle ? xNumberingStyles : xCharStyles); uno::Reference< style::XStyle > xStyle; - OUString sConvertedStyleName = ConvertStyleName( pEntry->sStyleName ); + const OUString sConvertedStyleName = ConvertStyleName( pEntry->sStyleName ); if(xStyles->hasByName( sConvertedStyleName )) { @@ -1175,6 +1177,10 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable ) // Numbering style got inserted earlier. if(bInsert && !bListStyle) { + const OUString sParentStyle = xStyle->getParentStyle(); + if( !sParentStyle.isEmpty() && !xStyles->hasByName( sParentStyle ) ) + aMissingParent.push_back( ParentOfStylePair_t(sParentStyle, xStyle) ); + xStyles->insertByName( sConvertedStyleName, uno::makeAny( xStyle) ); } @@ -1198,6 +1204,12 @@ void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable ) ++aIt; } + // Update the styles that were created before their parents + for( auto iter : aMissingParent ) + { + iter.second->setParentStyle( iter.first ); + } + if (!aTableStylesVec.empty()) { // If we had any table styles, add a new document-level InteropGrabBag entry for them. |