diff options
author | Lionel Elie Mamane <lionel@mamane.lu> | 2011-09-02 14:57:30 +0200 |
---|---|---|
committer | Lionel Elie Mamane <lionel@mamane.lu> | 2011-09-07 11:17:55 +0200 |
commit | 5c64fd7ce04ff82edb2989d862bd660c9b9492a5 (patch) | |
tree | 3b457843f3f2068b91bfa2e8a35e8c1de23a93ba /cppuhelper | |
parent | 20a3baeb5da5bbb77eb2bf46d6714ad38dc4f19b (diff) |
Restore ABI compatibility with LO 3.4 and earlier
Factor out ABI-breaking changes to OPropertySetHelper into a derived
class OPropertySetHelper2.
Only gcc3.map is up-to-date.
Diffstat (limited to 'cppuhelper')
-rw-r--r-- | cppuhelper/inc/cppuhelper/propshlp.hxx | 67 | ||||
-rw-r--r-- | cppuhelper/source/gcc3.map | 15 | ||||
-rw-r--r-- | cppuhelper/source/msvc_win32_intel.map | 5 | ||||
-rw-r--r-- | cppuhelper/source/propshlp.cxx | 42 |
4 files changed, 94 insertions, 35 deletions
diff --git a/cppuhelper/inc/cppuhelper/propshlp.hxx b/cppuhelper/inc/cppuhelper/propshlp.hxx index 670ce038171b..f8237daf55b7 100644 --- a/cppuhelper/inc/cppuhelper/propshlp.hxx +++ b/cppuhelper/inc/cppuhelper/propshlp.hxx @@ -351,8 +351,7 @@ public: */ class OPropertySetHelper : public ::com::sun::star::beans::XMultiPropertySet, public ::com::sun::star::beans::XFastPropertySet, - public ::com::sun::star::beans::XPropertySet, - public ::com::sun::star::beans::XPropertySetOption + public ::com::sun::star::beans::XPropertySet { public: /** @@ -372,11 +371,12 @@ public: of this object. Stored in the variable rBHelper. @param bIgnoreRuntimeExceptionsWhileFiring - indicates whether occuring RuntimeExceptions will be - ignored when firing notifications (vetoableChange((), - propertyChange()) to listeners. + indicates whether occurring RuntimeExceptions will be + ignored when firing notifications + (vetoableChange(), propertyChange()) + to listeners. PropertyVetoExceptions may still be thrown. - This flag is useful in a inter-process scenarios when + This flag is useful in an inter-process scenario when remote bridges may break down (firing DisposedExceptions). */ @@ -395,11 +395,12 @@ public: additional event notifier @param bIgnoreRuntimeExceptionsWhileFiring - indicates whether occuring RuntimeExceptions will be - ignored when firing notifications (vetoableChange((), - propertyChange()) to listeners. + indicates whether occurring RuntimeExceptions will be + ignored when firing notifications + (vetoableChange(), propertyChange()) + to listeners. PropertyVetoExceptions may still be thrown. - This flag is useful in a inter-process scenarios when + This flag is useful in an inter-process scenario when remote bridges may break down (firing DisposedExceptions). */ @@ -412,7 +413,7 @@ public: Only returns a reference to XMultiPropertySet, XFastPropertySet, XPropertySet and XEventListener. */ - ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) throw (::com::sun::star::uno::RuntimeException); /** eases implementing XTypeProvider::getTypes, returns the types of XMultiPropertySet, XFastPropertySet, XPropertySet @@ -506,10 +507,6 @@ public: const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener > & Listener ) throw(::com::sun::star::uno::RuntimeException); - // XPropertySetOption - virtual void SAL_CALL enableChangeListenerNotification( sal_Bool bEnable ) - throw(::com::sun::star::uno::RuntimeException); - /** The property sequence is created in the call. The interface isn't used after the call. */ @@ -637,8 +634,6 @@ protected: */ OMultiTypeInterfaceContainerHelperInt32 aVetoableLC; - bool m_bFireEvent; - class Impl; /** reserved for future use. finally, the future has arrived... @@ -676,6 +671,44 @@ public: #pragma warning(pop) #endif +/** + OPropertySetHelper plus XPropertySetOption + */ +class OPropertySetHelper2 : public OPropertySetHelper, + public ::com::sun::star::beans::XPropertySetOption +{ +public: + /** Constructor. + + See OPropertySetHelper constructors documentation + */ + explicit OPropertySetHelper2( + OBroadcastHelper & rBHelper, + IEventNotificationHook *i_pFireEvents = NULL, + bool bIgnoreRuntimeExceptionsWhileFiring = false); + + // XInterface + virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type & rType ) + throw (::com::sun::star::uno::RuntimeException); + + // XPropertySetOption + virtual void SAL_CALL enableChangeListenerNotification( sal_Bool bEnable ) + throw(::com::sun::star::uno::RuntimeException); + + + +private: + OPropertySetHelper2( const OPropertySetHelper & ) SAL_THROW( () ); + OPropertySetHelper2 & operator = ( const OPropertySetHelper & ) SAL_THROW( () ); + +public: +// Suppress warning about virtual functions but non-virtual destructor: + /** + You must call disposing before destruction. + */ + virtual ~OPropertySetHelper2() SAL_THROW( () ); +}; + } // end namespace cppuhelper #endif // diff --git a/cppuhelper/source/gcc3.map b/cppuhelper/source/gcc3.map index fd5877bf7bfe..f4994619ddb1 100644 --- a/cppuhelper/source/gcc3.map +++ b/cppuhelper/source/gcc3.map @@ -260,7 +260,6 @@ _ZThn*_N4cppu16OComponentHelper7releaseEv; _ZThn*_N4cppu18OPropertySetHelper14queryInterfaceERKN3com3sun4star3uno4TypeE; _ZThn*_N4cppu18OPropertySetHelper20getFastPropertyValueE?; _ZThn*_N4cppu18OPropertySetHelper20setFastPropertyValueE?RKN3com3sun4star3uno3AnyE; -_ZThn*_N4cppu18OPropertySetHelper14queryInterfaceERKN3com3sun4star3uno4TypeE; _ZThn*_N4cppu18OPropertySetHelper16getPropertyValueERKN3rtl8OUStringE; _ZThn*_N4cppu18OPropertySetHelper16setPropertyValueERKN3rtl8OUStringERKN3com3sun4star3uno3AnyE; _ZThn*_N4cppu18OPropertySetHelper25addPropertyChangeListenerERKN3rtl8OUStringERKN3com3sun4star3uno9ReferenceINS7_5beans23XPropertyChangeListenerEEE; @@ -392,6 +391,16 @@ UDK_3.7 { # OOo 3.4 UDK_3.8 { # LibO 3.5 global: - _ZN4cppu18OPropertySetHelper32enableChangeListenerNotificationEh; - _ZThn*_N4cppu18OPropertySetHelper32enableChangeListenerNotificationEh; + ## class OPropertySetHelper2 + # constructors + _ZN4cppu19OPropertySetHelper2C1ERNS_19OBroadcastHelperVarINS_34OMultiTypeInterfaceContainerHelperEN3com3sun4star3uno4TypeEEEPNS_22IEventNotificationHookEb; + _ZN4cppu19OPropertySetHelper2C2ERNS_19OBroadcastHelperVarINS_34OMultiTypeInterfaceContainerHelperEN3com3sun4star3uno4TypeEEEPNS_22IEventNotificationHookEb; + # destructors + _ZN4cppu19OPropertySetHelper2D0Ev; + _ZN4cppu19OPropertySetHelper2D1Ev; + _ZN4cppu19OPropertySetHelper2D2Ev; + # queryInterface + _ZN4cppu19OPropertySetHelper214queryInterfaceERKN3com3sun4star3uno4TypeE; + # enableChangeListenerNotification + _ZN4cppu19OPropertySetHelper232enableChangeListenerNotificationEh; } UDK_3.7; diff --git a/cppuhelper/source/msvc_win32_intel.map b/cppuhelper/source/msvc_win32_intel.map index bd30b1b646d2..6409275e0f88 100644 --- a/cppuhelper/source/msvc_win32_intel.map +++ b/cppuhelper/source/msvc_win32_intel.map @@ -287,6 +287,7 @@ UDK_3.7 { # OOo 3.4 UDK_3.8 { # LibO 3.5 global: - ?enableChangeListenerNotification@OPropertySetHelper@cppu@@UAAXE@Z; - ??_7OPropertySetHelper@cppu@@6BXPropertySetOption@beans@star@sun@com@@@; + ?queryInterface@OPropertySetHelper@cppu@@UAA?AVAny@uno@star@sun@com@@ABVType@4567@@Z; + ?enableChangeListenerNotification@OPropertySetHelper2@cppu@@UAAXE@Z; + ??_7OPropertySetHelper2@cppu@@6BXPropertySetOption@beans@star@sun@com@@@; } UDK_3.7; diff --git a/cppuhelper/source/propshlp.cxx b/cppuhelper/source/propshlp.cxx index 787806200564..2a71f00e1ce0 100644 --- a/cppuhelper/source/propshlp.cxx +++ b/cppuhelper/source/propshlp.cxx @@ -152,11 +152,13 @@ public: IEventNotificationHook *i_pFireEvents ) :m_bIgnoreRuntimeExceptionsWhileFiring( i_bIgnoreRuntimeExceptionsWhileFiring ) + ,m_bFireEvents(true) ,m_pFireEvents( i_pFireEvents ) { } bool m_bIgnoreRuntimeExceptionsWhileFiring; + bool m_bFireEvents; class IEventNotificationHook * const m_pFireEvents; ::std::vector< sal_Int32 > m_handles; @@ -173,7 +175,6 @@ OPropertySetHelper::OPropertySetHelper( : rBHelper( rBHelper_ ), aBoundLC( rBHelper_.rMutex ), aVetoableLC( rBHelper_.rMutex ), - m_bFireEvent(true), m_pReserved( new Impl(false, 0) ) { } @@ -183,7 +184,6 @@ OPropertySetHelper::OPropertySetHelper( : rBHelper( rBHelper_ ), aBoundLC( rBHelper_.rMutex ), aVetoableLC( rBHelper_.rMutex ), - m_bFireEvent(true), m_pReserved( new Impl( bIgnoreRuntimeExceptionsWhileFiring, 0 ) ) { } @@ -194,35 +194,50 @@ OPropertySetHelper::OPropertySetHelper( : rBHelper( rBHelper_ ), aBoundLC( rBHelper_.rMutex ), aVetoableLC( rBHelper_.rMutex ), - m_bFireEvent(true), m_pReserved( new Impl( bIgnoreRuntimeExceptionsWhileFiring, i_pFireEvents) ) { } +OPropertySetHelper2::OPropertySetHelper2( + OBroadcastHelper & irBHelper, + IEventNotificationHook *i_pFireEvents, + bool bIgnoreRuntimeExceptionsWhileFiring) + :OPropertySetHelper( irBHelper, i_pFireEvents, bIgnoreRuntimeExceptionsWhileFiring ) +{ +} + /** * You must call disposing before. */ OPropertySetHelper::~OPropertySetHelper() SAL_THROW( () ) { } +OPropertySetHelper2::~OPropertySetHelper2() SAL_THROW( () ) +{ +} -/** - * These method is called from queryInterface, if no delegator is set. - * Otherwise this method is called from the delegator. - */ -// XAggregation +// XInterface Any OPropertySetHelper::queryInterface( const ::com::sun::star::uno::Type & rType ) throw (RuntimeException) { return ::cppu::queryInterface( rType, static_cast< XPropertySet * >( this ), - static_cast< XPropertySetOption * >( this ), static_cast< XMultiPropertySet * >( this ), static_cast< XFastPropertySet * >( this ) ); } +Any OPropertySetHelper2::queryInterface( const ::com::sun::star::uno::Type & rType ) + throw (RuntimeException) +{ + Any cnd(cppu::queryInterface(rType, static_cast< XPropertySetOption * >(this))); + if ( cnd.hasValue() ) + return cnd; + else + return OPropertySetHelper::queryInterface(rType); +} + /** * called from the derivee's XTypeProvider::getTypes implementation */ @@ -631,10 +646,11 @@ void OPropertySetHelper::fire sal_Bool bVetoable ) { - if (!m_bFireEvent) + OSL_ENSURE( m_pReserved.get(), "No OPropertySetHelper::Impl" ); + + if (! m_pReserved->m_bFireEvents) return; - OSL_ENSURE( m_pReserved.get(), "No OPropertySetHelper::Impl" ); if (m_pReserved->m_pFireEvents) { m_pReserved->m_pFireEvents->fireEvents( pnHandles, nHandles, bVetoable, @@ -1037,10 +1053,10 @@ void OPropertySetHelper::firePropertiesChangeEvent( delete [] pHandles; } -void OPropertySetHelper::enableChangeListenerNotification( sal_Bool bEnable ) +void OPropertySetHelper2::enableChangeListenerNotification( sal_Bool bEnable ) throw(::com::sun::star::uno::RuntimeException) { - m_bFireEvent = bEnable; + m_pReserved->m_bFireEvents = bEnable; } #ifdef xdvnsdfln |