summaryrefslogtreecommitdiffstats
path: root/oox
diff options
context:
space:
mode:
authorGülşah Köse <gulsah.kose@collabora.com>2020-08-01 01:39:26 +0300
committerGülşah Köse <gulsah.kose@collabora.com>2020-08-03 22:59:50 +0200
commite0018be102edd6e376e0622e0a9384176d2f119c (patch)
tree5b929e96e9d9e743cb66389df9d9ff538330351c /oox
parentFix typo (diff)
downloadcore-e0018be102edd6e376e0622e0a9384176d2f119c.tar.gz
core-e0018be102edd6e376e0622e0a9384176d2f119c.zip
tdf#133687 Fix the placeholders priority order.
When we don't have type attribute on slide but have on slidelayout we have to use it instead of default type. Change-Id: Ibb874b5ee39c48641484fe1a8686f66c31695f76 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99904 Tested-by: Jenkins Reviewed-by: Gülşah Köse <gulsah.kose@collabora.com>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/ppt/pptshapecontext.cxx21
1 files changed, 19 insertions, 2 deletions
diff --git a/oox/source/ppt/pptshapecontext.cxx b/oox/source/ppt/pptshapecontext.cxx
index 25bcc9200bef..72c96dd8d9c2 100644
--- a/oox/source/ppt/pptshapecontext.cxx
+++ b/oox/source/ppt/pptshapecontext.cxx
@@ -65,10 +65,28 @@ ContextHandlerRef PPTShapeContext::onCreateContext( sal_Int32 aElementToken, con
}
case PPT_TOKEN( ph ):
{
+ SlidePersistPtr pMasterPersist( mpSlidePersistPtr->getMasterPersist() );
+ OptValue< sal_Int32 > oSubType( rAttribs.getToken( XML_type) );
sal_Int32 nSubType( rAttribs.getToken( XML_type, XML_obj ) );
+ sal_Int32 nSubTypeIndex;
+ oox::drawingml::ShapePtr pTmpPlaceholder;
+
mpShapePtr->setSubType( nSubType );
+
if( rAttribs.hasAttribute( XML_idx ) )
- mpShapePtr->setSubTypeIndex( rAttribs.getString( XML_idx ).get().toInt32() );
+ {
+ nSubTypeIndex = rAttribs.getString( XML_idx ).get().toInt32();
+ mpShapePtr->setSubTypeIndex( nSubTypeIndex );
+
+ if(!oSubType.has() && pMasterPersist)
+ {
+ pTmpPlaceholder = PPTShape::findPlaceholderByIndex( nSubTypeIndex, pMasterPersist->getShapes()->getChildren() );
+
+ if(pTmpPlaceholder)
+ nSubType = pTmpPlaceholder->getSubType(); // When we don't have type attribute on slide but have on slidelayout we have to use it instead of default type
+ }
+ }
+
if ( nSubType )
{
PPTShape* pPPTShapePtr = dynamic_cast< PPTShape* >( mpShapePtr.get() );
@@ -125,7 +143,6 @@ ContextHandlerRef PPTShapeContext::onCreateContext( sal_Int32 aElementToken, con
}
else if ( eShapeLocation == Slide ) // normal slide shapes have to search within the corresponding master tree for referenced objects
{
- SlidePersistPtr pMasterPersist( mpSlidePersistPtr->getMasterPersist() );
if ( pMasterPersist )
{
pPlaceholder = PPTShape::findPlaceholder( nFirstPlaceholder, nSecondPlaceholder,