[PATCH] TMP: in-progress-ABI-breakage-fix

Lionel Elie Mamane lionel at mamane.lu
Fri Sep 2 05:57:30 PDT 2011


---
 comphelper/inc/comphelper/propstate.hxx  |    4 +-
 comphelper/source/property/propstate.cxx |    4 +-
 cppuhelper/inc/cppuhelper/propshlp.hxx   |   67 ++++++++++++++++++++++--------
 cppuhelper/source/gcc3.map               |   22 ++++++++-
 cppuhelper/source/msvc_win32_intel.map   |    5 +-
 cppuhelper/source/propshlp.cxx           |   42 +++++++++++++------
 6 files changed, 105 insertions(+), 39 deletions(-)

diff --git a/comphelper/inc/comphelper/propstate.hxx b/comphelper/inc/comphelper/propstate.hxx
index 2c8f06f..b99f75f 100644
--- a/comphelper/inc/comphelper/propstate.hxx
+++ b/comphelper/inc/comphelper/propstate.hxx
@@ -54,11 +54,11 @@ namespace comphelper
     //= OPropertyStateHelper
     //==================================================================
     /// helper class for implementing property states
-    class COMPHELPER_DLLPUBLIC OPropertyStateHelper :public ::cppu::OPropertySetHelper
+    class COMPHELPER_DLLPUBLIC OPropertyStateHelper :public ::cppu::OPropertySetHelper2
                                                     ,public ::com::sun::star::beans::XPropertyState
     {
     public:
-        OPropertyStateHelper(::cppu::OBroadcastHelper& rBHlp):OPropertySetHelper(rBHlp) { }
+        OPropertyStateHelper(::cppu::OBroadcastHelper& rBHlp):OPropertySetHelper2(rBHlp) { }
         OPropertyStateHelper(::cppu::OBroadcastHelper& rBHlp,
                              ::cppu::IEventNotificationHook *i_pFireEvents);
 
diff --git a/comphelper/source/property/propstate.cxx b/comphelper/source/property/propstate.cxx
index ec621cb..3859f6a 100644
--- a/comphelper/source/property/propstate.cxx
+++ b/comphelper/source/property/propstate.cxx
@@ -57,7 +57,7 @@ namespace comphelper
     //---------------------------------------------------------------------
     ::com::sun::star::uno::Any SAL_CALL OPropertyStateHelper::queryInterface(const  ::com::sun::star::uno::Type& _rType) throw( ::com::sun::star::uno::RuntimeException)
     {
-        ::com::sun::star::uno::Any aReturn = OPropertySetHelper::queryInterface(_rType);
+        ::com::sun::star::uno::Any aReturn = OPropertySetHelper2::queryInterface(_rType);
         // our own ifaces
         if ( !aReturn.hasValue() )
             aReturn = ::cppu::queryInterface(_rType, static_cast< ::com::sun::star::beans::XPropertyState*>(this));
@@ -82,7 +82,7 @@ namespace comphelper
     OPropertyStateHelper::OPropertyStateHelper(
         ::cppu::OBroadcastHelper& rBHlp,
         ::cppu::IEventNotificationHook *i_pFireEvents)
-        :   ::cppu::OPropertySetHelper(rBHlp, i_pFireEvents) { }
+        :   ::cppu::OPropertySetHelper2(rBHlp, i_pFireEvents) { }
 
     OPropertyStateHelper::~OPropertyStateHelper() {}
 
diff --git a/cppuhelper/inc/cppuhelper/propshlp.hxx b/cppuhelper/inc/cppuhelper/propshlp.hxx
index 670ce03..f8237da 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 fd5877bf..9a0ae57 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,23 @@ UDK_3.7 { # OOo 3.4
 
 UDK_3.8 { # LibO 3.5
 global:
-        _ZN4cppu18OPropertySetHelper32enableChangeListenerNotificationEh;
-        _ZThn*_N4cppu18OPropertySetHelper32enableChangeListenerNotificationEh;
+	## class OPropertySetHelper2
+	# vtable
+	_ZTVN4cppu19OPropertySetHelper2E;
+	# constructors
+	_ZN4cppu19OPropertySetHelper2C1ERNS_19OBroadcastHelperVarINS_34OMultiTypeInterfaceContainerHelperEN3com3sun4star3uno4TypeEEEPNS_22IEventNotificationHookEb;
+	_ZN4cppu19OPropertySetHelper2C2ERNS_19OBroadcastHelperVarINS_34OMultiTypeInterfaceContainerHelperEN3com3sun4star3uno4TypeEEEPNS_22IEventNotificationHookEb;
+	# destructors
+	_ZN4cppu19OPropertySetHelper2D0Ev;
+	_ZN4cppu19OPropertySetHelper2D1Ev;
+	_ZN4cppu19OPropertySetHelper2D2Ev;
+	# typeinfo & typeinfo name
+	_ZTIN4cppu19OPropertySetHelper2E;
+	_ZTSN4cppu19OPropertySetHelper2E;
+	# queryInterface: member function itself and thunks
+	_ZN4cppu19OPropertySetHelper214queryInterfaceERKN3com3sun4star3uno4TypeE;
+	_ZThn*_N4cppu19OPropertySetHelper214queryInterfaceERKN3com3sun4star3uno4TypeE;
+	# enableChangeListenerNotification: member function itself and thunks
+        _ZN4cppu19OPropertySetHelper232enableChangeListenerNotificationEh;
+        _ZThn*_N4cppu19OPropertySetHelper232enableChangeListenerNotificationEh;
 } UDK_3.7;
diff --git a/cppuhelper/source/msvc_win32_intel.map b/cppuhelper/source/msvc_win32_intel.map
index bd30b1b..6409275 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 at OPropertySetHelper@cppu@@UAAXE at Z;
-        ??_7OPropertySetHelper at cppu@@6BXPropertySetOption at beans@star at sun@com@@@;
+	?queryInterface at OPropertySetHelper@cppu@@UAA?AVAny at uno@star at sun@com@@ABVType at 4567@@Z;
+        ?enableChangeListenerNotification at OPropertySetHelper2@cppu@@UAAXE at Z;
+        ??_7OPropertySetHelper2 at cppu@@6BXPropertySetOption at beans@star at sun@com@@@;
 } UDK_3.7;
diff --git a/cppuhelper/source/propshlp.cxx b/cppuhelper/source/propshlp.cxx
index 7878062..2a71f00 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
-- 
1.7.2.5


--ibTvN161/egqYuK8--


More information about the LibreOffice mailing list