Revert "Revert "Simplify sfx2 removing SfxModuleArr_Impl and dummy SfxModule flag""
This reverts commit abde31a2bc68302e1afafe1fcc3f5d85369010f8. Since my analysis was completely incorrect, and the bug was elsewhere.
This commit is contained in:
parent
55a07417c8
commit
dfa8ecef62
@ -31,7 +31,7 @@ class Module : public SfxModule
|
||||
static Module* mpModule;
|
||||
public:
|
||||
Module ( ResMgr *pMgr, SfxObjectFactory *pObjFact) :
|
||||
SfxModule( pMgr, false, pObjFact, nullptr )
|
||||
SfxModule( pMgr, pObjFact, nullptr )
|
||||
{ }
|
||||
public:
|
||||
static Module*& Get () { return mpModule; }
|
||||
|
@ -35,7 +35,6 @@ class SfxObjectFactory;
|
||||
class ModalDialog;
|
||||
class SfxObjectFactory;
|
||||
class SfxModule;
|
||||
class SfxModuleArr_Impl;
|
||||
class SfxModule_Impl;
|
||||
class SfxSlotPool;
|
||||
struct SfxChildWinContextFactory;
|
||||
@ -54,7 +53,6 @@ class SFX2_DLLPUBLIC SfxModule : public SfxShell
|
||||
{
|
||||
private:
|
||||
ResMgr* pResMgr;
|
||||
bool bDummy : 1;
|
||||
SfxModule_Impl* pImpl;
|
||||
|
||||
SAL_DLLPRIVATE void Construct_Impl();
|
||||
@ -68,8 +66,7 @@ private:
|
||||
|
||||
public:
|
||||
|
||||
SfxModule( ResMgr* pMgrP, bool bDummy,
|
||||
SfxObjectFactory* pFactoryP, ... );
|
||||
SfxModule( ResMgr* pMgrP, SfxObjectFactory* pFactoryP, ... );
|
||||
virtual ~SfxModule();
|
||||
|
||||
ResMgr* GetResMgr();
|
||||
@ -96,7 +93,7 @@ public:
|
||||
static FieldUnit GetModuleFieldUnit( css::uno::Reference< css::frame::XFrame > const & i_frame );
|
||||
FieldUnit GetFieldUnit() const;
|
||||
|
||||
SAL_DLLPRIVATE static SfxModuleArr_Impl& GetModules_Impl();
|
||||
SAL_DLLPRIVATE static std::vector<SfxModule*>& GetModules_Impl();
|
||||
SAL_DLLPRIVATE static void DestroyModules_Impl();
|
||||
SAL_DLLPRIVATE SfxTbxCtrlFactArr_Impl* GetTbxCtrlFactories_Impl() const;
|
||||
SAL_DLLPRIVATE SfxStbCtrlFactArr_Impl* GetStbCtrlFactories_Impl() const;
|
||||
|
@ -130,7 +130,7 @@ void ScModule::InitInterface_Impl()
|
||||
}
|
||||
|
||||
ScModule::ScModule( SfxObjectFactory* pFact ) :
|
||||
SfxModule( ResMgr::CreateResMgr( "sc" ), false, pFact, nullptr ),
|
||||
SfxModule( ResMgr::CreateResMgr( "sc" ), pFact, nullptr ),
|
||||
aIdleTimer("sc ScModule IdleTimer"),
|
||||
aSpellIdle("sc ScModule SpellIdle"),
|
||||
mpDragData(new ScDragData),
|
||||
|
@ -67,7 +67,7 @@ void SdModule::InitInterface_Impl()
|
||||
|
||||
// Ctor
|
||||
SdModule::SdModule(SfxObjectFactory* pFact1, SfxObjectFactory* pFact2 )
|
||||
: SfxModule( ResMgr::CreateResMgr("sd"), false,
|
||||
: SfxModule( ResMgr::CreateResMgr("sd"),
|
||||
pFact1, pFact2, nullptr ),
|
||||
pTransferClip(nullptr),
|
||||
pTransferDrag(nullptr),
|
||||
|
@ -42,41 +42,7 @@
|
||||
#include "childwinimpl.hxx"
|
||||
#include <ctrlfactoryimpl.hxx>
|
||||
|
||||
class SfxModuleArr_Impl
|
||||
{
|
||||
typedef ::std::vector<SfxModule*> DataType;
|
||||
DataType maData;
|
||||
public:
|
||||
|
||||
typedef DataType::iterator iterator;
|
||||
|
||||
iterator begin()
|
||||
{
|
||||
return maData.begin();
|
||||
}
|
||||
|
||||
void erase( const iterator& it )
|
||||
{
|
||||
maData.erase(it);
|
||||
}
|
||||
|
||||
SfxModule* operator[] ( size_t i )
|
||||
{
|
||||
return maData[i];
|
||||
}
|
||||
|
||||
void push_back( SfxModule* p )
|
||||
{
|
||||
maData.push_back(p);
|
||||
}
|
||||
|
||||
size_t size() const
|
||||
{
|
||||
return maData.size();
|
||||
}
|
||||
};
|
||||
|
||||
static SfxModuleArr_Impl* pModules=nullptr;
|
||||
static std::vector<SfxModule*>* pModules=nullptr;
|
||||
|
||||
class SfxModule_Impl
|
||||
{
|
||||
@ -136,9 +102,8 @@ ResMgr* SfxModule::GetResMgr()
|
||||
return pResMgr;
|
||||
}
|
||||
|
||||
SfxModule::SfxModule( ResMgr* pMgrP, bool bDummyP,
|
||||
SfxObjectFactory* pFactoryP, ... )
|
||||
: pResMgr( pMgrP ), bDummy( bDummyP ), pImpl(nullptr)
|
||||
SfxModule::SfxModule( ResMgr* pMgrP, SfxObjectFactory* pFactoryP, ... )
|
||||
: pResMgr( pMgrP ), pImpl(nullptr)
|
||||
{
|
||||
Construct_Impl();
|
||||
va_list pVarArgs;
|
||||
@ -151,49 +116,42 @@ SfxModule::SfxModule( ResMgr* pMgrP, bool bDummyP,
|
||||
|
||||
void SfxModule::Construct_Impl()
|
||||
{
|
||||
if( !bDummy )
|
||||
{
|
||||
SfxApplication *pApp = SfxGetpApp();
|
||||
SfxModuleArr_Impl& rArr = GetModules_Impl();
|
||||
SfxModule* pPtr = this;
|
||||
rArr.push_back( pPtr );
|
||||
pImpl = new SfxModule_Impl;
|
||||
pImpl->pSlotPool = new SfxSlotPool(&pApp->GetAppSlotPool_Impl());
|
||||
SfxApplication *pApp = SfxGetpApp();
|
||||
std::vector<SfxModule*> &rArr = GetModules_Impl();
|
||||
rArr.push_back( this );
|
||||
pImpl = new SfxModule_Impl;
|
||||
pImpl->pSlotPool = new SfxSlotPool(&pApp->GetAppSlotPool_Impl());
|
||||
|
||||
pImpl->pTbxCtrlFac=nullptr;
|
||||
pImpl->pStbCtrlFac=nullptr;
|
||||
pImpl->pFactArr=nullptr;
|
||||
pImpl->pImgListSmall=nullptr;
|
||||
pImpl->pImgListBig=nullptr;
|
||||
pImpl->pTbxCtrlFac=nullptr;
|
||||
pImpl->pStbCtrlFac=nullptr;
|
||||
pImpl->pFactArr=nullptr;
|
||||
pImpl->pImgListSmall=nullptr;
|
||||
pImpl->pImgListBig=nullptr;
|
||||
|
||||
SetPool( &pApp->GetPool() );
|
||||
}
|
||||
SetPool( &pApp->GetPool() );
|
||||
}
|
||||
|
||||
|
||||
SfxModule::~SfxModule()
|
||||
{
|
||||
if( !bDummy )
|
||||
if ( SfxGetpApp()->Get_Impl() )
|
||||
{
|
||||
if ( SfxGetpApp()->Get_Impl() )
|
||||
// The module will be destroyed before the Deinitialize,
|
||||
// so remove from the array
|
||||
std::vector<SfxModule*>& rArr = GetModules_Impl();
|
||||
for( sal_uInt16 nPos = rArr.size(); nPos--; )
|
||||
{
|
||||
// The module will be destroyed before the Deinitialize,
|
||||
// so remove from the array
|
||||
SfxModuleArr_Impl& rArr = GetModules_Impl();
|
||||
for( sal_uInt16 nPos = rArr.size(); nPos--; )
|
||||
if( rArr[ nPos ] == this )
|
||||
{
|
||||
if( rArr[ nPos ] == this )
|
||||
{
|
||||
rArr.erase( rArr.begin() + nPos );
|
||||
break;
|
||||
}
|
||||
rArr.erase( rArr.begin() + nPos );
|
||||
break;
|
||||
}
|
||||
|
||||
delete pImpl;
|
||||
}
|
||||
|
||||
delete pResMgr;
|
||||
}
|
||||
|
||||
delete pImpl;
|
||||
delete pResMgr;
|
||||
}
|
||||
|
||||
|
||||
@ -292,10 +250,10 @@ VclPtr<SfxTabPage> SfxModule::CreateTabPage( sal_uInt16, vcl::Window*, const Sfx
|
||||
return VclPtr<SfxTabPage>();
|
||||
}
|
||||
|
||||
SfxModuleArr_Impl& SfxModule::GetModules_Impl()
|
||||
std::vector<SfxModule*>& SfxModule::GetModules_Impl()
|
||||
{
|
||||
if( !pModules )
|
||||
pModules = new SfxModuleArr_Impl;
|
||||
pModules = new std::vector<SfxModule*>;
|
||||
return *pModules;
|
||||
};
|
||||
|
||||
@ -303,10 +261,9 @@ void SfxModule::DestroyModules_Impl()
|
||||
{
|
||||
if ( pModules )
|
||||
{
|
||||
SfxModuleArr_Impl& rModules = *pModules;
|
||||
for( sal_uInt16 nPos = rModules.size(); nPos--; )
|
||||
for( sal_uInt16 nPos = pModules->size(); nPos--; )
|
||||
{
|
||||
SfxModule* pMod = rModules[nPos];
|
||||
SfxModule* pMod = (*pModules)[nPos];
|
||||
delete pMod;
|
||||
}
|
||||
delete pModules;
|
||||
|
@ -159,7 +159,7 @@ void SmModule::InitInterface_Impl()
|
||||
}
|
||||
|
||||
SmModule::SmModule(SfxObjectFactory* pObjFact) :
|
||||
SfxModule(ResMgr::CreateResMgr("sm"), false, pObjFact, nullptr)
|
||||
SfxModule(ResMgr::CreateResMgr("sm"), pObjFact, nullptr)
|
||||
{
|
||||
SetName("StarMath");
|
||||
|
||||
|
@ -140,7 +140,7 @@ using namespace ::com::sun::star::uno;
|
||||
SwModule::SwModule( SfxObjectFactory* pWebFact,
|
||||
SfxObjectFactory* pFact,
|
||||
SfxObjectFactory* pGlobalFact )
|
||||
: SfxModule( ResMgr::CreateResMgr( "sw" ), false, pWebFact,
|
||||
: SfxModule( ResMgr::CreateResMgr( "sw" ), pWebFact,
|
||||
pFact, pGlobalFact, nullptr ),
|
||||
m_pModuleConfig(nullptr),
|
||||
m_pUsrPref(nullptr),
|
||||
|
Loading…
x
Reference in New Issue
Block a user