diff options
author | Jan Holesovsky <kendy@collabora.com> | 2014-01-21 15:45:43 +0100 |
---|---|---|
committer | Jan Holesovsky <kendy@collabora.com> | 2014-01-21 21:25:22 +0100 |
commit | f278397787f7b79cee8536e806e8b7113800f2ef (patch) | |
tree | 1760bce432d466cf9f3ca444c89ec8f44306ab04 /sfx2/source/appl/appdispatchprovider.cxx | |
parent | 3780738154b8c3b3f9d85c64cccf621d97574886 (diff) |
Change _get_implementation()'s not to do initialization directly.
Many of the initalizations (in eg. framework) have to be done on an
acquire()'d object, so instead of doing the initialization directly, return
the initialization member function back to the createInstance() /
createInstanceWithContext() / ... and perform the initialization there.
As a sideeffect, I belive the calling initialize() from servicemanager is not
that much a hack any more - whoever converts the implementation to be
constructor-base has the choice to provide the callback, or still initialize
through XInitialization, where the callback is preferred by servicemanager
when it exists.
Change-Id: I8a87b75c54c1441ca0f184967d31ff4902fc4081
Diffstat (limited to 'sfx2/source/appl/appdispatchprovider.cxx')
-rw-r--r-- | sfx2/source/appl/appdispatchprovider.cxx | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/sfx2/source/appl/appdispatchprovider.cxx b/sfx2/source/appl/appdispatchprovider.cxx index c2b88af54dd4..6aa197c60df0 100644 --- a/sfx2/source/appl/appdispatchprovider.cxx +++ b/sfx2/source/appl/appdispatchprovider.cxx @@ -62,7 +62,11 @@ class SfxAppDispatchProvider : public ::cppu::WeakImplHelper2< css::frame::XAppD { css::uno::WeakReference < css::frame::XFrame > m_xFrame; public: - SfxAppDispatchProvider( const css::uno::Sequence< css::uno::Any >& aArguments ) + SfxAppDispatchProvider() + throw (css::uno::Exception, css::uno::RuntimeException); + + /// Initialization function after having acquire()'d. + void SAL_CALL constructorInit(const css::uno::Sequence< css::uno::Any >&) throw (css::uno::Exception, css::uno::RuntimeException); virtual OUString SAL_CALL getImplementationName() @@ -90,9 +94,13 @@ public: throw (css::uno::RuntimeException); }; -SfxAppDispatchProvider::SfxAppDispatchProvider( const uno::Sequence<uno::Any>& aArguments ) +SfxAppDispatchProvider::SfxAppDispatchProvider() throw (uno::Exception, uno::RuntimeException) { +} + +void SfxAppDispatchProvider::constructorInit(const css::uno::Sequence< css::uno::Any >& aArguments) throw (css::uno::Exception, css::uno::RuntimeException) +{ Reference < XFrame > xFrame; if ( aArguments.getLength() ) { @@ -253,9 +261,12 @@ throw (uno::RuntimeException) extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL com_sun_star_comp_sfx2_AppDispatchProvider_get_implementation( css::uno::XComponentContext *, - css::uno::Sequence<css::uno::Any> const &arguments) + cppu::constructor_InitializationFunc &init_func) { - return static_cast<cppu::OWeakObject *>(new SfxAppDispatchProvider(arguments)); + // 2nd phase initialization needed + init_func = static_cast<cppu::constructor_InitializationFunc>(&SfxAppDispatchProvider::constructorInit); + + return static_cast<cppu::OWeakObject *>(new SfxAppDispatchProvider()); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |