diff options
author | Oliver Bolte <obo@openoffice.org> | 2008-10-16 06:57:26 +0000 |
---|---|---|
committer | Oliver Bolte <obo@openoffice.org> | 2008-10-16 06:57:26 +0000 |
commit | db4c719a825e0c5b8d13133a1c8a33d4f3b53753 (patch) | |
tree | 7c16f150485662d25afe7b89d15884ec5e6bc3dd /sfx2 | |
parent | 0a6f995f4e6739636123a9829b5e22ea04b52f72 (diff) |
CWS-TOOLING: integrate CWS odbmacros3
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/inc/sfx2/docstoragemodifylistener.hxx | 10 | ||||
-rw-r--r-- | sfx2/inc/sfx2/evntconf.hxx | 4 | ||||
-rw-r--r-- | sfx2/inc/sfx2/sfxbasemodel.hxx | 2 | ||||
-rw-r--r-- | sfx2/source/doc/docstoragemodifylistener.cxx | 10 | ||||
-rw-r--r-- | sfx2/source/doc/sfxbasemodel.cxx | 4 | ||||
-rw-r--r-- | sfx2/source/inc/eventsupplier.hxx | 27 | ||||
-rw-r--r-- | sfx2/source/notify/eventsupplier.cxx | 150 |
7 files changed, 139 insertions, 68 deletions
diff --git a/sfx2/inc/sfx2/docstoragemodifylistener.hxx b/sfx2/inc/sfx2/docstoragemodifylistener.hxx index 19521d9e09..2dcf9c1c6b 100644 --- a/sfx2/inc/sfx2/docstoragemodifylistener.hxx +++ b/sfx2/inc/sfx2/docstoragemodifylistener.hxx @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: docstoragemodifylistener.hxx,v $ - * $Revision: 1.4 $ + * $Revision: 1.4.28.1 $ * * This file is part of OpenOffice.org. * @@ -39,6 +39,11 @@ #include <cppuhelper/implbase1.hxx> +namespace vos +{ + class IMutex; +} + //........................................................................ namespace sfx2 { @@ -64,9 +69,10 @@ namespace sfx2 class SFX2_DLLPUBLIC DocumentStorageModifyListener : public DocumentStorageModifyListener_Base { IModifiableDocument* m_pDocument; + ::vos::IMutex& m_rMutex; public: - DocumentStorageModifyListener( IModifiableDocument& _rDocument ); + DocumentStorageModifyListener( IModifiableDocument& _rDocument, ::vos::IMutex& _rMutex ); void dispose(); diff --git a/sfx2/inc/sfx2/evntconf.hxx b/sfx2/inc/sfx2/evntconf.hxx index 4f83c7081f..045c8dd2ba 100644 --- a/sfx2/inc/sfx2/evntconf.hxx +++ b/sfx2/inc/sfx2/evntconf.hxx @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: evntconf.hxx,v $ - * $Revision: 1.3 $ + * $Revision: 1.3.28.1 $ * * This file is part of OpenOffice.org. * @@ -85,10 +85,8 @@ SV_DECL_PTRARR(SfxEventArr_Impl, SfxEvent_Impl*, 5, 5) #define PROP_EVENT_TYPE "EventType" #define PROP_LIBRARY "Library" #define PROP_SCRIPT "Script" -#define PROP_SCRIPT_URL "URL" #define PROP_MACRO_NAME "MacroName" #define STAR_BASIC "StarBasic" -#define JAVA_SCRIPT "JavaScript" // ----------------------------------------------------------------------- //#else diff --git a/sfx2/inc/sfx2/sfxbasemodel.hxx b/sfx2/inc/sfx2/sfxbasemodel.hxx index 7cc75c8eca..76fbe3abc2 100644 --- a/sfx2/inc/sfx2/sfxbasemodel.hxx +++ b/sfx2/inc/sfx2/sfxbasemodel.hxx @@ -8,7 +8,7 @@ * * $RCSfile: sfxbasemodel.hxx,v $ * - * $Revision: 1.14 $ + * $Revision: 1.13.28.1 $ * * This file is part of OpenOffice.org. * diff --git a/sfx2/source/doc/docstoragemodifylistener.cxx b/sfx2/source/doc/docstoragemodifylistener.cxx index 33489622e2..5d3ebf483d 100644 --- a/sfx2/source/doc/docstoragemodifylistener.cxx +++ b/sfx2/source/doc/docstoragemodifylistener.cxx @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: docstoragemodifylistener.cxx,v $ - * $Revision: 1.4 $ + * $Revision: 1.4.28.1 $ * * This file is part of OpenOffice.org. * @@ -32,7 +32,6 @@ #include "precompiled_sfx2.hxx" #include "sfx2/docstoragemodifylistener.hxx" -#include <sfx2/app.hxx> #include <vos/mutex.hxx> /** === begin UNO includes === **/ @@ -60,8 +59,9 @@ namespace sfx2 //= //==================================================================== //-------------------------------------------------------------------- - DocumentStorageModifyListener::DocumentStorageModifyListener( IModifiableDocument& _rDocument ) + DocumentStorageModifyListener::DocumentStorageModifyListener( IModifiableDocument& _rDocument, ::vos::IMutex& _rMutex ) :m_pDocument( &_rDocument ) + ,m_rMutex( _rMutex ) { } @@ -73,14 +73,14 @@ namespace sfx2 //-------------------------------------------------------------------- void DocumentStorageModifyListener::dispose() { - ::vos::OGuard aGuard( Application::GetSolarMutex() ); + ::vos::OGuard aGuard( m_rMutex ); m_pDocument = NULL; } //-------------------------------------------------------------------- void SAL_CALL DocumentStorageModifyListener::modified( const EventObject& /*aEvent*/ ) throw (RuntimeException) { - ::vos::OGuard aGuard( Application::GetSolarMutex() ); + ::vos::OGuard aGuard( m_rMutex ); // storageIsModified must not contain any locking! if ( m_pDocument ) m_pDocument->storageIsModified(); diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx index 1cba3fe0ba..eab78c1198 100644 --- a/sfx2/source/doc/sfxbasemodel.cxx +++ b/sfx2/source/doc/sfxbasemodel.cxx @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: sfxbasemodel.cxx,v $ - * $Revision: 1.145 $ + * $Revision: 1.139.2.5 $ * * This file is part of OpenOffice.org. * @@ -2899,7 +2899,7 @@ void SfxBaseModel::ListenForStorage_Impl( const uno::Reference< embed::XStorage { if ( !m_pData->m_pStorageModifyListen.is() ) { - m_pData->m_pStorageModifyListen = new ::sfx2::DocumentStorageModifyListener( *m_pData ); + m_pData->m_pStorageModifyListen = new ::sfx2::DocumentStorageModifyListener( *m_pData, Application::GetSolarMutex() ); } // no need to deregister the listening for old storage since it should be disposed automatically diff --git a/sfx2/source/inc/eventsupplier.hxx b/sfx2/source/inc/eventsupplier.hxx index a9603eb6ea..4520fd6c3d 100644 --- a/sfx2/source/inc/eventsupplier.hxx +++ b/sfx2/source/inc/eventsupplier.hxx @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: eventsupplier.hxx,v $ - * $Revision: 1.14 $ + * $Revision: 1.14.28.1 $ * * This file is part of OpenOffice.org. * @@ -36,6 +36,8 @@ #include <com/sun/star/container/XSet.hpp> #include <com/sun/star/document/XEventListener.hpp> #include <com/sun/star/document/XEventBroadcaster.hpp> +#include <com/sun/star/document/XDocumentEventBroadcaster.hpp> +#include <com/sun/star/document/XDocumentEventListener.hpp> #include <com/sun/star/document/XEventsSupplier.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/task/XJobExecutor.hpp> @@ -48,7 +50,7 @@ #include <cppuhelper/implbase2.hxx> #include <cppuhelper/implbase3.hxx> #include <cppuhelper/implbase4.hxx> -#include <cppuhelper/implbase5.hxx> +#include <cppuhelper/implbase7.hxx> #include <comphelper/sequenceashashmap.hxx> #include <comphelper/sequenceasvector.hxx> #include <sfx2/sfxuno.hxx> @@ -178,17 +180,20 @@ class ModelCollectionEnumeration : public ModelCollectionMutexBase //============================================================================= class SfxGlobalEvents_Impl : public ModelCollectionMutexBase - , public ::cppu::WeakImplHelper5< ::com::sun::star::lang::XServiceInfo + , public ::cppu::WeakImplHelper7< ::com::sun::star::lang::XServiceInfo , ::com::sun::star::document::XEventsSupplier , ::com::sun::star::document::XEventBroadcaster + , ::com::sun::star::document::XDocumentEventBroadcaster , ::com::sun::star::document::XEventListener + , ::com::sun::star::document::XDocumentEventListener , ::com::sun::star::container::XSet > , public SfxListener { ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xSMGR; ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameReplace > m_xEvents; - ::com::sun::star::uno::WeakReference< ::com::sun::star::task::XJobExecutor > m_xJobsBinding; - OINTERFACECONTAINERHELPER m_aInterfaceContainer; + ::com::sun::star::uno::WeakReference< ::com::sun::star::document::XEventListener > m_xJobExecutorListener; + OINTERFACECONTAINERHELPER m_aLegacyListeners; + OINTERFACECONTAINERHELPER m_aDocumentListeners; TModelList m_lModels; GlobalEventConfig* pImp; @@ -209,10 +214,18 @@ public: virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XEventListener >& xListener) throw(::com::sun::star::uno::RuntimeException); + + // css.document.XDocumentEventBroadcaster + virtual void SAL_CALL addDocumentEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XDocumentEventListener >& _Listener ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeDocumentEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::document::XDocumentEventListener >& _Listener ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL notifyDocumentEvent( const ::rtl::OUString& _EventName, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController2 >& _ViewController, const ::com::sun::star::uno::Any& _Supplement ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); // css.document.XEventListener virtual void SAL_CALL notifyEvent(const ::com::sun::star::document::EventObject& aEvent) throw(::com::sun::star::uno::RuntimeException); + + // css.document.XDocumentEventListener + virtual void SAL_CALL documentEventOccured( const ::com::sun::star::document::DocumentEvent& Event ) throw (::com::sun::star::uno::RuntimeException); // css.container.XSet virtual sal_Bool SAL_CALL has(const ::com::sun::star::uno::Any& aElement) @@ -247,8 +260,8 @@ private: // threadsafe void implts_notifyJobExecution(const ::com::sun::star::document::EventObject& aEvent); - void implts_checkAndExecuteEventBindings(const ::com::sun::star::document::EventObject& aEvent); - void implts_notifyListener(const ::com::sun::star::document::EventObject& aEvent); + void implts_checkAndExecuteEventBindings(const ::com::sun::star::document::DocumentEvent& aEvent); + void implts_notifyListener(const ::com::sun::star::document::DocumentEvent& aEvent); // not threadsafe TModelList::iterator impl_searchDoc(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& xModel); diff --git a/sfx2/source/notify/eventsupplier.cxx b/sfx2/source/notify/eventsupplier.cxx index 6c92cb2ec8..c7f9eb086d 100644 --- a/sfx2/source/notify/eventsupplier.cxx +++ b/sfx2/source/notify/eventsupplier.cxx @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: eventsupplier.cxx,v $ - * $Revision: 1.36 $ + * $Revision: 1.36.12.5 $ * * This file is part of OpenOffice.org. * @@ -83,6 +83,7 @@ void SAL_CALL SfxEvents_Impl::replaceByName( const OUSTRING & aName, const ANY & { ::osl::MutexGuard aGuard( maMutex ); + bool bReset = !rElement.hasValue(); // find the event in the list and replace the data long nCount = maEventNames.getLength(); for ( long i=0; i<nCount; i++ ) @@ -90,34 +91,41 @@ void SAL_CALL SfxEvents_Impl::replaceByName( const OUSTRING & aName, const ANY & if ( maEventNames[i] == aName ) { // check for correct type of the element - if ( ::getCppuType( (const SEQUENCE < PROPERTYVALUE > *)0 ) == rElement.getValueType() ) + if ( bReset || ::getCppuType( (const SEQUENCE < PROPERTYVALUE > *)0 ) == rElement.getValueType() ) { // create Configuration at first, creation might call this method also and that would overwrite everything // we might have stored before! USHORT nID = (USHORT) SfxEventConfiguration::GetEventId_Impl( aName ); if ( nID ) { - ANY aValue; - BlowUpMacro( rElement, aValue, mpObjShell ); - // pConfig becomes the owner of the new SvxMacro if ( mpObjShell && !mpObjShell->IsLoading() ) mpObjShell->SetModified( TRUE ); - SEQUENCE < PROPERTYVALUE > aProperties; - if ( aValue >>= aProperties ) + if ( bReset ) { - ::rtl::OUString aType; - if (( aProperties[0].Name.compareToAscii( PROP_EVENT_TYPE ) == 0 ) && - ( aProperties[0].Value >>= aType ) && - aType.getLength() == 0 ) + maEventData[i] = ANY(); + } + else + { + ANY aValue; + BlowUpMacro( rElement, aValue, mpObjShell ); + + SEQUENCE < PROPERTYVALUE > aProperties; + if ( aValue >>= aProperties ) { - // An empty event type means no binding. Therefore reset data - // to reflect that state. - maEventData[i] = ANY(); + ::rtl::OUString aType; + if (( aProperties[0].Name.compareToAscii( PROP_EVENT_TYPE ) == 0 ) && + ( aProperties[0].Value >>= aType ) && + aType.getLength() == 0 ) + { + // An empty event type means no binding. Therefore reset data + // to reflect that state. + maEventData[i] = ANY(); + } + else + maEventData[i] = aValue; } - else - maEventData[i] = aValue; } } } @@ -197,7 +205,7 @@ sal_Bool SAL_CALL SfxEvents_Impl::hasElements() throw ( RUNTIMEEXCEPTION ) return sal_False; } -static void Execute( ANY& aEventData, SfxObjectShell* pDoc ) +static void Execute( ANY& aEventData, const css::document::DocumentEvent& aTrigger, SfxObjectShell* pDoc ) { SEQUENCE < PROPERTYVALUE > aProperties; if ( aEventData >>= aProperties ) @@ -284,7 +292,11 @@ static void Execute( ANY& aEventData, SfxObjectShell* pDoc ) //aArgs[0].Name = rtl::OUString::createFromAscii("Referer"); //aArs[0].Value <<= ::rtl::OUString( pDoc->GetMedium()->GetName() ); //xDisp->dispatch( aURL, aArgs ); - xDisp->dispatch( aURL, ::com::sun::star::uno::Sequence < ::com::sun::star::beans::PropertyValue >() ); + + css::beans::PropertyValue aEventParam; + aEventParam.Value <<= aTrigger; + css::uno::Sequence< css::beans::PropertyValue > aDispatchArgs( &aEventParam, 1 ); + xDisp->dispatch( aURL, aDispatchArgs ); } } } @@ -326,7 +338,7 @@ void SAL_CALL SfxEvents_Impl::notifyEvent( const DOCEVENTOBJECT& aEvent ) throw( ANY aEventData = maEventData[ nIndex ]; aGuard.clear(); - Execute( aEventData, mpObjShell ); + Execute( aEventData, css::document::DocumentEvent(aEvent.Source, aEvent.EventName, NULL, css::uno::Any()), mpObjShell ); } //-------------------------------------------------------------------------------------------------------- @@ -609,14 +621,15 @@ SFX_IMPL_ONEINSTANCEFACTORY( SfxGlobalEvents_Impl ); SfxGlobalEvents_Impl::SfxGlobalEvents_Impl( const com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory >& xSMGR) : ModelCollectionMutexBase( ) , m_xSMGR (xSMGR ) - , m_aInterfaceContainer (m_aLock) + , m_aLegacyListeners (m_aLock) + , m_aDocumentListeners (m_aLock) , pImp (0 ) { m_refCount++; SFX_APP(); - pImp = new GlobalEventConfig(); - m_xEvents = pImp; - m_xJobsBinding = css::uno::Reference< css::task::XJobExecutor >( + pImp = new GlobalEventConfig(); + m_xEvents = pImp; + m_xJobExecutorListener = css::uno::Reference< css::document::XEventListener >( xSMGR->createInstance(::rtl::OUString::createFromAscii("com.sun.star.task.JobExecutor")), UNO_QUERY); m_refCount--; @@ -660,7 +673,7 @@ void SAL_CALL SfxGlobalEvents_Impl::addEventListener(const css::uno::Reference< throw(css::uno::RuntimeException) { // container is threadsafe - m_aInterfaceContainer.addInterface(xListener); + m_aLegacyListeners.addInterface(xListener); } //----------------------------------------------------------------------------- @@ -668,16 +681,49 @@ void SAL_CALL SfxGlobalEvents_Impl::removeEventListener(const css::uno::Referenc throw(css::uno::RuntimeException) { // container is threadsafe - m_aInterfaceContainer.removeInterface(xListener); + m_aLegacyListeners.removeInterface(xListener); +} + +//----------------------------------------------------------------------------- +void SAL_CALL SfxGlobalEvents_Impl::addDocumentEventListener( const css::uno::Reference< css::document::XDocumentEventListener >& _Listener ) + throw(css::uno::RuntimeException) +{ + m_aDocumentListeners.addInterface( _Listener ); +} + +//----------------------------------------------------------------------------- +void SAL_CALL SfxGlobalEvents_Impl::removeDocumentEventListener( const css::uno::Reference< css::document::XDocumentEventListener >& _Listener ) + throw(css::uno::RuntimeException) +{ + m_aDocumentListeners.removeInterface( _Listener ); +} + +//----------------------------------------------------------------------------- +void SAL_CALL SfxGlobalEvents_Impl::notifyDocumentEvent( const ::rtl::OUString& /*_EventName*/, + const css::uno::Reference< css::frame::XController2 >& /*_ViewController*/, const css::uno::Any& /*_Supplement*/ ) + throw (css::lang::IllegalArgumentException, css::lang::NoSupportException, css::uno::RuntimeException) +{ + // we're a multiplexer only, no change to generate artifical events here + throw css::lang::NoSupportException(::rtl::OUString(), *this); } //----------------------------------------------------------------------------- void SAL_CALL SfxGlobalEvents_Impl::notifyEvent(const css::document::EventObject& aEvent) throw(css::uno::RuntimeException) { + css::document::DocumentEvent aDocEvent(aEvent.Source, aEvent.EventName, NULL, css::uno::Any()); implts_notifyJobExecution(aEvent); - implts_checkAndExecuteEventBindings(aEvent); - implts_notifyListener(aEvent); + implts_checkAndExecuteEventBindings(aDocEvent); + implts_notifyListener(aDocEvent); +} + +//----------------------------------------------------------------------------- +void SAL_CALL SfxGlobalEvents_Impl::documentEventOccured( const ::css::document::DocumentEvent& _Event ) + throw (::css::uno::RuntimeException) +{ + implts_notifyJobExecution(css::document::EventObject(_Event.Source, _Event.EventName)); + implts_checkAndExecuteEventBindings(_Event); + implts_notifyListener(_Event); } //----------------------------------------------------------------------------- @@ -740,9 +786,16 @@ void SAL_CALL SfxGlobalEvents_Impl::insert( const css::uno::Any& aElement ) aLock.clear(); // <- SAFE - css::uno::Reference< css::document::XEventBroadcaster > xDocBroadcast(xDoc, UNO_QUERY); - if (xDocBroadcast.is()) - xDocBroadcast->addEventListener(static_cast< css::document::XEventListener* >(this)); + css::uno::Reference< css::document::XDocumentEventBroadcaster > xDocBroadcaster(xDoc, UNO_QUERY ); + if (xDocBroadcaster.is()) + xDocBroadcaster->addDocumentEventListener(this); + else + { + // try the "legacy version" of XDocumentEventBroadcaster, which is XEventBroadcaster + css::uno::Reference< css::document::XEventBroadcaster > xBroadcaster(xDoc, UNO_QUERY); + if (xBroadcaster.is()) + xBroadcaster->addEventListener(static_cast< css::document::XEventListener* >(this)); + } } //----------------------------------------------------------------------------- @@ -770,9 +823,16 @@ void SAL_CALL SfxGlobalEvents_Impl::remove( const css::uno::Any& aElement ) aLock.clear(); // <- SAFE - css::uno::Reference< css::document::XEventBroadcaster > xDocBroadcast(xDoc, UNO_QUERY); - if (xDocBroadcast.is()) - xDocBroadcast->removeEventListener(static_cast< css::document::XEventListener* >(this)); + css::uno::Reference< css::document::XDocumentEventBroadcaster > xDocBroadcaster(xDoc, UNO_QUERY ); + if (xDocBroadcaster.is()) + xDocBroadcaster->removeDocumentEventListener(this); + else + { + // try the "legacy version" of XDocumentEventBroadcaster, which is XEventBroadcaster + css::uno::Reference< css::document::XEventBroadcaster > xBroadcaster(xDoc, UNO_QUERY); + if (xBroadcaster.is()) + xBroadcaster->removeEventListener(static_cast< css::document::XEventListener* >(this)); + } } //----------------------------------------------------------------------------- @@ -816,7 +876,7 @@ void SfxGlobalEvents_Impl::implts_notifyJobExecution(const css::document::EventO { // SAFE -> ::osl::ResettableMutexGuard aLock(m_aLock); - css::uno::Reference< css::document::XEventListener > xJobExecutor(m_xJobsBinding.get(), UNO_QUERY); + css::uno::Reference< css::document::XEventListener > xJobExecutor(m_xJobExecutorListener); aLock.clear(); // <- SAFE if (xJobExecutor.is()) @@ -829,7 +889,7 @@ void SfxGlobalEvents_Impl::implts_notifyJobExecution(const css::document::EventO } //----------------------------------------------------------------------------- -void SfxGlobalEvents_Impl::implts_checkAndExecuteEventBindings(const css::document::EventObject& aEvent) +void SfxGlobalEvents_Impl::implts_checkAndExecuteEventBindings(const css::document::DocumentEvent& aEvent) { try { @@ -842,7 +902,7 @@ void SfxGlobalEvents_Impl::implts_checkAndExecuteEventBindings(const css::docume css::uno::Any aAny; if (xEvents.is()) aAny = xEvents->getByName(aEvent.EventName); - Execute(aAny, 0); + Execute(aAny, aEvent, 0); } catch(const css::uno::RuntimeException& exRun) { throw exRun; } @@ -851,19 +911,13 @@ void SfxGlobalEvents_Impl::implts_checkAndExecuteEventBindings(const css::docume } //----------------------------------------------------------------------------- -void SfxGlobalEvents_Impl::implts_notifyListener(const css::document::EventObject& aEvent) +void SfxGlobalEvents_Impl::implts_notifyListener(const css::document::DocumentEvent& aEvent) { - // container is threadsafe - ::cppu::OInterfaceIteratorHelper aIt(m_aInterfaceContainer); - while (aIt.hasMoreElements()) - { - try - { - ((css::document::XEventListener*)aIt.next())->notifyEvent(aEvent); - } - catch(const css::uno::Exception&) - { aIt.remove(); } - } + // containers are threadsafe + css::document::EventObject aLegacyEvent(aEvent.Source, aEvent.EventName); + m_aLegacyListeners.notifyEach( &css::document::XEventListener::notifyEvent, aLegacyEvent ); + + m_aDocumentListeners.notifyEach( &css::document::XDocumentEventListener::documentEventOccured, aEvent ); } //----------------------------------------------------------------------------- |