diff options
Diffstat (limited to 'vcl/source/app/svdata.cxx')
-rw-r--r-- | vcl/source/app/svdata.cxx | 62 |
1 files changed, 55 insertions, 7 deletions
diff --git a/vcl/source/app/svdata.cxx b/vcl/source/app/svdata.cxx index 84f268d77015..daa7a20e71aa 100644 --- a/vcl/source/app/svdata.cxx +++ b/vcl/source/app/svdata.cxx @@ -76,6 +76,10 @@ namespace struct private_aImplSVHelpData : public rtl::Static<ImplSVHelpData, private_aImplSVHelpData> {}; + /// Default instance ensures that ImplSVData::mpWinData is never null. + struct private_aImplSVWinData : + public rtl::Static<ImplSVWinData, private_aImplSVWinData> {}; + } ImplSVData* ImplGetSVData() { @@ -237,8 +241,8 @@ basegfx::SystemDependentDataManager& ImplGetSystemDependentDataManager() vcl::Window* ImplGetDefaultWindow() { ImplSVData* pSVData = ImplGetSVData(); - if ( pSVData->maWinData.mpAppWin ) - return pSVData->maWinData.mpAppWin; + if (pSVData->maFrameData.mpAppWin) + return pSVData->maFrameData.mpAppWin; else return ImplGetDefaultContextWindow(); } @@ -387,6 +391,54 @@ void LocaleConfigurationListener::ConfigurationChanged( utl::ConfigurationBroadc AllSettings::LocaleSettingsChanged( nHint ); } +ImplSVWinData* CreateSVWinData() +{ + if (!comphelper::LibreOfficeKit::isActive()) + return nullptr; + + ImplSVWinData* p = new ImplSVWinData(); + + ImplSVData* pSVData = ImplGetSVData(); + assert(pSVData && pSVData->mpWinData); + + p->mpFocusWin = pSVData->mpWinData->mpFocusWin; + return p; +} + +void DestroySVWinData(ImplSVWinData* pData) +{ + delete static_cast<ImplSVWinData*>(pData); +} + +void SetSVWinData(ImplSVWinData* pSVWinData) +{ + if (!comphelper::LibreOfficeKit::isActive()) + return; + + ImplSVData* pSVData = ImplGetSVData(); + assert(pSVData != nullptr); + + if (pSVData->mpWinData != pSVWinData) + { + // If current one is the static, clean it up to avoid having lingering references. + if (pSVData->mpWinData == &private_aImplSVWinData::get()) + { + pSVData->mpWinData->mpFocusWin.reset(); + } + + pSVData->mpWinData = pSVWinData; + if (pSVData->mpWinData == nullptr) + { + pSVData->mpWinData = &private_aImplSVWinData::get(); // Never leave it null. + } + } +} + +ImplSVData::ImplSVData() +{ + mpHelpData = &private_aImplSVHelpData::get(); + mpWinData = &private_aImplSVWinData::get(); +} ImplSVHelpData* CreateSVHelpData() { @@ -447,11 +499,6 @@ void SetSVHelpData(ImplSVHelpData* pSVHelpData) } } -ImplSVData::ImplSVData() -{ - mpHelpData = &private_aImplSVHelpData::get(); -} - ImplSVHelpData& ImplGetSVHelpData() { ImplSVData* pSVData = ImplGetSVData(); @@ -468,6 +515,7 @@ ImplSVHelpData& ImplGetSVHelpData() ImplSVData::~ImplSVData() {} ImplSVAppData::~ImplSVAppData() {} ImplSVGDIData::~ImplSVGDIData() {} +ImplSVFrameData::~ImplSVFrameData() {} ImplSVWinData::~ImplSVWinData() {} ImplSVHelpData::~ImplSVHelpData() {} |