diff options
-rw-r--r-- | desktop/source/app/app.cxx | 7 | ||||
-rw-r--r-- | scripting/source/basprov/basprov.cxx | 15 | ||||
-rw-r--r-- | scripting/source/basprov/basprov.hxx | 7 |
3 files changed, 21 insertions, 8 deletions
diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx index 0cc6c649e7e1..fa8204304f53 100644 --- a/desktop/source/app/app.cxx +++ b/desktop/source/app/app.cxx @@ -1686,13 +1686,6 @@ int Desktop::doShutdown() if ( pExecGlobals->bRestartRequested ) SetRestartState(); - if (pExecGlobals->xGlobalBroadcaster.is()) - { - css::document::DocumentEvent aEvent; - aEvent.EventName = "OnCloseApp"; - pExecGlobals->xGlobalBroadcaster->documentEventOccured(aEvent); - } - // Restore old value const CommandLineArgs& rCmdLineArgs = GetCommandLineArgs(); if ( rCmdLineArgs.IsHeadless() || rCmdLineArgs.IsEventTesting() ) diff --git a/scripting/source/basprov/basprov.cxx b/scripting/source/basprov/basprov.cxx index f1805c36a16e..6c856d5a5a24 100644 --- a/scripting/source/basprov/basprov.cxx +++ b/scripting/source/basprov/basprov.cxx @@ -158,6 +158,17 @@ namespace basprov return bIsShared; } + // SfxListener + void BasicProviderImpl::Notify(SfxBroadcaster& rBC, const SfxHint& rHint) + { + if (auto pManager = dynamic_cast<const BasicManager*>(&rBC)) + if (pManager == m_pAppBasicManager && rHint.GetId() == SfxHintId::Dying) + { + EndListening(*m_pAppBasicManager); + m_pAppBasicManager = nullptr; + } + } + // XServiceInfo OUString BasicProviderImpl::getImplementationName( ) { @@ -258,7 +269,11 @@ namespace basprov // TODO if ( !m_pAppBasicManager ) + { m_pAppBasicManager = SfxApplication::GetBasicManager(); + if (m_pAppBasicManager) + StartListening(*m_pAppBasicManager); + } if ( !m_xLibContainerApp.is() ) m_xLibContainerApp.set( SfxGetpApp()->GetBasicContainer(), UNO_QUERY ); diff --git a/scripting/source/basprov/basprov.hxx b/scripting/source/basprov/basprov.hxx index b3ba2617982c..d10f10e7e970 100644 --- a/scripting/source/basprov/basprov.hxx +++ b/scripting/source/basprov/basprov.hxx @@ -29,6 +29,7 @@ #include <com/sun/star/document/XScriptInvocationContext.hpp> #include <com/sun/star/uno/XComponentContext.hpp> #include <cppuhelper/implbase.hxx> +#include <svl/lstner.hxx> class BasicManager; @@ -47,7 +48,7 @@ namespace basprov css::script::browse::XBrowseNode > BasicProviderImpl_BASE; - class BasicProviderImpl : public BasicProviderImpl_BASE + class BasicProviderImpl : public BasicProviderImpl_BASE, public SfxListener { private: BasicManager* m_pAppBasicManager; @@ -86,6 +87,10 @@ namespace basprov virtual css::uno::Sequence< css::uno::Reference< css::script::browse::XBrowseNode > > SAL_CALL getChildNodes( ) override; virtual sal_Bool SAL_CALL hasChildNodes( ) override; virtual sal_Int16 SAL_CALL getType( ) override; + + protected: + // SfxListener + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override; }; |