summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorMark Hung <marklh9@gmail.com>2019-03-16 23:17:31 +0800
committerMark Hung <marklh9@gmail.com>2019-03-20 12:42:02 +0100
commit0546af3643114b5adf6e33f49d6834eb74ae793b (patch)
tree5872bf8488fb2301a9ba022cfc55f8e9c5d686a6 /oox
parenta26524e348fe06b93c26b1b1fa3dae3a5b26d6fa (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.cxx14
-rw-r--r--oox/source/ppt/conditioncontext.cxx6
-rw-r--r--oox/source/ppt/slidepersist.cxx10
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: */