From ee284e65d2b1cad231d316efe0ef31232dfa8d02 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Mon, 23 Jan 2023 09:37:11 +0200 Subject: XUnoTunnel->dynamic_cast in AnimationNode Change-Id: I9684ac5987c087797e1ca7a8ddb0f9c5b731faed Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145992 Tested-by: Jenkins Reviewed-by: Noel Grandin --- animations/source/animcore/animcore.cxx | 76 +++++++++++---------------------- 1 file changed, 25 insertions(+), 51 deletions(-) (limited to 'animations') diff --git a/animations/source/animcore/animcore.cxx b/animations/source/animcore/animcore.cxx index a22c413e64f8..16254209fcf3 100644 --- a/animations/source/animcore/animcore.cxx +++ b/animations/source/animcore/animcore.cxx @@ -45,7 +45,6 @@ #include #include #include -#include #include #include #include @@ -58,6 +57,7 @@ #include #include #include +#include #include #include #include @@ -90,7 +90,6 @@ using ::com::sun::star::container::XEnumeration; using ::com::sun::star::container::XEnumerationAccess; using ::com::sun::star::beans::NamedValue; using ::com::sun::star::util::XCloneable; -using ::com::sun::star::lang::XUnoTunnel; using ::com::sun::star::util::XChangesNotifier; using ::com::sun::star::util::XChangesListener; using ::com::sun::star::util::ElementChange; @@ -120,7 +119,6 @@ class AnimationNodeBase : public cppu::BaseMutex, public XCommand, public XCloneable, public XChangesNotifier, - public XUnoTunnel, public OWeakObject { @@ -293,10 +291,6 @@ public: virtual void SAL_CALL addChangesListener( const Reference< XChangesListener >& aListener ) override; virtual void SAL_CALL removeChangesListener( const Reference< XChangesListener >& aListener ) override; - // XUnoTunnel - virtual ::sal_Int64 SAL_CALL getSomething( const Sequence< ::sal_Int8 >& aIdentifier ) override; - - static const Sequence< sal_Int8 > & getUnoTunnelId(); void fireChangeListener(); private: @@ -317,8 +311,7 @@ private: Sequence< NamedValue > maUserData; // parent interface for XChild interface implementation - WeakReference mxParent; - AnimationNode* mpParent; + unotools::WeakReference mxParent; // attributes for XAnimate Any maTarget; @@ -427,7 +420,6 @@ AnimationNode::AnimationNode( sal_Int16 nNodeType ) mfAcceleration( 0.0 ), mfDecelerate( 0.0 ), mbAutoReverse( false ), - mpParent(nullptr), mnValueType( 0 ), mnSubItem( 0 ), mnCalcMode( (nNodeType == AnimationNodeType::ANIMATEMOTION) ? AnimationCalcMode::PACED : AnimationCalcMode::LINEAR), @@ -470,7 +462,6 @@ AnimationNode::AnimationNode( const AnimationNode& rNode ) mfDecelerate( rNode.mfDecelerate ), mbAutoReverse( rNode.mbAutoReverse ), maUserData( rNode.maUserData ), - mpParent(nullptr), // attributes for XAnimate maTarget( rNode.maTarget ), @@ -658,8 +649,7 @@ Any SAL_CALL AnimationNode::queryInterface( const Type& aType ) static_cast< XAnimationNode* >( static_cast< XTimeContainer * >( static_cast< XIterateContainer * >(this) ) ), static_cast< XInterface* >(static_cast< OWeakObject * >(this)), static_cast< XWeak* >(static_cast< OWeakObject * >(this)), - static_cast< XChangesNotifier* >( this ), - static_cast< XUnoTunnel* >( this ) ) ); + static_cast< XChangesNotifier* >( this ) ) ); if(!aRet.hasValue()) { @@ -754,19 +744,19 @@ void AnimationNode::initTypeProvider( sal_Int16 nNodeType ) noexcept static constexpr std::array type_numbers = { - 7, // CUSTOM - 9, // PAR - 9, // SEQ - 9, // ITERATE - 8, // ANIMATE - 8, // SET - 8, // ANIMATEMOTION - 8, // ANIMATECOLOR - 8, // ANIMATETRANSFORM - 8, // TRANSITIONFILTER - 8, // AUDIO - 8, // COMMAND - 8, // ANIMATEPHYSICS + 6, // CUSTOM + 8, // PAR + 8, // SEQ + 8, // ITERATE + 7, // ANIMATE + 7, // SET + 7, // ANIMATEMOTION + 7, // ANIMATECOLOR + 7, // ANIMATETRANSFORM + 7, // TRANSITIONFILTER + 7, // AUDIO + 7, // COMMAND + 7, // ANIMATEPHYSICS }; // collect types @@ -779,7 +769,6 @@ void AnimationNode::initTypeProvider( sal_Int16 nNodeType ) noexcept pTypeAr[nPos++] = cppu::UnoType::get(); pTypeAr[nPos++] = cppu::UnoType::get(); pTypeAr[nPos++] = cppu::UnoType::get(); - pTypeAr[nPos++] = cppu::UnoType::get(); pTypeAr[nPos++] = cppu::UnoType::get(); switch( nNodeType ) @@ -1213,7 +1202,7 @@ void SAL_CALL AnimationNode::setUserData( const Sequence< NamedValue >& _userdat Reference< XInterface > SAL_CALL AnimationNode::getParent() { Guard< Mutex > aGuard( m_aMutex ); - return mxParent.get(); + return static_cast(mxParent.get().get()); } @@ -1221,10 +1210,11 @@ Reference< XInterface > SAL_CALL AnimationNode::getParent() void SAL_CALL AnimationNode::setParent( const Reference< XInterface >& Parent ) { Guard< Mutex > aGuard( m_aMutex ); - if( Parent != mxParent.get() ) + if( Parent.get() != static_cast(mxParent.get().get()) ) { - mxParent = Parent; - mpParent = comphelper::getFromUnoTunnel(mxParent.get()); + rtl::Reference xParent = dynamic_cast(Parent.get()); + mxParent = xParent.get(); + assert(bool(xParent) == bool(Parent) && "only support AnimationNode subtypes"); fireChangeListener(); } @@ -2085,19 +2075,6 @@ void SAL_CALL AnimationNode::removeChangesListener( const Reference< XChangesLis } -// XUnoTunnel -::sal_Int64 SAL_CALL AnimationNode::getSomething( const Sequence< ::sal_Int8 >& rId ) -{ - return comphelper::getSomethingImpl(rId, this); -} - -const css::uno::Sequence< sal_Int8 > & AnimationNode::getUnoTunnelId() -{ - static const comphelper::UnoIdInit theAnimationNodeUnoTunnelId; - return theAnimationNodeUnoTunnelId.getSeq(); -} - - void AnimationNode::fireChangeListener() { Guard< Mutex > aGuard( m_aMutex ); @@ -2107,18 +2084,15 @@ void AnimationNode::fireChangeListener() { Reference< XInterface > xSource( static_cast(this), UNO_QUERY ); Sequence< ElementChange > aChanges; - const ChangesEvent aEvent( xSource, Any( mxParent.get() ), aChanges ); + const ChangesEvent aEvent( xSource, Any( css::uno::Reference(static_cast(mxParent.get().get())) ), aChanges ); while( aIterator.hasMoreElements() ) aIterator.next()->changesOccurred( aEvent ); } //fdo#69645 use WeakReference of mxParent to test if mpParent is still valid - if (mpParent) - { - Reference xGuard(mxParent); - if (xGuard.is()) - mpParent->fireChangeListener(); - } + rtl::Reference xGuard(mxParent); + if (xGuard.is()) + xGuard->fireChangeListener(); } -- cgit