summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorMatúš Kukan <matus.kukan@collabora.com>2014-01-22 18:39:49 +0100
committerMatúš Kukan <matus.kukan@collabora.com>2014-02-11 11:28:55 +0100
commitc864bd31056677277919078c4fd04966ef8b14de (patch)
treec448db016034a15a6e40c6fd4f0b00a9ecafde32 /framework
parent72139db6b421fea2980e9c8df96bc70463777623 (diff)
fwk: Constructor feature for one instance ContextChangeEventMultiplexer.
Change-Id: Ibb89e4dd46fc5d1f8a85f96b7e4677fa764bb112
Diffstat (limited to 'framework')
-rw-r--r--framework/inc/services/ContextChangeEventMultiplexer.hxx139
-rw-r--r--framework/source/register/registerservices.cxx5
-rw-r--r--framework/source/services/ContextChangeEventMultiplexer.cxx173
-rw-r--r--framework/util/fwk.component3
4 files changed, 117 insertions, 203 deletions
diff --git a/framework/inc/services/ContextChangeEventMultiplexer.hxx b/framework/inc/services/ContextChangeEventMultiplexer.hxx
deleted file mode 100644
index 1d7e2b150973..000000000000
--- a/framework/inc/services/ContextChangeEventMultiplexer.hxx
+++ /dev/null
@@ -1,139 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef INCLUDED_FRAMEWORK_INC_SERVICES_CONTEXTCHANGEEVENTMULTIPLEXER_HXX
-#define INCLUDED_FRAMEWORK_INC_SERVICES_CONTEXTCHANGEEVENTMULTIPLEXER_HXX
-
-#include <com/sun/star/ui/XContextChangeEventMultiplexer.hpp>
-
-#include <cppuhelper/compbase4.hxx>
-#include <cppuhelper/basemutex.hxx>
-
-#include "macros/xserviceinfo.hxx"
-
-#include <map>
-#include <boost/noncopyable.hpp>
-
-
-namespace
-{
- typedef ::cppu::WeakComponentImplHelper4 <
- css::ui::XContextChangeEventMultiplexer,
- css::lang::XSingleComponentFactory,
- css::lang::XServiceInfo,
- css::lang::XEventListener
- > ContextChangeEventMultiplexerInterfaceBase;
-}
-
-
-namespace cssu = ::com::sun::star::uno;
-namespace cssl = ::com::sun::star::lang;
-
-namespace framework {
-
-class ContextChangeEventMultiplexer
- : private ::boost::noncopyable,
- private ::cppu::BaseMutex,
- public ContextChangeEventMultiplexerInterfaceBase
-{
-public:
- ContextChangeEventMultiplexer(const cssu::Reference<css::uno::XComponentContext>& rxContext);
- virtual ~ContextChangeEventMultiplexer (void);
-
- virtual void SAL_CALL disposing (void);
-
- // XContextChangeEventMultiplexer
- virtual void SAL_CALL addContextChangeEventListener (
- const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener,
- const cssu::Reference<cssu::XInterface>& rxEventFocus)
- throw(cssu::RuntimeException, cssl::IllegalArgumentException);
- virtual void SAL_CALL removeContextChangeEventListener (
- const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener,
- const cssu::Reference<cssu::XInterface>& rxEventFocus)
- throw(cssu::RuntimeException, cssl::IllegalArgumentException);
- virtual void SAL_CALL removeAllContextChangeEventListeners (
- const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener)
- throw(cssu::RuntimeException, cssl::IllegalArgumentException);
- virtual void SAL_CALL broadcastContextChangeEvent (
- const css::ui::ContextChangeEventObject& rContextChangeEventObject,
- const cssu::Reference<cssu::XInterface>& rxEventFocus)
- throw(cssu::RuntimeException);
-
- // XSingleComponentFactory
- virtual cssu::Reference<cssu::XInterface> SAL_CALL createInstanceWithContext (
- const cssu::Reference<cssu::XComponentContext>& rxContext)
- throw (cssu::Exception, cssu::RuntimeException);
- virtual cssu::Reference<cssu::XInterface > SAL_CALL createInstanceWithArgumentsAndContext (
- const cssu::Sequence<cssu::Any>& rArguments,
- const cssu::Reference<cssu::XComponentContext>& rxContext)
- throw (cssu::Exception, cssu::RuntimeException);
-
- // XServiceInfo
- virtual ::rtl::OUString SAL_CALL getImplementationName (void)
- throw (cssu::RuntimeException);
- virtual sal_Bool SAL_CALL supportsService (
- const ::rtl::OUString& rsServiceName)
- throw (cssu::RuntimeException);
- virtual cssu::Sequence< ::rtl::OUString> SAL_CALL getSupportedServiceNames (void)
- throw (cssu::RuntimeException);
-
- // XEventListener
- virtual void SAL_CALL disposing (
- const css::lang::EventObject& rEvent)
- throw (cssu::RuntimeException);
-
- static ::rtl::OUString SAL_CALL impl_getStaticImplementationName (void);
- static cssu::Reference<cssu::XInterface> SAL_CALL impl_createFactory (
- const cssu::Reference<cssl::XMultiServiceFactory>& xServiceManager);
-
-private:
- typedef ::std::vector<cssu::Reference<css::ui::XContextChangeEventListener> > ListenerContainer;
- class FocusDescriptor
- {
- public:
- ListenerContainer maListeners;
- ::rtl::OUString msCurrentApplicationName;
- ::rtl::OUString msCurrentContextName;
- };
- typedef ::std::map<cssu::Reference<cssu::XInterface>, FocusDescriptor> ListenerMap;
- ListenerMap maListeners;
-
- /** Notify all listeners in the container that is associated with
- the given event focus.
-
- Typically called twice from broadcastEvent(), once for the
- given event focus and onece for NULL.
- */
- void BroadcastEventToSingleContainer (
- const css::ui::ContextChangeEventObject& rEventObject,
- const cssu::Reference<cssu::XInterface>& rxEventFocus);
- FocusDescriptor* GetFocusDescriptor (
- const cssu::Reference<cssu::XInterface>& rxEventFocus,
- const bool bCreateWhenMissing);
-
- static cssu::Sequence< ::rtl::OUString > SAL_CALL static_GetSupportedServiceNames (void);
- static cssu::Reference<cssu::XInterface> SAL_CALL static_CreateInstance (
- const cssu::Reference<cssu::XComponentContext>& rxComponentContext)
- throw (cssu::Exception);
-};
-
-} // end of namespace framework
-
-#endif
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/framework/source/register/registerservices.cxx b/framework/source/register/registerservices.cxx
index 06735d518561..c0d5cf3583a1 100644
--- a/framework/source/register/registerservices.cxx
+++ b/framework/source/register/registerservices.cxx
@@ -35,11 +35,8 @@
=================================================================================================================*/
#include <services/desktop.hxx>
-#include <services/ContextChangeEventMultiplexer.hxx>
-
COMPONENTGETFACTORY ( fwk,
- IFFACTORY( ::framework::Desktop ) else
- IFFACTORY( ::framework::ContextChangeEventMultiplexer )
+ IFFACTORY( ::framework::Desktop )
)
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/framework/source/services/ContextChangeEventMultiplexer.cxx b/framework/source/services/ContextChangeEventMultiplexer.cxx
index 53c319efe5b0..5bdcaf03f33f 100644
--- a/framework/source/services/ContextChangeEventMultiplexer.cxx
+++ b/framework/source/services/ContextChangeEventMultiplexer.cxx
@@ -17,25 +17,107 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include "services/ContextChangeEventMultiplexer.hxx"
-#include "services.h"
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/lang/XEventListener.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/ui/XContextChangeEventMultiplexer.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+#include <cppuhelper/compbase3.hxx>
#include <cppuhelper/supportsservice.hxx>
+#include <cppuhelper/basemutex.hxx>
+
+#include <algorithm>
+#include <map>
+#include <vector>
+#include <boost/noncopyable.hpp>
-using ::rtl::OUString;
+namespace cssl = css::lang;
+namespace cssu = css::uno;
using namespace css;
-using namespace cssu;
+using namespace css::uno;
-namespace framework {
+namespace {
-#define IMPLEMENTATION_NAME "org.apache.openoffice.comp.framework.ContextChangeEventMultiplexer"
+typedef ::cppu::WeakComponentImplHelper3 <
+ css::ui::XContextChangeEventMultiplexer,
+ css::lang::XServiceInfo,
+ css::lang::XEventListener
+ > ContextChangeEventMultiplexerInterfaceBase;
-ContextChangeEventMultiplexer::ContextChangeEventMultiplexer (
- const cssu::Reference<cssu::XComponentContext>& rxContext)
+class ContextChangeEventMultiplexer
+ : private ::boost::noncopyable,
+ private ::cppu::BaseMutex,
+ public ContextChangeEventMultiplexerInterfaceBase
+{
+public:
+ ContextChangeEventMultiplexer();
+ virtual ~ContextChangeEventMultiplexer (void);
+
+ virtual void SAL_CALL disposing (void);
+
+ // XContextChangeEventMultiplexer
+ virtual void SAL_CALL addContextChangeEventListener (
+ const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener,
+ const cssu::Reference<cssu::XInterface>& rxEventFocus)
+ throw(cssu::RuntimeException, cssl::IllegalArgumentException);
+ virtual void SAL_CALL removeContextChangeEventListener (
+ const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener,
+ const cssu::Reference<cssu::XInterface>& rxEventFocus)
+ throw(cssu::RuntimeException, cssl::IllegalArgumentException);
+ virtual void SAL_CALL removeAllContextChangeEventListeners (
+ const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener)
+ throw(cssu::RuntimeException, cssl::IllegalArgumentException);
+ virtual void SAL_CALL broadcastContextChangeEvent (
+ const css::ui::ContextChangeEventObject& rContextChangeEventObject,
+ const cssu::Reference<cssu::XInterface>& rxEventFocus)
+ throw(cssu::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName (void)
+ throw (cssu::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService (
+ const ::rtl::OUString& rsServiceName)
+ throw (cssu::RuntimeException);
+ virtual cssu::Sequence< ::rtl::OUString> SAL_CALL getSupportedServiceNames (void)
+ throw (cssu::RuntimeException);
+
+ // XEventListener
+ virtual void SAL_CALL disposing (
+ const css::lang::EventObject& rEvent)
+ throw (cssu::RuntimeException);
+
+private:
+ typedef ::std::vector<cssu::Reference<css::ui::XContextChangeEventListener> > ListenerContainer;
+ class FocusDescriptor
+ {
+ public:
+ ListenerContainer maListeners;
+ ::rtl::OUString msCurrentApplicationName;
+ ::rtl::OUString msCurrentContextName;
+ };
+ typedef ::std::map<cssu::Reference<cssu::XInterface>, FocusDescriptor> ListenerMap;
+ ListenerMap maListeners;
+
+ /** Notify all listeners in the container that is associated with
+ the given event focus.
+
+ Typically called twice from broadcastEvent(), once for the
+ given event focus and onece for NULL.
+ */
+ void BroadcastEventToSingleContainer (
+ const css::ui::ContextChangeEventObject& rEventObject,
+ const cssu::Reference<cssu::XInterface>& rxEventFocus);
+ FocusDescriptor* GetFocusDescriptor (
+ const cssu::Reference<cssu::XInterface>& rxEventFocus,
+ const bool bCreateWhenMissing);
+};
+
+ContextChangeEventMultiplexer::ContextChangeEventMultiplexer()
: ContextChangeEventMultiplexerInterfaceBase(m_aMutex),
maListeners()
{
- (void)rxContext;
}
ContextChangeEventMultiplexer::~ContextChangeEventMultiplexer (void)
@@ -229,30 +311,10 @@ ContextChangeEventMultiplexer::FocusDescriptor* ContextChangeEventMultiplexer::G
return NULL;
}
-// XSingleComponentFactory
-cssu::Reference<cssu::XInterface> SAL_CALL ContextChangeEventMultiplexer::createInstanceWithContext (
- const cssu::Reference<cssu::XComponentContext>& rxContext)
- throw (cssu::Exception, cssu::RuntimeException)
-{
- (void)rxContext;
- return cssu::Reference<cssu::XInterface>();
-}
-
-cssu::Reference<cssu::XInterface > SAL_CALL ContextChangeEventMultiplexer::createInstanceWithArgumentsAndContext (
- const cssu::Sequence<cssu::Any>& rArguments,
- const cssu::Reference<cssu::XComponentContext>& rxContext)
- throw (cssu::Exception, cssu::RuntimeException)
-{
- (void)rArguments;
- (void)rxContext;
- return cssu::Reference<cssu::XInterface>();
-}
-
-// XServiceInfo
-::rtl::OUString SAL_CALL ContextChangeEventMultiplexer::getImplementationName (void)
+OUString SAL_CALL ContextChangeEventMultiplexer::getImplementationName()
throw(cssu::RuntimeException)
{
- return impl_getStaticImplementationName();
+ return OUString("org.apache.openoffice.comp.framework.ContextChangeEventMultiplexer");
}
sal_Bool SAL_CALL ContextChangeEventMultiplexer::supportsService ( const ::rtl::OUString& rsServiceName)
@@ -261,10 +323,11 @@ sal_Bool SAL_CALL ContextChangeEventMultiplexer::supportsService ( const ::rtl::
return cppu::supportsService(this, rsServiceName);
}
-cssu::Sequence<OUString> SAL_CALL ContextChangeEventMultiplexer::getSupportedServiceNames (void)
+css::uno::Sequence<OUString> SAL_CALL ContextChangeEventMultiplexer::getSupportedServiceNames()
throw (cssu::RuntimeException)
{
- return static_GetSupportedServiceNames();
+ // it's a singleton, not a service
+ return css::uno::Sequence<OUString>();
}
void SAL_CALL ContextChangeEventMultiplexer::disposing ( const css::lang::EventObject& rEvent)
@@ -283,37 +346,29 @@ void SAL_CALL ContextChangeEventMultiplexer::disposing ( const css::lang::EventO
maListeners.erase(iDescriptor);
}
-// Local and static methods.
-OUString SAL_CALL ContextChangeEventMultiplexer::impl_getStaticImplementationName (void)
-{
- return OUString(IMPLEMENTATION_NAME);
-}
+struct Instance {
+ explicit Instance():
+ instance(static_cast<cppu::OWeakObject *>(
+ new ContextChangeEventMultiplexer()))
+ {
+ }
-cssu::Sequence<OUString> SAL_CALL ContextChangeEventMultiplexer::static_GetSupportedServiceNames (void)
-{
- return css::uno::Sequence<OUString>();
-}
+ css::uno::Reference<css::uno::XInterface> instance;
+};
+
+struct Singleton:
+ public rtl::Static<Instance, Singleton>
+{};
-cssu::Reference<cssu::XInterface> ContextChangeEventMultiplexer::impl_createFactory (
- const cssu::Reference<cssl::XMultiServiceFactory>& rxServiceManager)
-{
- (void)rxServiceManager;
- return cppu::createSingleComponentFactory(
- ContextChangeEventMultiplexer::static_CreateInstance,
- ContextChangeEventMultiplexer::impl_getStaticImplementationName(),
- ContextChangeEventMultiplexer::static_GetSupportedServiceNames()
- );
}
-cssu::Reference<cssu::XInterface> SAL_CALL ContextChangeEventMultiplexer::static_CreateInstance (
- const cssu::Reference<cssu::XComponentContext>& rxComponentContext)
- throw (cssu::Exception)
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+org_apache_openoffice_comp_framework_ContextChangeEventMultiplexer_get_implementation(
+ css::uno::XComponentContext *,
+ css::uno::Sequence<css::uno::Any> const &)
{
- ContextChangeEventMultiplexer* pObject = new ContextChangeEventMultiplexer(rxComponentContext);
- cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pObject), cssu::UNO_QUERY);
- return xService;
+ return cppu::acquire(static_cast<cppu::OWeakObject *>(
+ Singleton::get().instance.get()));
}
-} // end of namespace framework
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/framework/util/fwk.component b/framework/util/fwk.component
index 47a817f1cbdd..9d5fbb1a7cc5 100644
--- a/framework/util/fwk.component
+++ b/framework/util/fwk.component
@@ -43,7 +43,8 @@
constructor="com_sun_star_comp_framework_DocumentAcceleratorConfiguration_get_implementation">
<service name="com.sun.star.ui.DocumentAcceleratorConfiguration"/>
</implementation>
- <implementation name="org.apache.openoffice.comp.framework.ContextChangeEventMultiplexer">
+ <implementation name="org.apache.openoffice.comp.framework.ContextChangeEventMultiplexer"
+ constructor="org_apache_openoffice_comp_framework_ContextChangeEventMultiplexer_get_implementation">
<singleton name="com.sun.star.ui.ContextChangeEventMultiplexer"/>
</implementation>
<implementation name="com.sun.star.comp.framework.Frame"