diff options
author | Caolán McNamara <caolanm@redhat.com> | 2013-09-20 15:23:25 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-09-20 16:35:30 +0100 |
commit | b1314f22eb8de4359b5360194c04996351e9a6c2 (patch) | |
tree | 037f836621b38cc8a867a9f1fc8a966c8a58e189 /sfx2/source/appl/workwin.cxx | |
parent | 6936fa4a100576c56fddb68d3879df2693c52bda (diff) |
cook up a scheme to allow windows to have per-module settings
Change-Id: I5fa62c3c2af2ccbbc7e8a61e5537488515b2808c
Diffstat (limited to 'sfx2/source/appl/workwin.cxx')
-rw-r--r-- | sfx2/source/appl/workwin.cxx | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/sfx2/source/appl/workwin.cxx b/sfx2/source/appl/workwin.cxx index a4afda3f2978..4873dafd582b 100644 --- a/sfx2/source/appl/workwin.cxx +++ b/sfx2/source/appl/workwin.cxx @@ -18,7 +18,7 @@ */ #include <config_features.h> - +#include <comphelper/processfactory.hxx> #include <stdio.h> #include <boost/unordered_map.hpp> @@ -46,10 +46,12 @@ #include <svl/whiter.hxx> #include <svl/intitem.hxx> #include <svl/eitem.hxx> +#include <unotools/moduleoptions.hxx> #include <com/sun/star/ui/XUIElement.hpp> +#include <com/sun/star/frame/LayoutManagerEvents.hpp> +#include <com/sun/star/frame/ModuleManager.hpp> #include <com/sun/star/frame/XLayoutManager.hpp> #include <com/sun/star/frame/XLayoutManagerEventBroadcaster.hpp> -#include <com/sun/star/frame/LayoutManagerEvents.hpp> #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/awt/XWindow.hpp> #include <com/sun/star/lang/DisposedException.hpp> @@ -2445,6 +2447,27 @@ void SfxWorkWindow::SaveStatus_Impl(SfxChildWindow *pChild, const SfxChildWinInf void SfxWorkWindow::InitializeChild_Impl(SfxChildWin_Impl *pCW) { + SfxDispatcher *pDisp = pBindings->GetDispatcher_Impl(); + SfxViewFrame *pFrame = pDisp ? pDisp->GetFrame() :0; + SfxModule *pMod = pFrame ? SfxModule::GetActiveModule(pFrame) :0; + + OUString sModule; + if (pFrame) + { + try + { + using namespace ::com::sun::star; + uno::Reference< frame::XModuleManager2 > xModuleManager( + frame::ModuleManager::create(::comphelper::getProcessComponentContext())); + sModule = xModuleManager->identify(pFrame->GetFrame().GetFrameInterface()); + SvtModuleOptions::EFactory eFac = SvtModuleOptions::ClassifyFactoryByServiceName(sModule); + sModule = SvtModuleOptions::GetFactoryShortName(eFac); + } + catch (...) + { + } + } + SfxChildWinFactory* pFact=0; SfxApplication *pApp = SFX_APP(); { @@ -2455,6 +2478,7 @@ void SfxWorkWindow::InitializeChild_Impl(SfxChildWin_Impl *pCW) if ( pFact->nId == pCW->nSaveId ) { pCW->aInfo = pFact->aInfo; + pCW->aInfo.aModule = sModule; SfxChildWindow::InitializeChildWinFactory_Impl( pCW->nSaveId, pCW->aInfo); pCW->bCreate = pCW->aInfo.bVisible; @@ -2471,8 +2495,6 @@ void SfxWorkWindow::InitializeChild_Impl(SfxChildWin_Impl *pCW) } } - SfxDispatcher *pDisp = pBindings->GetDispatcher_Impl(); - SfxModule *pMod = pDisp ? SfxModule::GetActiveModule( pDisp->GetFrame() ) :0; if ( pMod ) { SfxChildWinFactArr_Impl *pFactories = pMod->GetChildWinFactories_Impl(); @@ -2485,6 +2507,7 @@ void SfxWorkWindow::InitializeChild_Impl(SfxChildWin_Impl *pCW) if ( pFact->nId == pCW->nSaveId ) { pCW->aInfo = pFact->aInfo; + pCW->aInfo.aModule = sModule; SfxChildWindow::InitializeChildWinFactory_Impl( pCW->nSaveId, pCW->aInfo); pCW->bCreate = pCW->aInfo.bVisible; |