diff options
author | Mark Hung <marklh9@gmail.com> | 2019-03-16 23:17:31 +0800 |
---|---|---|
committer | Mark Hung <marklh9@gmail.com> | 2019-03-20 12:42:02 +0100 |
commit | 0546af3643114b5adf6e33f49d6834eb74ae793b (patch) | |
tree | 5872bf8488fb2301a9ba022cfc55f8e9c5d686a6 /oox | |
parent | a26524e348fe06b93c26b1b1fa3dae3a5b26d6fa (diff) |
tdf#123909 fix event source that refers to a timenode.
p:tn (see below) were treated as delay value instead of timenode id.
<p:stCondLst>
<p:cond evt="begin" delay="0">
<p:tn val="5"/>
</p:cond>
</p:stCondLst>
Just convert the timenode id to XAnimationNode and set
the event source properly.
Change-Id: Ib408be6714c6ac70dad7018e544e560cf59a40c0
Reviewed-on: https://gerrit.libreoffice.org/69340
Tested-by: Jenkins
Reviewed-by: Mark Hung <marklh9@gmail.com>
Diffstat (limited to 'oox')
-rw-r--r-- | oox/source/ppt/animationspersist.cxx | 14 | ||||
-rw-r--r-- | oox/source/ppt/conditioncontext.cxx | 6 | ||||
-rw-r--r-- | oox/source/ppt/slidepersist.cxx | 10 |
3 files changed, 27 insertions, 3 deletions
diff --git a/oox/source/ppt/animationspersist.cxx b/oox/source/ppt/animationspersist.cxx index bcfc4f2ba494..3546c047c835 100644 --- a/oox/source/ppt/animationspersist.cxx +++ b/oox/source/ppt/animationspersist.cxx @@ -27,6 +27,7 @@ #include <com/sun/star/presentation/ParagraphTarget.hpp> #include <com/sun/star/presentation/ShapeAnimationSubType.hpp> #include <com/sun/star/animations/Event.hpp> +#include <com/sun/star/animations/XAnimationNode.hpp> #include <oox/drawingml/shape.hxx> #include <oox/helper/attributelist.hxx> @@ -183,6 +184,19 @@ namespace oox { namespace ppt { aEvent.Source = aAny; aAny <<= aEvent; } + else if (mnType == PPT_TOKEN(tn) && (maValue >>= aEvent)) + { + OUString sId; + aEvent.Source >>= sId; + css::uno::Reference<XAnimationNode> xNode = pSlide->getAnimationNode(sId); + if (xNode.is()) + { + aEvent.Source <<= xNode; + } + else + aEvent.Source.clear(); + aAny <<= aEvent; + } else { aAny = maValue; diff --git a/oox/source/ppt/conditioncontext.cxx b/oox/source/ppt/conditioncontext.cxx index cdecaa120891..f32f8c490c5c 100644 --- a/oox/source/ppt/conditioncontext.cxx +++ b/oox/source/ppt/conditioncontext.cxx @@ -98,7 +98,7 @@ namespace oox { namespace ppt { CondContext::~CondContext( ) throw( ) { - if( maCond.mnType == 0 ) + if( maCond.mnType == 0 || maCond.mnType == PPT_TOKEN(tn)) { maCond.maValue = (maEvent.Trigger == EventTrigger::NONE) ? maEvent.Offset : makeAny( maEvent ); } @@ -135,8 +135,8 @@ namespace oox { namespace ppt { case PPT_TOKEN( tn ): { maCond.mnType = aElementToken; - sal_uInt32 nId = rAttribs.getUnsigned( XML_val, 0 ); - maCond.maValue <<= nId; + // Convert the node id string to XAnimationNode later + maEvent.Source <<= rAttribs.getString(XML_val, OUString()); return this; } case PPT_TOKEN( tgtEl ): diff --git a/oox/source/ppt/slidepersist.cxx b/oox/source/ppt/slidepersist.cxx index b25d00ed3529..5c5d61f5640b 100644 --- a/oox/source/ppt/slidepersist.cxx +++ b/oox/source/ppt/slidepersist.cxx @@ -318,6 +318,16 @@ void SlidePersist::hideShapesAsMasterShapes() } } +Reference<XAnimationNode> SlidePersist::getAnimationNode(const OUString& sId) const +{ + const auto& pIter = maAnimNodesMap.find(sId); + if (pIter != maAnimNodesMap.end()) + return pIter->second; + + Reference<XAnimationNode> aResult; + return aResult; +} + } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |