Kaydet (Commit) 98bb53a5 authored tarafından Matúš Kukan's avatar Matúš Kukan Kaydeden (comit) Stephan Bergmann

fdo#80927: css.office.Quickstart should be single-instance service.

Incorrectly converted in a384b21c
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 <singleton name="com.sun.star.office.theQuickstart"/> 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
  874c4818 "Simplify service manager's tracking
  of singletons" and wasn't intended to serve some subtle purpose.

Change-Id: Icd4d3168ec0bbb820b17ac321fe897ac9f9ce7fc
üst deed6dca
......@@ -711,7 +711,6 @@ cppuhelper::ServiceManager::Data::Implementation::createInstanceWithArguments(
if (init.is()) {
init->initialize(arguments);
}
return inst;
} else if (factory1.is()) {
inst = factory1->createInstanceWithArgumentsAndContext(
arguments, context);
......
......@@ -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<css::uno::XComponentContext> const & context):
instance(static_cast<cppu::OWeakObject *>(new ShutdownIcon(context)))
{}
rtl::Reference<css::uno::XInterface> instance;
};
struct Singleton:
public rtl::StaticWithArg<
Instance, css::uno::Reference<css::uno::XComponentContext>, 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<css::uno::Any> const &)
{
return cppu::acquire(new ShutdownIcon(context));
return cppu::acquire(static_cast<cppu::OWeakObject *>(
Singleton::get(context).instance.get()));
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -35,6 +35,7 @@
<implementation name="com.sun.star.comp.desktop.QuickstartWrapper"
constructor="com_sun_star_comp_desktop_QuickstartWrapper_get_implementation">
<service name="com.sun.star.office.Quickstart"/>
<singleton name="com.sun.star.office.theQuickstart"/>
</implementation>
<implementation name="com.sun.star.comp.document.OwnSubFilter"
constructor="com_sun_star_comp_document_OwnSubFilter_get_implementation">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment