summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/qa/extras/ooxmlexport/ooxmlexport4.cxx5
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.cxx14
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.