21#include <osl/diagnose.h>
26#include <com/sun/star/beans/PropertyAttribute.hpp>
27#include <com/sun/star/lang/DisposedException.hpp>
28#include <com/sun/star/lang/IllegalArgumentException.hpp>
62 return static_cast<OUString
const *
>(arg1)->compareTo(
static_cast<Property const *
>(arg2)->Name );
73class OPropertySetHelperInfo_Impl
74 :
public WeakImplHelper< css::beans::XPropertySetInfo >
83 virtual Property SAL_CALL getPropertyByName(
const OUString& PropertyName)
override;
84 virtual sal_Bool SAL_CALL hasPropertyByName(
const OUString& PropertyName)
override;
92OPropertySetHelperInfo_Impl::OPropertySetHelperInfo_Impl(
94 :
aInfos( rHelper_.getProperties() )
109Property OPropertySetHelperInfo_Impl::getPropertyByName(
const OUString & PropertyName )
112 pR =
static_cast<Property *
>(bsearch( &PropertyName,
aInfos.getConstArray(),
aInfos.getLength(),
114 compare_OUString_Property_Impl ));
116 throw UnknownPropertyException(PropertyName);
125sal_Bool OPropertySetHelperInfo_Impl::hasPropertyByName(
const OUString & PropertyName )
128 pR =
static_cast<Property *
>(bsearch( &PropertyName,
aInfos.getConstArray(),
aInfos.getLength(),
130 compare_OUString_Property_Impl ));
131 return pR !=
nullptr;
139 Impl(
bool i_bIgnoreRuntimeExceptionsWhileFiring,
142 :m_bIgnoreRuntimeExceptionsWhileFiring( i_bIgnoreRuntimeExceptionsWhileFiring )
144 ,m_pFireEvents( i_pFireEvents )
159OPropertySetHelper::OPropertySetHelper(
161 : rBHelper( rBHelper_ ),
162 aBoundLC( rBHelper_.rMutex ),
163 aVetoableLC( rBHelper_.rMutex ),
164 m_pReserved( new
Impl(false, nullptr) )
170 : rBHelper( rBHelper_ ),
171 aBoundLC( rBHelper_.rMutex ),
172 aVetoableLC( rBHelper_.rMutex ),
173 m_pReserved( new
Impl( bIgnoreRuntimeExceptionsWhileFiring, nullptr ) )
179 bool bIgnoreRuntimeExceptionsWhileFiring)
180 : rBHelper( rBHelper_ ),
181 aBoundLC( rBHelper_.rMutex ),
182 aVetoableLC( rBHelper_.rMutex ),
184 new
Impl( bIgnoreRuntimeExceptionsWhileFiring, i_pFireEvents) )
191 bool bIgnoreRuntimeExceptionsWhileFiring)
213 static_cast< XMultiPropertySet *
>(
this ),
214 static_cast< XFastPropertySet *
>(
this ) );
220 if ( cnd.hasValue() )
242 aEvt.Source = rSource;
253 return new OPropertySetHelperInfo_Impl(rProperties);
258 const OUString& rPropertyName,
const Any& rValue )
270 const OUString& rPropertyName )
282 const OUString& rPropertyName,
286 OSL_ENSURE( !
rBHelper.
bInDispose,
"do not addPropertyChangeListener in the dispose call" );
293 if( !rPropertyName.isEmpty() )
299 if( nHandle == -1 ) {
301 throw UnknownPropertyException(rPropertyName);
306 if( !(nAttributes & css::beans::PropertyAttribute::BOUND) )
308 OSL_FAIL(
"add listener to an unbound property" );
327 const OUString& rPropertyName,
336 if( !rPropertyName.isEmpty() )
344 throw UnknownPropertyException(rPropertyName);
358 const OUString& rPropertyName,
362 OSL_ENSURE( !
rBHelper.
bInDispose,
"do not addVetoableChangeListener in the dispose call" );
369 if( !rPropertyName.isEmpty() )
375 if( nHandle == -1 ) {
377 throw UnknownPropertyException(rPropertyName);
382 if( !(nAttributes & PropertyAttribute::CONSTRAINED) )
384 OSL_FAIL(
"addVetoableChangeListener, and property is not constrained" );
401 const OUString& rPropertyName,
410 if( !rPropertyName.isEmpty() )
416 if( nHandle == -1 ) {
418 throw UnknownPropertyException(rPropertyName);
440 throw UnknownPropertyException(OUString::number(i_handle));
446 Any aConverted, aOld;
453 OSL_ENSURE( (
nAttributes & PropertyAttribute::CONSTRAINED ) == 0,
454 "OPropertySetHelper::setDependentFastPropertyValue: not to be used for constrained properties!" );
461 catch (
const UnknownPropertyException& ) {
throw; }
462 catch (
const PropertyVetoException& ) {
throw; }
463 catch (
const IllegalArgumentException& ) {
throw; }
464 catch (
const WrappedTargetException& ) {
throw; }
469 WrappedTargetException aWrapped;
471 aWrapped.Context =
static_cast< XPropertySet*
>( this );
484 OSL_ENSURE( !
rBHelper.
bInDispose,
"do not setFastPropertyValue in the dispose call" );
491 throw UnknownPropertyException(OUString::number(nHandle));
493 if( nAttributes & PropertyAttribute::READONLY )
494 throw PropertyVetoException();
510 if( nAttributes & PropertyAttribute::CONSTRAINED )
515 fire( &nHandle, &rValue, &aOldVal, 1,
true );
525 catch (
const css::beans::UnknownPropertyException& ) {
throw; }
526 catch (
const css::beans::PropertyVetoException& ) {
throw; }
527 catch (
const css::lang::IllegalArgumentException& ) {
throw; }
528 catch (
const css::lang::WrappedTargetException& ) {
throw; }
529 catch (
const css::uno::RuntimeException& ) {
throw; }
530 catch (
const css::uno::Exception& e )
533 css::lang::WrappedTargetException aWrap;
534 aWrap.Context =
static_cast< css::beans::XPropertySet*
>( this );
535 aWrap.TargetException <<= e;
553 throw UnknownPropertyException(OUString::number(
nHandle));
568 fire( i_handles, i_newValues, i_oldValues, i_count,
false );
575 "OPropertySetHelper::impl_fireAll: inconsistency!" );
577 std::vector< sal_Int32 > allHandles( additionalEvents + i_count );
579 std::copy( i_handles, i_handles + i_count, allHandles.begin() + additionalEvents );
581 std::vector< Any > allNewValues( additionalEvents + i_count );
583 std::copy( i_newValues, i_newValues + i_count, allNewValues.begin() + additionalEvents );
585 std::vector< Any > allOldValues( additionalEvents + i_count );
587 std::copy( i_oldValues, i_oldValues + i_count, allOldValues.begin() + additionalEvents );
594 fire( allHandles.data(), allNewValues.data(), allOldValues.data(), additionalEvents + i_count,
false );
600 sal_Int32 * pnHandles,
601 const Any * pNewValues,
602 const Any * pOldValues,
612 pnHandles, nHandles, bVetoable,
622 PropertyChangeEvent * pEvts = aEvts.getArray();
625 sal_Int32 nChangesLen = 0;
627 for( i = 0;
i < nHandles;
i++ )
637 (bVetoable && (nAttributes & PropertyAttribute::CONSTRAINED)) ||
638 (!bVetoable && (nAttributes & PropertyAttribute::BOUND))
641 pEvts[nChangesLen].Source = xSource;
642 pEvts[nChangesLen].PropertyName =
aPropName;
643 pEvts[nChangesLen].PropertyHandle = pnHandles[
i];
644 pEvts[nChangesLen].OldValue = pOldValues[
i];
645 pEvts[nChangesLen].NewValue = pNewValues[
i];
650 bool bIgnoreRuntimeExceptionsWhileFiring =
654 for( i = 0;
i < nChangesLen;
i++ )
666 while( aIt.hasMoreElements() )
675 static_cast<XVetoableChangeListener *
>(pL)->vetoableChange(
680 static_cast<XPropertyChangeListener *
>(pL)->propertyChange(
684 catch (DisposedException & exc)
686 OSL_ENSURE( exc.Context.is(),
687 "DisposedException without Context!" );
688 if (exc.Context == pL)
696 SAL_INFO(
"cppuhelper",
"caught RuntimeException while firing listeners: " << exc);
697 if (! bIgnoreRuntimeExceptionsWhileFiring)
718 while( aIt.hasMoreElements() )
727 static_cast<XVetoableChangeListener *
>(pL)->vetoableChange(
732 static_cast<XPropertyChangeListener *
>(pL)->propertyChange(
736 catch (DisposedException & exc)
738 OSL_ENSURE( exc.Context.is(),
739 "DisposedException without Context!" );
740 if (exc.Context == pL)
748 SAL_INFO(
"cppuhelper",
"caught RuntimeException while firing listeners: " << exc);
749 if (! bIgnoreRuntimeExceptionsWhileFiring)
757 aEvts.realloc( nChangesLen );
768 while( aIt.hasMoreElements() )
770 XPropertiesChangeListener * pL =
771 static_cast<XPropertiesChangeListener *
>(aIt.next());
778 pL->propertiesChange( aEvts );
780 catch (DisposedException & exc)
782 OSL_ENSURE( exc.Context.is(),
783 "DisposedException without Context!" );
784 if (exc.Context == pL)
792 SAL_INFO(
"cppuhelper",
"caught RuntimeException while firing listeners: " << exc);
793 if (! bIgnoreRuntimeExceptionsWhileFiring)
802 sal_Int32 * pHandles,
804 sal_Int32 nHitCount )
806 OSL_ENSURE( !
rBHelper.
bInDispose,
"do not getFastPropertyValue in the dispose call" );
812 std::unique_ptr<Any[]> pConvertedValues(
new Any[ nHitCount ]);
813 std::unique_ptr<Any[]> pOldValues(
new Any[ nHitCount ]);
820 for( i = 0;
i < nSeqLen;
i++ )
822 if( pHandles[i] != -1 )
826 if( nAttributes & PropertyAttribute::READONLY ) {
827 throw PropertyVetoException();
831 pHandles[i], pValues[i] ) )
834 pHandles[
n] = pHandles[
i];
843 fire( pHandles, pConvertedValues.get(), pOldValues.get(), n,
true );
849 for( i = 0;
i <
n;
i++ )
858 impl_fireAll( pHandles, pConvertedValues.get(), pOldValues.get(), n );
870 sal_Int32 nSeqLen = rPropertyNames.getLength();
871 if (nSeqLen != rValues.getLength())
872 throw IllegalArgumentException(
"lengths do not match",
static_cast<XPropertySet*
>(
this),
874 std::unique_ptr<sal_Int32[]> pHandles(
new sal_Int32[ nSeqLen ]);
878 sal_Int32 nHitCount = rPH.
fillHandles( pHandles.get(), rPropertyNames );
886 sal_Int32 nSeqLen = rPropertyNames.getLength();
887 std::unique_ptr<sal_Int32[]> pHandles(
new sal_Int32[ nSeqLen ]);
899 for( sal_Int32 i = 0;
i < nSeqLen;
i++ )
925 sal_Int32 nLen = rPropertyNames.getLength();
926 std::unique_ptr<sal_Int32[]> pHandles(
new sal_Int32[nLen]);
929 const OUString* pNames = rPropertyNames.getConstArray();
932 sal_Int32 nFireLen = 0;
934 for( i = 0;
i < nLen;
i++ )
935 if( pHandles[i] != -1 )
939 PropertyChangeEvent* pChanges = aChanges.getArray();
945 sal_Int32 nFirePos = 0;
946 for( i = 0;
i < nLen;
i++ )
948 if( pHandles[i] != -1 )
950 pChanges[nFirePos].Source = xSource;
951 pChanges[nFirePos].PropertyName = pNames[
i];
952 pChanges[nFirePos].PropertyHandle = pHandles[
i];
954 pChanges[nFirePos].NewValue = pChanges[nFirePos].OldValue;
961 rListener->propertiesChange( aChanges );
974 return static_cast<Property const *
>(arg1)->
Name.compareTo(
static_cast<Property const *
>(arg2)->Name );
986 if( pProperties[
i-1].
Name > pProperties[
i].
Name )
989 OSL_FAIL(
"Property array is not sorted" );
994 pProperties =
aInfos.getConstArray();
1009 : m_pReserved(nullptr)
1011 , bRightOrdered( false )
1019 : m_pReserved(nullptr)
1021 , bRightOrdered( false )
1029 return aInfos.getLength();
1035 OUString * pPropName,
1036 sal_Int16 * pAttributes,
1045 if( nHandle < 0 || nHandle >=
nElements )
1048 *pPropName = pProperties[
nHandle ].Name;
1050 *pAttributes = pProperties[
nHandle ].Attributes;
1059 *pPropName = pProperties[
i ].Name;
1061 *pAttributes = pProperties[
i ].Attributes;
1078 pR =
static_cast<Property *
>(bsearch( &aPropertyName,
aInfos.getConstArray(),
aInfos.getLength(),
1082 throw UnknownPropertyException(aPropertyName);
1091 pR =
static_cast<Property *
>(bsearch( &aPropertyName,
aInfos.getConstArray(),
aInfos.getLength(),
1094 return pR !=
nullptr;
1104 return pR ? pR->Handle : -1;
1110 sal_Int32 nHitCount = 0;
1111 const OUString * pReqProps = rPropNames.getConstArray();
1112 sal_Int32 nReqLen = rPropNames.getLength();
1116 for( sal_Int32
i = 0;
i < nReqLen;
i++ )
1119 sal_Int32
n =
static_cast<sal_Int32
>(pEnd - pCur);
1129 if( (nReqLen -
i) * nLog >= pEnd - pCur )
1132 while( pCur < pEnd && pReqProps[
i] > pCur->Name )
1136 if( pCur < pEnd && pReqProps[
i] == pCur->Name )
1138 pHandles[
i] = pCur->Handle;
1147 sal_Int32 nCompVal = 1;
1151 while( nCompVal != 0 && pCur <= pEnd )
1153 pMid = (pEnd - pCur) / 2 + pCur;
1155 nCompVal = pReqProps[
i].compareTo( pMid->Name );
1165 pHandles[
i] = pMid->Handle;
1169 else if( nCompVal > 0 )
const PropertyValue * pValues
An interface to extend event notification actions.
virtual void fireEvents(sal_Int32 *pnHandles, sal_Int32 nCount, sal_Bool bVetoable, bool bIgnoreRuntimeExceptionsWhileFiring)=0
Method to be called by OPropertySetHelper::fire.
This interface is used by the OPropertyHelper, to access the property description.
virtual sal_Bool SAL_CALL fillPropertyMembersByHandle(::rtl::OUString *pPropName, sal_Int16 *pAttributes, sal_Int32 nHandle)=0
Return the property members Name and Attribute from the handle nHandle.
virtual sal_Int32 SAL_CALL fillHandles(sal_Int32 *pHandles, const css::uno::Sequence< ::rtl::OUString > &rPropNames)=0
Fill the array with the handles of the properties.
virtual ~IPropertyArrayHelper()
Following the rule, the first virtual method implies a virtual destructor.
virtual sal_Int32 SAL_CALL getHandleByName(const ::rtl::OUString &rPropertyName)=0
Return the handle of the property with the name rPropertyName.
A container of interfaces.
This is the iterator of an InterfaceContainerHelper.
sal_Int32 SAL_CALL addInterface(const sal_Int32 &rKey, const css::uno::Reference< css::uno::XInterface > &r)
Insert an element in the container specified with the key.
sal_Int32 SAL_CALL removeInterface(const sal_Int32 &rKey, const css::uno::Reference< css::uno::XInterface > &rxIFace)
Remove an element from the container specified with the key.
void SAL_CALL disposeAndClear(const css::lang::EventObject &rEvt)
Call disposing on all objects in the container that support XEventListener.
OInterfaceContainerHelper *SAL_CALL getContainer(const sal_Int32 &rKey) const
Return the container created under this key.
sal_Int32 SAL_CALL getCount() const
Return the number of properties.
OPropertyArrayHelper(css::beans::Property *pProps, sal_Int32 nElements, sal_Bool bSorted=true)
Create an object which supports the common property interfaces.
virtual css::beans::Property SAL_CALL getPropertyByName(const ::rtl::OUString &rPropertyName) SAL_OVERRIDE
Return the property with the name rPropertyName.
sal_Bool bRightOrdered
True, If the values of the handles are sorted in the same way as the names and the highest handle val...
virtual sal_Bool SAL_CALL fillPropertyMembersByHandle(::rtl::OUString *pPropName, sal_Int16 *pAttributes, sal_Int32 nHandle) SAL_OVERRIDE
Return the property members Name and Attribute from the handle nHandle.
void init(sal_Bool bSorted)
css::uno::Sequence< css::beans::Property > aInfos
The sequence generated from the pProperties array.
virtual sal_Bool SAL_CALL hasPropertyByName(const ::rtl::OUString &rPropertyName) SAL_OVERRIDE
Return true if the property with the name rPropertyName exist, otherwise false.
virtual sal_Int32 SAL_CALL getHandleByName(const ::rtl::OUString &rPropertyName) SAL_OVERRIDE
Return the handle of the property with the name rPropertyName.
virtual sal_Int32 SAL_CALL fillHandles(sal_Int32 *pHandles, const css::uno::Sequence< ::rtl::OUString > &rPropNames) SAL_OVERRIDE
Fill the array with the handles of the properties.
virtual css::uno::Sequence< css::beans::Property > SAL_CALL getProperties() SAL_OVERRIDE
Return the sequence of properties.
virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType) SAL_OVERRIDE
Only returns a reference to XMultiPropertySet, XFastPropertySet, XPropertySet and XEventListener.
OPropertySetHelper2(OBroadcastHelper &rBHelper, IEventNotificationHook *i_pFireEvents=NULL, bool bIgnoreRuntimeExceptionsWhileFiring=false)
Constructor.
virtual void SAL_CALL enableChangeListenerNotification(sal_Bool bEnable) SAL_OVERRIDE
virtual ~OPropertySetHelper2()
You must call disposing before destruction.
std::vector< Any > m_oldValues
bool m_bIgnoreRuntimeExceptionsWhileFiring
std::vector< sal_Int32 > m_handles
class IEventNotificationHook *const m_pFireEvents
Impl(bool i_bIgnoreRuntimeExceptionsWhileFiring, IEventNotificationHook *i_pFireEvents)
std::vector< Any > m_newValues
This abstract class maps the methods of the interfaces XMultiPropertySet, XFastPropertySet and XPrope...
virtual void SAL_CALL addVetoableChangeListener(const ::rtl::OUString &aPropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) SAL_OVERRIDE
Ignored if the property is not constrained.
virtual void SAL_CALL addPropertyChangeListener(const ::rtl::OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &aListener) SAL_OVERRIDE
Ignored if the property is not bound.
void setDependentFastPropertyValue(sal_Int32 i_handle, const css::uno::Any &i_value)
sets an dependent property's value
void SAL_CALL setFastPropertyValues(sal_Int32 nSeqLen, sal_Int32 *pHandles, const css::uno::Any *pValues, sal_Int32 nHitCount)
Set multiple properties with the handles.
virtual void SAL_CALL removeVetoableChangeListener(const ::rtl::OUString &aPropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) SAL_OVERRIDE
Ignored if the property is not constrained.
virtual void SAL_CALL setFastPropertyValue(sal_Int32 nHandle, const css::uno::Any &rValue) SAL_OVERRIDE
Throw UnknownPropertyException or PropertyVetoException if the property with the name rPropertyName d...
static css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL createPropertySetInfo(IPropertyArrayHelper &rProperties)
The property sequence is created in the call.
virtual css::uno::Any SAL_CALL getFastPropertyValue(sal_Int32 nHandle) SAL_OVERRIDE
Impl *const m_pReserved
reserved for future use.
virtual void SAL_CALL setPropertyValue(const ::rtl::OUString &rPropertyName, const css::uno::Any &aValue) SAL_OVERRIDE
Throw UnknownPropertyException or PropertyVetoException if the property with the name rPropertyName d...
~OPropertySetHelper()
You must call disposing before destruction.
virtual IPropertyArrayHelper &SAL_CALL getInfoHelper()=0
This abstract method must return the name to index table.
OMultiTypeInterfaceContainerHelperInt32 aBoundLC
Container for the XPropertyChangedListener.
virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const css::uno::Any &rValue)=0
The same as setFastPropertyValue; nHandle is always valid.
virtual void SAL_CALL addPropertiesChangeListener(const css::uno::Sequence< ::rtl::OUString > &PropertyNames, const css::uno::Reference< css::beans::XPropertiesChangeListener > &Listener) SAL_OVERRIDE
virtual css::uno::Any SAL_CALL getPropertyValue(const ::rtl::OUString &aPropertyName) SAL_OVERRIDE
Throw UnknownPropertyException if the property with the name rPropertyName does not exist.
void SAL_CALL disposing()
Send a disposing notification to the listeners in the containers aBoundLC and aVetoableLC.
OBroadcastHelper & rBHelper
The common data of a broadcaster.
OMultiTypeInterfaceContainerHelperInt32 aVetoableLC
Container for the XPropertyVetoableListener.
virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType) SAL_OVERRIDE
Only returns a reference to XMultiPropertySet, XFastPropertySet, XPropertySet and XEventListener.
virtual void SAL_CALL removePropertiesChangeListener(const css::uno::Reference< css::beans::XPropertiesChangeListener > &Listener) SAL_OVERRIDE
void impl_fireAll(sal_Int32 *i_handles, const css::uno::Any *i_newValues, const css::uno::Any *i_oldValues, sal_Int32 i_count)
notifies the given changes in property's values, plus all property changes collected during recent |s...
virtual sal_Bool SAL_CALL convertFastPropertyValue(css::uno::Any &rConvertedValue, css::uno::Any &rOldValue, sal_Int32 nHandle, const css::uno::Any &rValue)=0
Converted the value rValue and return the result in rConvertedValue and the old value in rOldValue.
OPropertySetHelper(OBroadcastHelper &rBHelper)
void SAL_CALL fire(sal_Int32 *pnHandles, const css::uno::Any *pNewValues, const css::uno::Any *pOldValues, sal_Int32 nCount, sal_Bool bVetoable)
This method fire events to all registered property listeners.
virtual void SAL_CALL firePropertiesChangeEvent(const css::uno::Sequence< ::rtl::OUString > &PropertyNames, const css::uno::Reference< css::beans::XPropertiesChangeListener > &Listener) SAL_OVERRIDE
virtual void SAL_CALL setPropertyValues(const css::uno::Sequence< ::rtl::OUString > &PropertyNames, const css::uno::Sequence< css::uno::Any > &Values) SAL_OVERRIDE
virtual css::uno::Sequence< css::uno::Any > SAL_CALL getPropertyValues(const css::uno::Sequence< ::rtl::OUString > &PropertyNames) SAL_OVERRIDE
virtual void SAL_CALL removePropertyChangeListener(const ::rtl::OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &aListener) SAL_OVERRIDE
Ignored if the property is not bound.
css::uno::Sequence< css::uno::Type > getTypes()
eases implementing XTypeProvider::getTypes, returns the types of XMultiPropertySet,...
css::uno::Type const & get()
#define SAL_INFO(area, stream)
class SAL_NO_VTABLE XPropertySet
css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType, Interface1 *p1)
Compares demanded type to given template argument types.
static int compare_Property_Impl(const void *arg1, const void *arg2) SAL_THROW_EXTERN_C()
static const css::uno::Type & getPropertiesTypeIdentifier()
static const css::uno::Type & getPropertyTypeIdentifier()
static const css::uno::Type & getVetoableTypeIdentifier()
static int compare_OUString_Property_Impl(const void *arg1, const void *arg2) SAL_THROW_EXTERN_C()
Any SAL_CALL getCaughtException()
Use this function to get the dynamic type of a caught C++-UNO exception; completes the above function...
Sequence< Property > aInfos
This struct contains the standard variables of a broadcaster.
void addListener(const keyType &key, const css::uno::Reference< css::uno::XInterface > &r)
adds a listener threadsafe.
container aLC
ListenerContainer class is thread safe.
::osl::Mutex & rMutex
The shared mutex.
sal_Bool bInDispose
In dispose call.
void removeListener(const keyType &key, const css::uno::Reference< css::uno::XInterface > &r)
removes a listener threadsafe
sal_Bool bDisposed
Dispose call ready.
#define SAL_THROW_EXTERN_C()