From 98bb53a5609f8651b0841e8326d7aa53fd56ab3b Mon Sep 17 00:00:00 2001 From: Matúš Kukan Date: Thu, 2 Oct 2014 15:15:28 +0200 Subject: fdo#80927: css.office.Quickstart should be single-instance service. Incorrectly converted in a384b21cc40818bf3c918951a086a30b5d9d8022 where SFX_IMPL_ONEINSTANCEFACTORY was used. AFAICS it's the first converted single-instance service which implements css::lang::XInitialization. That's kind of strange but can do its job. sbergman@redhat.com: Three things were necessary in order to not call the ~ShutdownIcon code too late during exit now: * Move the relevant code from ~ShutdownIcon to ShutdownIcon::disposing. * Add a dummy so the service manager will eventually dispose the (single) instance. * In cppuhelper::ServiceManager::Data::Implementation::createInstanceWithArguments do not shortcut updateDisposeSingleton in that odd case of calling createInstanceWithArguments on an implementation that (effectively) is a singleton (as otherwise the service manager would still not dispose it). It looks to me like that "return inst;" was an inadvertent leftover in 874c481801434d4fac3c50f076bff0fe3a3988b6 "Simplify service manager's tracking of singletons" and wasn't intended to serve some subtle purpose. Change-Id: Icd4d3168ec0bbb820b17ac321fe897ac9f9ce7fc --- sfx2/source/appl/shutdownicon.cxx | 23 ++++++++++++++++++++++- sfx2/util/sfx.component | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) (limited to 'sfx2') diff --git a/sfx2/source/appl/shutdownicon.cxx b/sfx2/source/appl/shutdownicon.cxx index 6bd93b18e088..f8f0e2a42ab1 100644 --- a/sfx2/source/appl/shutdownicon.cxx +++ b/sfx2/source/appl/shutdownicon.cxx @@ -600,6 +600,8 @@ void SAL_CALL ShutdownIcon::disposing() { m_xContext.clear(); m_xDesktop.clear(); + + deInitSystray(); } @@ -903,12 +905,31 @@ void SAL_CALL ShutdownIcon::setFastPropertyValue( ::sal_Int32 return aValue; } +namespace { + +struct Instance { + explicit Instance( + css::uno::Reference const & context): + instance(static_cast(new ShutdownIcon(context))) + {} + + rtl::Reference instance; +}; + +struct Singleton: + public rtl::StaticWithArg< + Instance, css::uno::Reference, Singleton> +{}; + +} + extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL com_sun_star_comp_desktop_QuickstartWrapper_get_implementation( css::uno::XComponentContext *context, css::uno::Sequence const &) { - return cppu::acquire(new ShutdownIcon(context)); + return cppu::acquire(static_cast( + Singleton::get(context).instance.get())); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sfx2/util/sfx.component b/sfx2/util/sfx.component index 203acc89bee1..91002da21f2a 100644 --- a/sfx2/util/sfx.component +++ b/sfx2/util/sfx.component @@ -35,6 +35,7 @@ + -- cgit