summaryrefslogtreecommitdiff
path: root/cppuhelper
diff options
context:
space:
mode:
authorLionel Elie Mamane <lionel@mamane.lu>2011-09-02 14:57:30 +0200
committerLionel Elie Mamane <lionel@mamane.lu>2011-09-07 11:17:55 +0200
commit5c64fd7ce04ff82edb2989d862bd660c9b9492a5 (patch)
tree3b457843f3f2068b91bfa2e8a35e8c1de23a93ba /cppuhelper
parent20a3baeb5da5bbb77eb2bf46d6714ad38dc4f19b (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.hxx67
-rw-r--r--cppuhelper/source/gcc3.map15
-rw-r--r--cppuhelper/source/msvc_win32_intel.map5
-rw-r--r--cppuhelper/source/propshlp.cxx42
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