summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/unotools/eventcfg.hxx3
-rw-r--r--sfx2/source/inc/eventsupplier.hxx4
-rw-r--r--sfx2/source/notify/eventsupplier.cxx14
-rw-r--r--sfx2/source/notify/globalevents.cxx12
-rw-r--r--unotools/source/config/eventcfg.cxx12
5 files changed, 24 insertions, 21 deletions
diff --git a/include/unotools/eventcfg.hxx b/include/unotools/eventcfg.hxx
index 5999d0bc1ea3..7ddca4a96be0 100644
--- a/include/unotools/eventcfg.hxx
+++ b/include/unotools/eventcfg.hxx
@@ -20,6 +20,7 @@
#define INCLUDED_UNOTOOLS_EVENTCFG_HXX
#include <unotools/unotoolsdllapi.h>
+#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/document/XEventsSupplier.hpp>
#include <com/sun/star/container/XNameReplace.hpp>
#include <cppuhelper/implbase.hxx>
@@ -75,6 +76,8 @@ class UNOTOOLS_DLLPUBLIC GlobalEventConfig final :
sal_Bool SAL_CALL hasElements( ) override;
static OUString GetEventName( GlobalEventId nID );
+ css::uno::Sequence < css::beans::PropertyValue > getByName2( const OUString& aName );
+
private:
static GlobalEventConfig_Impl* m_pImpl;
static sal_Int32 m_nRefCount;
diff --git a/sfx2/source/inc/eventsupplier.hxx b/sfx2/source/inc/eventsupplier.hxx
index 0a6c1a971daf..56aa8f95e75f 100644
--- a/sfx2/source/inc/eventsupplier.hxx
+++ b/sfx2/source/inc/eventsupplier.hxx
@@ -44,7 +44,7 @@ class SvxMacro;
class SfxEvents_Impl final : public ::cppu::WeakImplHelper< css::container::XNameReplace, css::document::XDocumentEventListener >
{
css::uno::Sequence< OUString > maEventNames;
- std::vector< css::uno::Any > maEventData;
+ std::vector< css::uno::Sequence < css::beans::PropertyValue > > maEventData;
css::uno::Reference< css::document::XDocumentEventBroadcaster > mxBroadcaster;
std::mutex maMutex;
SfxObjectShell *mpObjShell;
@@ -79,7 +79,7 @@ public:
const ::comphelper::NamedValueCollection& i_eventDescriptor,
::comphelper::NamedValueCollection& o_normalizedDescriptor,
SfxObjectShell* i_document );
- static void Execute( css::uno::Any const & aEventData, const css::document::DocumentEvent& aTrigger, SfxObjectShell* pDoc );
+ static void Execute( css::uno::Sequence < css::beans::PropertyValue > const & aEventData, const css::document::DocumentEvent& aTrigger, SfxObjectShell* pDoc );
private:
/// Check if script URL whitelist exists, and if so, if current script url is part of it
diff --git a/sfx2/source/notify/eventsupplier.cxx b/sfx2/source/notify/eventsupplier.cxx
index 7ac2fd7d830d..d6bff98de8f0 100644
--- a/sfx2/source/notify/eventsupplier.cxx
+++ b/sfx2/source/notify/eventsupplier.cxx
@@ -98,11 +98,11 @@ void SAL_CALL SfxEvents_Impl::replaceByName( const OUString & aName, const uno::
if ( !aNormalizedDescriptor.empty() )
{
- maEventData[nIndex] <<= aNormalizedDescriptor.getPropertyValues();
+ maEventData[nIndex] = aNormalizedDescriptor.getPropertyValues();
}
else
{
- maEventData[nIndex].clear();
+ maEventData[nIndex] = {};
}
}
@@ -117,7 +117,7 @@ uno::Any SAL_CALL SfxEvents_Impl::getByName( const OUString& aName )
auto nIndex = comphelper::findValue(maEventNames, aName);
if (nIndex != -1)
- return maEventData[nIndex];
+ return uno::Any(maEventData[nIndex]);
throw container::NoSuchElementException();
}
@@ -180,12 +180,8 @@ bool SfxEvents_Impl::isScriptURLAllowed(const OUString& aScriptURL)
return false;
}
-void SfxEvents_Impl::Execute( uno::Any const & aEventData, const document::DocumentEvent& aTrigger, SfxObjectShell* pDoc )
+void SfxEvents_Impl::Execute( css::uno::Sequence < css::beans::PropertyValue > const & aProperties, const document::DocumentEvent& aTrigger, SfxObjectShell* pDoc )
{
- uno::Sequence < beans::PropertyValue > aProperties;
- if ( !(aEventData >>= aProperties) )
- return;
-
OUString aType;
OUString aScript;
OUString aLibrary;
@@ -292,7 +288,7 @@ void SAL_CALL SfxEvents_Impl::documentEventOccured( const document::DocumentEven
if ( nIndex == -1 )
return;
- uno::Any aEventData = maEventData[ nIndex ];
+ css::uno::Sequence < css::beans::PropertyValue > aEventData = maEventData[ nIndex ];
aGuard.unlock();
Execute( aEventData, aEvent, mpObjShell );
}
diff --git a/sfx2/source/notify/globalevents.cxx b/sfx2/source/notify/globalevents.cxx
index 87564e74ed65..cd6b08007115 100644
--- a/sfx2/source/notify/globalevents.cxx
+++ b/sfx2/source/notify/globalevents.cxx
@@ -35,6 +35,7 @@
#include <comphelper/interfacecontainer4.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <comphelper/enumhelper.hxx>
+#include <rtl/ref.hxx>
#include <sfx2/app.hxx>
#include <tools/diagnose_ex.h>
#include <unotools/eventcfg.hxx>
@@ -60,7 +61,7 @@ class SfxGlobalEvents_Impl : public ::cppu::WeakImplHelper< css::lang::XServiceI
>
{
std::mutex m_aLock;
- css::uno::Reference< css::container::XNameReplace > m_xEvents;
+ rtl::Reference< GlobalEventConfig > m_xEvents;
css::uno::Reference< css::document::XEventListener > m_xJobExecutorListener;
::comphelper::OInterfaceContainerHelper4<document::XEventListener> m_aLegacyListeners;
::comphelper::OInterfaceContainerHelper4<document::XDocumentEventListener> m_aDocumentListeners;
@@ -448,7 +449,7 @@ void SfxGlobalEvents_Impl::implts_notifyJobExecution(const document::EventObject
void SfxGlobalEvents_Impl::implts_checkAndExecuteEventBindings(const document::DocumentEvent& aEvent)
{
- css::uno::Reference<css::container::XNameReplace> events;
+ rtl::Reference<GlobalEventConfig> events;
{
std::scoped_lock g(m_aLock);
events = m_xEvents;
@@ -458,10 +459,11 @@ void SfxGlobalEvents_Impl::implts_checkAndExecuteEventBindings(const document::D
}
try
{
- uno::Any aAny;
if ( events->hasByName( aEvent.EventName ) )
- aAny = events->getByName(aEvent.EventName);
- SfxEvents_Impl::Execute(aAny, aEvent, nullptr);
+ {
+ uno::Sequence < beans::PropertyValue > aAny = events->getByName2(aEvent.EventName);
+ SfxEvents_Impl::Execute(aAny, aEvent, nullptr);
+ }
}
catch ( uno::RuntimeException const & )
{
diff --git a/unotools/source/config/eventcfg.cxx b/unotools/source/config/eventcfg.cxx
index 0c0f87ed4624..fb1eb948a47b 100644
--- a/unotools/source/config/eventcfg.cxx
+++ b/unotools/source/config/eventcfg.cxx
@@ -111,7 +111,7 @@ public:
/// @throws css::container::NoSuchElementException
/// @throws css::lang::WrappedTargetException
/// @throws css::uno::RuntimeException
- css::uno::Any getByName( const OUString& aName );
+ css::uno::Sequence < css::beans::PropertyValue > getByName( const OUString& aName );
/// @throws css::uno::RuntimeException
css::uno::Sequence< OUString > getElementNames( );
/// @throws css::uno::RuntimeException
@@ -238,9 +238,8 @@ void GlobalEventConfig_Impl::replaceByName( const OUString& aName, const Any& aE
SetModified();
}
-Any GlobalEventConfig_Impl::getByName( const OUString& aName )
+css::uno::Sequence < css::beans::PropertyValue > GlobalEventConfig_Impl::getByName( const OUString& aName )
{
- Any aRet;
Sequence< beans::PropertyValue > props(2);
auto pProps = props.getArray();
pProps[0].Name = "EventType";
@@ -261,8 +260,7 @@ Any GlobalEventConfig_Impl::getByName( const OUString& aName )
pProps[1].Value <<= OUString();
}
- aRet <<= props;
- return aRet;
+ return props;
}
Sequence< OUString > GlobalEventConfig_Impl::getElementNames( )
@@ -342,6 +340,10 @@ void SAL_CALL GlobalEventConfig::replaceByName( const OUString& aName, const Any
}
Any SAL_CALL GlobalEventConfig::getByName( const OUString& aName )
{
+ return Any(getByName2(aName));
+}
+css::uno::Sequence < css::beans::PropertyValue > GlobalEventConfig::getByName2( const OUString& aName )
+{
std::unique_lock aGuard( GetOwnStaticMutex() );
return m_pImpl->getByName( aName );
}