This is an automated email from the ASF dual-hosted git repository.

jimjag pushed a commit to branch odf-devel
in repository https://gitbox.apache.org/repos/asf/openoffice.git

commit 678493df1e65ecb63649301df13f08fb045a3422
Author: Jim Jagielski <[email protected]>
AuthorDate: Fri Oct 23 16:12:10 2026 -0400

    xmloff: import the drawing page style fill of master pages
---
 main/xmloff/inc/PageMasterImportContext.hxx        |  29 ++++
 main/xmloff/inc/xmloff/PageMasterStyleMap.hxx      |   2 +
 .../xmloff/inc/xmloff/XMLTextMasterPageContext.hxx |   1 +
 .../source/style/PageMasterImportContext.cxx       | 172 +++++++++++++++++++++
 .../source/style/PageMasterPropHdlFactory.cxx      |   3 +
 main/xmloff/source/style/PageMasterStyleMap.cxx    |  29 ++++
 main/xmloff/source/style/xmlstyle.cxx              |  12 ++
 .../source/text/XMLTextMasterPageContext.cxx       |  26 +++-
 8 files changed, 273 insertions(+), 1 deletion(-)

diff --git a/main/xmloff/inc/PageMasterImportContext.hxx 
b/main/xmloff/inc/PageMasterImportContext.hxx
index 599318a105..8572416c4a 100644
--- a/main/xmloff/inc/PageMasterImportContext.hxx
+++ b/main/xmloff/inc/PageMasterImportContext.hxx
@@ -61,8 +61,37 @@ public:
                        const ::com::sun::star::uno::Reference<
                                ::com::sun::star::beans::XPropertySet > & 
rPropSet );
 
+       void FillPropertySetWithoutOldPageFill(
+                       const ::com::sun::star::uno::Reference<
+                               ::com::sun::star::beans::XPropertySet > & 
rPropSet );
+
        //text grid enhancement
        virtual void SetDefaults();
 };
 
+class DrawingPageStyleContext : public XMLPropStyleContext
+{
+private:
+    bool                mbChecked;
+    bool                mbUsable;
+
+    void CheckFill();
+
+public:
+
+       TYPEINFO();
+
+       DrawingPageStyleContext( SvXMLImport& rImport, sal_uInt16 nPrfx,
+                       const ::rtl::OUString& rLName,
+                       const ::com::sun::star::uno::Reference< 
::com::sun::star::xml::sax::XAttributeList > & xAttrList,
+                       SvXMLStylesContext& rStyles );
+       virtual ~DrawingPageStyleContext();
+
+       bool HasFill() { CheckFill(); return mbUsable; }
+
+       virtual void FillPropertySet(
+                       const ::com::sun::star::uno::Reference<
+                               ::com::sun::star::beans::XPropertySet > & 
rPropSet );
+};
+
 #endif
diff --git a/main/xmloff/inc/xmloff/PageMasterStyleMap.hxx 
b/main/xmloff/inc/xmloff/PageMasterStyleMap.hxx
index 5100f8c049..948dabbbcb 100644
--- a/main/xmloff/inc/xmloff/PageMasterStyleMap.hxx
+++ b/main/xmloff/inc/xmloff/PageMasterStyleMap.hxx
@@ -47,6 +47,7 @@
 #define XML_PM_TYPE_FIRSTPAGENUMBER            (XML_PM_TYPES_START + 14)
 #define XML_PM_TYPE_CENTER_HORIZONTAL  (XML_PM_TYPES_START + 15)
 #define XML_PM_TYPE_CENTER_VERTICAL            (XML_PM_TYPES_START + 16)
+#define XML_PM_TYPE_BACKGROUNDSIZE             (XML_PM_TYPES_START + 17)
 
 // control flags
 #define CTF_PM_FLAGMASK                                        
(XML_PM_CTF_START + 0x0F00)
@@ -190,6 +191,7 @@
 #define CTF_PM_FTN_DISTANCE                            (XML_PM_CTF_START + 
0x0066)
 
 extern const XMLPropertyMapEntry aXMLPageMasterStyleMap[];
+extern const XMLPropertyMapEntry aXMLPageMasterDrawingPageStyleMap[];
 extern const XMLPropertyMapEntry aXMLPageMasterHeaderImportStyleMap[];
 extern const XMLPropertyMapEntry aXMLPageMasterFooterImportStyleMap[];
 
diff --git a/main/xmloff/inc/xmloff/XMLTextMasterPageContext.hxx 
b/main/xmloff/inc/xmloff/XMLTextMasterPageContext.hxx
index 1fad8be3f8..60848f1dfb 100644
--- a/main/xmloff/inc/xmloff/XMLTextMasterPageContext.hxx
+++ b/main/xmloff/inc/xmloff/XMLTextMasterPageContext.hxx
@@ -42,6 +42,7 @@ class XMLOFF_DLLPUBLIC XMLTextMasterPageContext : public 
SvXMLStyleContext
        const ::rtl::OUString sFollowStyle;
        ::rtl::OUString           sFollow;
        ::rtl::OUString           sPageMasterName;
+       ::rtl::OUString           sDrawingPageStyleName;
 
        ::com::sun::star::uno::Reference < ::com::sun::star::style::XStyle > 
xStyle;
 
diff --git a/main/xmloff/source/style/PageMasterImportContext.cxx 
b/main/xmloff/source/style/PageMasterImportContext.cxx
index af308aed0f..c7a4c717b9 100644
--- a/main/xmloff/source/style/PageMasterImportContext.cxx
+++ b/main/xmloff/source/style/PageMasterImportContext.cxx
@@ -36,6 +36,8 @@
 //UUUU
 #include <xmlsdtypes.hxx>
 #include <com/sun/star/beans/XPropertySetInfo.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/drawing/FillStyle.hpp>
 #include <xmloff/xmlerror.hxx>
 
 using namespace ::com::sun::star;
@@ -318,6 +320,39 @@ void PageStyleContext::FillPropertySet(const 
uno::Reference<beans::XPropertySet
     }
 }
 
+void PageStyleContext::FillPropertySetWithoutOldPageFill( const 
uno::Reference< beans::XPropertySet > & rPropSet )
+{
+    static ::rtl::OUString 
s_FillStyle(RTL_CONSTASCII_USTRINGPARAM("FillStyle"));
+
+    // a fill of the page layout itself already switches its old fill 
definitions off
+    if( doNewDrawingLayerFillStyleDefinitionsExist( s_FillStyle ) )
+    {
+        FillPropertySet( rPropSet );
+        return;
+    }
+
+    // switched off for this call only: the page layout may be shared with 
master pages without a drawing page fill
+    ::std::vector< XMLPropertyState >& rProperties = GetProperties();
+    ::std::vector< ::std::pair< size_t, sal_Int32 > > aSwitchedOff;
+    UniReference < SvXMLImportPropertyMapper > xImpPrMap = 
GetStyles()->GetImportPropertyMapper( GetFamily() );
+    if( xImpPrMap.is() )
+    {
+        const OldFillStyleDefinitionSet& rOld = getStandardSet();
+        for( size_t i = 0; i < rProperties.size(); ++i )
+        {
+            if( rProperties[i].mnIndex != -1 &&
+                rOld.find( xImpPrMap->getPropertySetMapper()->GetEntryAPIName( 
rProperties[i].mnIndex ) ) != rOld.end() )
+            {
+                aSwitchedOff.push_back( ::std::make_pair( i, 
rProperties[i].mnIndex ) );
+                rProperties[i].mnIndex = -1;
+            }
+        }
+    }
+    FillPropertySet( rPropSet );
+    for( size_t i = 0; i < aSwitchedOff.size(); ++i )
+        rProperties[aSwitchedOff[i].first].mnIndex = aSwitchedOff[i].second;
+}
+
 // text grid enhancement for better CJK support
 //set default page layout style
 void PageStyleContext::SetDefaults( )
@@ -333,4 +368,141 @@ void PageStyleContext::SetDefaults( )
        }
 }
 
+TYPEINIT1( DrawingPageStyleContext, XMLPropStyleContext );
+
+DrawingPageStyleContext::DrawingPageStyleContext( SvXMLImport& rImport,
+        sal_uInt16 nPrfx, const rtl::OUString& rLName,
+        const uno::Reference< xml::sax::XAttributeList > & xAttrList,
+        SvXMLStylesContext& rStyles ) :
+    XMLPropStyleContext( rImport, nPrfx, rLName, xAttrList, rStyles, 
XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID ),
+    mbChecked( false ),
+    mbUsable( false )
+{
+}
+
+DrawingPageStyleContext::~DrawingPageStyleContext()
+{
+}
+
+static bool lcl_FillNameExists( SvXMLImport& rImport, const Reference< 
container::XNameContainer >& rTable,
+                                sal_uInt16 nFamily, const rtl::OUString& rName 
)
+{
+    return rName.getLength() && rTable.is() && rTable->hasByName( 
rImport.GetStyleDisplayName( nFamily, rName ) );
+}
+
+// An incomplete fill is ignored as a whole, so the fill of the page layout 
stays.
+void DrawingPageStyleContext::CheckFill()
+{
+    UniReference < SvXMLImportPropertyMapper > xImpPrMap = 
GetStyles()->GetImportPropertyMapper( GetFamily() );
+    if( !mbChecked && xImpPrMap.is() )
+    {
+        mbChecked = true;
+        const UniReference< XMLPropertySetMapper >& rMapper = 
xImpPrMap->getPropertySetMapper();
+        ::std::vector< XMLPropertyState >& rProperties = GetProperties();
+        drawing::FillStyle eStyle = drawing::FillStyle_NONE;
+        bool bColor = false;
+        rtl::OUString aGradient, aHatch, aBitmap, aTrans;
+        XMLPropertyState* pTrans = NULL;
+
+        for( ::std::vector< XMLPropertyState >::iterator a = 
rProperties.begin(); a != rProperties.end(); ++a )
+        {
+            if( a->mnIndex == -1 )
+                continue;
+            const rtl::OUString& rName = rMapper->GetEntryAPIName( a->mnIndex 
);
+            if( rName.equalsAscii( "FillStyle" ) )
+            {
+                sal_Int32 nValue = 0;
+                if( !( a->maValue >>= eStyle ) && ( a->maValue >>= nValue ) )
+                    eStyle = static_cast< drawing::FillStyle >( nValue );
+            }
+            else if( rName.equalsAscii( "FillColor" ) )
+                bColor = true;
+            else if( rName.equalsAscii( "FillGradientName" ) )
+                a->maValue >>= aGradient;
+            else if( rName.equalsAscii( "FillHatchName" ) )
+                a->maValue >>= aHatch;
+            else if( rName.equalsAscii( "FillBitmapName" ) )
+                a->maValue >>= aBitmap;
+            else if( rName.equalsAscii( "FillTransparenceGradientName" ) )
+            {
+                a->maValue >>= aTrans;
+                pTrans = &(*a);
+            }
+        }
+
+        SvXMLImport& rImport = GetImport();
+        switch( eStyle )
+        {
+            case drawing::FillStyle_SOLID:
+                mbUsable = bColor;
+                break;
+            case drawing::FillStyle_GRADIENT:
+                mbUsable = lcl_FillNameExists( rImport, 
rImport.GetGradientHelper(), XML_STYLE_FAMILY_SD_GRADIENT_ID, aGradient );
+                break;
+            case drawing::FillStyle_HATCH:
+                mbUsable = lcl_FillNameExists( rImport, 
rImport.GetHatchHelper(), XML_STYLE_FAMILY_SD_HATCH_ID, aHatch );
+                break;
+            case drawing::FillStyle_BITMAP:
+                mbUsable = lcl_FillNameExists( rImport, 
rImport.GetBitmapHelper(), XML_STYLE_FAMILY_SD_FILL_IMAGE_ID, aBitmap );
+                break;
+            default:
+                break;
+        }
+
+        if( mbUsable && pTrans && !lcl_FillNameExists( rImport, 
rImport.GetTransGradientHelper(), XML_STYLE_FAMILY_SD_GRADIENT_ID, aTrans ) )
+            pTrans->mnIndex = -1;
+    }
+}
+
+void DrawingPageStyleContext::FillPropertySet( const uno::Reference< 
beans::XPropertySet > & rPropSet )
+{
+    UniReference < SvXMLImportPropertyMapper > xImpPrMap = 
GetStyles()->GetImportPropertyMapper( GetFamily() );
+    if( !xImpPrMap.is() || !HasFill() )
+        return;
+    const UniReference< XMLPropertySetMapper >& rMapper = 
xImpPrMap->getPropertySetMapper();
+    ::std::vector< XMLPropertyState >& rProperties = GetProperties();
+
+    // as in PageStyleContext::FillPropertySet: names set in the bulk call 
left gradient and hatch at their defaults
+    struct _ContextID_Index_Pair aContextIDs[] =
+    {
+        { CTF_PM_FILLGRADIENTNAME, -1 },
+        { CTF_PM_FILLTRANSNAME, -1 },
+        { CTF_PM_FILLHATCHNAME, -1 },
+        { CTF_PM_FILLBITMAPNAME, -1 },
+        { -1, -1 }
+    };
+    static const sal_uInt16 aFamilies[] =
+    {
+        XML_STYLE_FAMILY_SD_GRADIENT_ID,
+        XML_STYLE_FAMILY_SD_GRADIENT_ID,
+        XML_STYLE_FAMILY_SD_HATCH_ID,
+        XML_STYLE_FAMILY_SD_FILL_IMAGE_ID
+    };
+
+    xImpPrMap->FillPropertySet( rProperties, rPropSet, aContextIDs );
+
+    Reference< XPropertySetInfo > xInfo( rPropSet->getPropertySetInfo() );
+    for( sal_uInt16 i = 0; aContextIDs[i].nContextID != -1; i++ )
+    {
+        if( aContextIDs[i].nIndex == -1 )
+            continue;
+        const XMLPropertyState& rState = rProperties[aContextIDs[i].nIndex];
+        const rtl::OUString& rPropertyName = rMapper->GetEntryAPIName( 
rState.mnIndex );
+        rtl::OUString sStyleName;
+        rState.maValue >>= sStyleName;
+        sStyleName = GetImport().GetStyleDisplayName( aFamilies[i], sStyleName 
);
+        try
+        {
+            if( xInfo->hasPropertyByName( rPropertyName ) )
+                rPropSet->setPropertyValue( rPropertyName, Any( sStyleName ) );
+        }
+        catch( lang::IllegalArgumentException& e )
+        {
+            Sequence< rtl::OUString > aSeq( 1 );
+            aSeq[0] = sStyleName;
+            GetImport().SetError( XMLERROR_STYLE_PROP_VALUE | 
XMLERROR_FLAG_WARNING, aSeq, e.Message, NULL );
+        }
+    }
+}
+
 //eof
diff --git a/main/xmloff/source/style/PageMasterPropHdlFactory.cxx 
b/main/xmloff/source/style/PageMasterPropHdlFactory.cxx
index e7e58dfb2a..e0c00dfda9 100644
--- a/main/xmloff/source/style/PageMasterPropHdlFactory.cxx
+++ b/main/xmloff/source/style/PageMasterPropHdlFactory.cxx
@@ -137,6 +137,9 @@ const XMLPropertyHandler* 
XMLPageMasterPropHdlFactory::GetPropertyHandler( sal_I
                        case XML_PM_TYPE_CENTER_VERTICAL:
                                pHdl = new XMLPMPropHdl_CenterVertical();
                        break;
+                       case XML_PM_TYPE_BACKGROUNDSIZE:
+                               pHdl = new XMLNamedBoolPropertyHdl( 
GetXMLToken( XML_FULL ), GetXMLToken( XML_BORDER ) );
+                       break;
                        case XML_TYPE_TEXT_COLUMNS:
                                pHdl = new XMLTextColumnsPropertyHandler;
                        break;
diff --git a/main/xmloff/source/style/PageMasterStyleMap.cxx 
b/main/xmloff/source/style/PageMasterStyleMap.cxx
index aa69b897bd..1e27c61b75 100644
--- a/main/xmloff/source/style/PageMasterStyleMap.cxx
+++ b/main/xmloff/source/style/PageMasterStyleMap.cxx
@@ -285,4 +285,33 @@ const XMLPropertyMapEntry aXMLPageMasterStyleMap[] =
     { 0L, 0, 0, XML_EMPTY, 0, 0, SvtSaveOptions::ODFVER_010 } // index 190
 };
 
+#define DPMAP(name,prefix,token,type,context) 
_MAP(name,prefix,token,type|XML_TYPE_PROP_DRAWING_PAGE,context)
+
+const XMLPropertyMapEntry aXMLPageMasterDrawingPageStyleMap[] =
+{
+    DPMAP( "FillStyle",                     XML_NAMESPACE_DRAW,     XML_FILL,  
                 XML_SW_TYPE_FILLSTYLE,                                  0 ),
+    DPMAP( "BackgroundFullSize",            XML_NAMESPACE_DRAW,     
XML_BACKGROUND_SIZE,        XML_PM_TYPE_BACKGROUNDSIZE,                         
    0 ),
+    DPMAP( "FillColor",                     XML_NAMESPACE_DRAW,     
XML_FILL_COLOR,             XML_TYPE_COLOR,                                     
    0 ),
+    DPMAP( "FillColor2",                    XML_NAMESPACE_DRAW,     
XML_SECONDARY_FILL_COLOR,   XML_TYPE_COLOR,                                     
    0 ),
+    DPMAP( "FillGradientName",              XML_NAMESPACE_DRAW,     
XML_FILL_GRADIENT_NAME,     XML_TYPE_STYLENAME|MID_FLAG_NO_PROPERTY_IMPORT,     
    CTF_PM_FILLGRADIENTNAME ),
+    DPMAP( "FillGradientStepCount",         XML_NAMESPACE_DRAW,     
XML_GRADIENT_STEP_COUNT,    XML_TYPE_NUMBER16,                                  
    0 ),
+    DPMAP( "FillHatchName",                 XML_NAMESPACE_DRAW,     
XML_FILL_HATCH_NAME,        XML_TYPE_STYLENAME|MID_FLAG_NO_PROPERTY_IMPORT,     
    CTF_PM_FILLHATCHNAME ),
+    DPMAP( "FillBackground",                XML_NAMESPACE_DRAW,     
XML_FILL_HATCH_SOLID,       XML_TYPE_BOOL,                                      
    0 ),
+    DPMAP( "FillBitmapName",                XML_NAMESPACE_DRAW,     
XML_FILL_IMAGE_NAME,        XML_TYPE_STYLENAME|MID_FLAG_NO_PROPERTY_IMPORT,     
    CTF_PM_FILLBITMAPNAME ),
+    DPMAP( "FillTransparence",              XML_NAMESPACE_DRAW,     
XML_OPACITY,                XML_TYPE_NEG_PERCENT16|MID_FLAG_MULTI_PROPERTY,     
    0 ),
+    DPMAP( "FillTransparenceGradientName",  XML_NAMESPACE_DRAW,     
XML_OPACITY_NAME,           XML_TYPE_STYLENAME|MID_FLAG_NO_PROPERTY_IMPORT,     
    CTF_PM_FILLTRANSNAME ),
+    DPMAP( "FillBitmapSizeX",               XML_NAMESPACE_DRAW,     
XML_FILL_IMAGE_WIDTH,       XML_SW_TYPE_FILLBITMAPSIZE|MID_FLAG_MULTI_PROPERTY, 
    0 ),
+    DPMAP( "FillBitmapLogicalSize",         XML_NAMESPACE_DRAW,     
XML_FILL_IMAGE_WIDTH,       XML_SW_TYPE_LOGICAL_SIZE|MID_FLAG_MULTI_PROPERTY,   
    0 ),
+    DPMAP( "FillBitmapSizeY",               XML_NAMESPACE_DRAW,     
XML_FILL_IMAGE_HEIGHT,      XML_SW_TYPE_FILLBITMAPSIZE|MID_FLAG_MULTI_PROPERTY, 
    0 ),
+    DPMAP( "FillBitmapLogicalSize",         XML_NAMESPACE_DRAW,     
XML_FILL_IMAGE_HEIGHT,      XML_SW_TYPE_LOGICAL_SIZE|MID_FLAG_MULTI_PROPERTY,   
    0 ),
+    DPMAP( "FillBitmapMode",                XML_NAMESPACE_STYLE,    
XML_REPEAT,                 XML_SW_TYPE_BITMAP_MODE|MID_FLAG_MULTI_PROPERTY,    
    0 ),
+    DPMAP( "FillBitmapPositionOffsetX",     XML_NAMESPACE_DRAW,     
XML_FILL_IMAGE_REF_POINT_X, XML_TYPE_PERCENT,                                   
    0 ),
+    DPMAP( "FillBitmapPositionOffsetY",     XML_NAMESPACE_DRAW,     
XML_FILL_IMAGE_REF_POINT_Y, XML_TYPE_PERCENT,                                   
    0 ),
+    DPMAP( "FillBitmapRectanglePoint",      XML_NAMESPACE_DRAW,     
XML_FILL_IMAGE_REF_POINT,   XML_SW_TYPE_BITMAP_REFPOINT,                        
    0 ),
+    DPMAP( "FillBitmapOffsetX",             XML_NAMESPACE_DRAW,     
XML_TILE_REPEAT_OFFSET,     
XML_SW_TYPE_BITMAPREPOFFSETX|MID_FLAG_MULTI_PROPERTY,   CTF_PM_REPEAT_OFFSET_X 
),
+    DPMAP( "FillBitmapOffsetY",             XML_NAMESPACE_DRAW,     
XML_TILE_REPEAT_OFFSET,     
XML_SW_TYPE_BITMAPREPOFFSETY|MID_FLAG_MULTI_PROPERTY,   CTF_PM_REPEAT_OFFSET_Y 
),
+
+    { 0L, 0, 0, XML_EMPTY, 0, 0, SvtSaveOptions::ODFVER_010 }
+};
+
 //eof
diff --git a/main/xmloff/source/style/xmlstyle.cxx 
b/main/xmloff/source/style/xmlstyle.cxx
index d66b9e0524..2052614d3e 100644
--- a/main/xmloff/source/style/xmlstyle.cxx
+++ b/main/xmloff/source/style/xmlstyle.cxx
@@ -37,6 +37,8 @@
 #ifndef _XMLOFF_PAGEMASTERPROPMAPPER_HXX
 #include "PageMasterPropMapper.hxx"
 #endif
+#include "PageMasterPropHdlFactory.hxx"
+#include <xmloff/PageMasterStyleMap.hxx>
 #include <tools/debug.hxx>
 #include <tools/list.hxx>
 #include <svl/cntnrsrt.hxx>
@@ -585,6 +587,11 @@ SvXMLStyleContext 
*SvXMLStylesContext::CreateStyleStyleChildContext(
                case XML_STYLE_FAMILY_SD_POOL_ID:
                        pStyle = new XMLShapeStyleContext( GetImport(), 
nPrefix, rLocalName,
                                                                                
           xAttrList, *this, nFamily );
+                       break;
+
+               case XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID:
+                       pStyle = new DrawingPageStyleContext( GetImport(), 
nPrefix, rLocalName,
+                                                                               
           xAttrList, *this );
        }
 
        return pStyle;
@@ -737,6 +744,11 @@ UniReference < SvXMLImportPropertyMapper > 
SvXMLStylesContext::GetImportProperty
                }
                xMapper = mxPageImpPropMapper;
                break;
+       case XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID:
+               xMapper = new SvXMLImportPropertyMapper(
+                       new XMLPageMasterPropSetMapper( 
aXMLPageMasterDrawingPageStyleMap, new XMLPageMasterPropHdlFactory ),
+                       ((SvXMLStylesContext*)this)->GetImport() );
+               break;
        }
 
        return xMapper;
diff --git a/main/xmloff/source/text/XMLTextMasterPageContext.cxx 
b/main/xmloff/source/text/XMLTextMasterPageContext.cxx
index 804b764f94..16cdff2fc9 100644
--- a/main/xmloff/source/text/XMLTextMasterPageContext.cxx
+++ b/main/xmloff/source/text/XMLTextMasterPageContext.cxx
@@ -112,6 +112,10 @@ XMLTextMasterPageContext::XMLTextMasterPageContext( 
SvXMLImport& rImport,
                                sPageMasterName = xAttrList->getValueByIndex( i 
);
                        }
                }
+               else if( XML_NAMESPACE_DRAW == nPrefix && IsXMLToken( 
aLocalName, XML_STYLE_NAME ) )
+               {
+                       sDrawingPageStyleName = xAttrList->getValueByIndex( i );
+               }
        }
 
        if( sDisplayName.getLength() )
@@ -250,15 +254,35 @@ void XMLTextMasterPageContext::Finish( sal_Bool 
bOverwrite )
        if( xStyle.is() && (IsNew() || bOverwrite) )
        {
                Reference < XPropertySet > xPropSet( xStyle, UNO_QUERY );
+               DrawingPageStyleContext* pDrawingPage = 0;
+               if( sDrawingPageStyleName.getLength() &&
+                       xPropSet->getPropertySetInfo()->hasPropertyByName( 
OUString( RTL_CONSTASCII_USTRINGPARAM( "FillStyle" ) ) ) )
+               {
+                       const SvXMLStylesContext* pStyles = 
GetImport().GetAutoStyles();
+                       const SvXMLStyleContext* pStyle = pStyles ? 
pStyles->FindStyleChildContext(
+                               XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID, 
sDrawingPageStyleName, sal_True ) : 0;
+                       pStyles = GetImport().GetStyles();
+                       if( !pStyle && pStyles )
+                               pStyle = pStyles->FindStyleChildContext( 
XML_STYLE_FAMILY_SD_DRAWINGPAGE_ID,
+                                       sDrawingPageStyleName, sal_True );
+                       pDrawingPage = PTR_CAST( DrawingPageStyleContext, 
pStyle );
+                       if( pDrawingPage && !pDrawingPage->HasFill() )
+                               pDrawingPage = 0;
+               }
                if( sPageMasterName.getLength() )
                {
                        XMLPropStyleContext* pStyle =
                                GetImport().GetTextImport()->FindPageMaster( 
sPageMasterName );
-                       if (pStyle)
+                       PageStyleContext* pPageStyle = PTR_CAST( 
PageStyleContext, pStyle );
+                       if( pDrawingPage && pPageStyle )
+                               pPageStyle->FillPropertySetWithoutOldPageFill( 
xPropSet );
+                       else if (pStyle)
                        {
                                pStyle->FillPropertySet(xPropSet);
                        }
                }
+               if( pDrawingPage )
+                       pDrawingPage->FillPropertySet( xPropSet );
 
                Reference < XNameContainer > xPageStyles =
                        GetImport().GetTextImport()->GetPageStyles();

Reply via email to