[Libreoffice-commits] core.git: Branch 'distro/collabora/cp-6.2' - include/sfx2 include/vcl sfx2/source vcl/inc vcl/source vcl/unx

Ashod Nakashian (via logerrit) logerrit at kemper.freedesktop.org
Wed Dec 11 19:53:01 UTC 2019


 include/sfx2/viewfrm.hxx                 |    1 
 include/vcl/svapp.hxx                    |    6 +
 sfx2/source/view/viewfrm.cxx             |    7 +
 vcl/inc/svdata.hxx                       |   26 ++--
 vcl/source/app/help.cxx                  |    8 -
 vcl/source/app/salvtables.cxx            |    2 
 vcl/source/app/svapp.cxx                 |   44 +++----
 vcl/source/app/svdata.cxx                |   62 +++++++++-
 vcl/source/app/svmain.cxx                |   26 ++--
 vcl/source/outdev/font.cxx               |    4 
 vcl/source/outdev/map.cxx                |    4 
 vcl/source/uitest/logger.cxx             |    6 -
 vcl/source/uitest/uitest.cxx             |    6 -
 vcl/source/window/brdwin.cxx             |    2 
 vcl/source/window/cursor.cxx             |    3 
 vcl/source/window/dialog.cxx             |   88 +++++++--------
 vcl/source/window/event.cxx              |   16 +-
 vcl/source/window/floatwin.cxx           |   24 ++--
 vcl/source/window/menu.cxx               |    7 -
 vcl/source/window/menubarwindow.cxx      |   12 +-
 vcl/source/window/menufloatingwindow.cxx |    2 
 vcl/source/window/mouse.cxx              |   42 +++----
 vcl/source/window/msgbox.cxx             |   10 -
 vcl/source/window/scrwnd.cxx             |    6 -
 vcl/source/window/stacking.cxx           |    2 
 vcl/source/window/syswin.cxx             |    4 
 vcl/source/window/taskpanelist.cxx       |   44 +++----
 vcl/source/window/toolbox.cxx            |    4 
 vcl/source/window/window.cxx             |   85 +++++++-------
 vcl/source/window/window2.cxx            |   60 +++++-----
 vcl/source/window/winproc.cxx            |  180 ++++++++++++++++---------------
 vcl/source/window/wrkwin.cxx             |   11 +
 vcl/unx/generic/window/salframe.cxx      |   16 +-
 vcl/unx/gtk/gtksalframe.cxx              |    8 -
 vcl/unx/gtk3/gtk3gtkframe.cxx            |    6 -
 35 files changed, 458 insertions(+), 376 deletions(-)

New commits:
commit cde58f1726f8da36968eb8faba76aee83a9d3448
Author:     Ashod Nakashian <ashod.nakashian at collabora.co.uk>
AuthorDate: Wed May 29 23:33:25 2019 -0400
Commit:     Ashod Nakashian <ashnakash at gmail.com>
CommitDate: Wed Dec 11 20:52:12 2019 +0100

    vcl: sfx2: LOK: Support per-view popup windows
    
    While we do support multiple views, there is only
    one state for popup/floating windows, that also
    includes the dialogs open and related windows/data.
    
    This adds support to allow each view to have its own
    popups and state, thus allowing multiple users to
    interact with the dialogs independently of one
    another.
    
    (cherry picked from commit b50c341a53911f1d725947a4d8d3d2f782c94079)
    
    Change-Id: I3786a561ca6ca113ad12425bdb491e5a30bd1a28
    Reviewed-on: https://gerrit.libreoffice.org/82440
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Ashod Nakashian <ashnakash at gmail.com>

diff --git a/include/sfx2/viewfrm.hxx b/include/sfx2/viewfrm.hxx
index 2335010a1b1e..58f23b7edb43 100644
--- a/include/sfx2/viewfrm.hxx
+++ b/include/sfx2/viewfrm.hxx
@@ -69,6 +69,7 @@ class SFX2_DLLPUBLIC SfxViewFrame: public SfxShell, public SfxListener
     std::unique_ptr<SfxDispatcher> m_pDispatcher;
     SfxBindings*                m_pBindings;
     ImplSVHelpData*             m_pHelpData;
+    ImplSVWinData*              m_pWinData;
     sal_uInt16                  m_nAdjustPosPixelLock;
 
 private:
diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx
index 5a3a18b80067..6d0f16b59e90 100644
--- a/include/vcl/svapp.hxx
+++ b/include/vcl/svapp.hxx
@@ -1491,6 +1491,12 @@ VCL_DLLPUBLIC ImplSVHelpData* CreateSVHelpData();
 VCL_DLLPUBLIC void DestroySVHelpData(ImplSVHelpData*);
 VCL_DLLPUBLIC void SetSVHelpData(ImplSVHelpData*);
 
+/// The following are to manage per-view (frame) window data.
+struct ImplSVWinData;
+VCL_DLLPUBLIC ImplSVWinData* CreateSVWinData();
+VCL_DLLPUBLIC void DestroySVWinData(ImplSVWinData*);
+VCL_DLLPUBLIC void SetSVWinData(ImplSVWinData*);
+
 inline void Application::EndYield()
 {
     PostUserEvent( Link<void*,void>() );
diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index 80573aa61fc8..25d8a5c4bf76 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -1482,6 +1482,7 @@ SfxViewFrame::SfxViewFrame
     : m_pImpl( new SfxViewFrame_Impl( rFrame ) )
     , m_pBindings( new SfxBindings )
     , m_pHelpData(CreateSVHelpData())
+    , m_pWinData(CreateSVWinData())
     , m_nAdjustPosPixelLock( 0 )
 {
 
@@ -1527,6 +1528,9 @@ SfxViewFrame::~SfxViewFrame()
 
     DestroySVHelpData(m_pHelpData);
     m_pHelpData = nullptr;
+
+    DestroySVWinData(m_pWinData);
+    m_pWinData = nullptr;
 }
 
 // Remove and delete the Dispatcher.
@@ -3166,6 +3170,9 @@ void SfxViewFrame::SetViewFrame( SfxViewFrame* pFrame )
 {
     if(pFrame)
         SetSVHelpData(pFrame->m_pHelpData);
+
+    SetSVWinData(pFrame ? pFrame->m_pWinData : nullptr);
+
     SfxGetpApp()->SetViewFrame_Impl( pFrame );
 }
 
diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx
index 56912ae5bf5d..1fae7681f8e7 100644
--- a/vcl/inc/svdata.hxx
+++ b/vcl/inc/svdata.hxx
@@ -208,13 +208,20 @@ struct ImplSVGDIData
     o3tl::lru_map<OUString, gfx::DrawRoot> maThemeDrawCommandsCache = o3tl::lru_map<OUString, gfx::DrawRoot>(50);
 };
 
-struct ImplSVWinData
+struct ImplSVFrameData
 {
-    ~ImplSVWinData();
+    ~ImplSVFrameData();
     VclPtr<vcl::Window>     mpFirstFrame;                   // First FrameWindow
+    VclPtr<vcl::Window>     mpActiveApplicationFrame;       // the last active application frame, can be used as DefModalDialogParent if no focuswin set
     VclPtr<WorkWindow>      mpAppWin;                       // Application-Window
+
+    std::unique_ptr<UITestLogger> m_pUITestLogger;
+};
+
+struct ImplSVWinData
+{
+    ~ImplSVWinData();
     VclPtr<vcl::Window>     mpFocusWin;                     // window, that has the focus
-    VclPtr<vcl::Window>     mpActiveApplicationFrame;       // the last active application frame, can be used as DefModalDialogParent if no focuswin set
     VclPtr<vcl::Window>     mpCaptureWin;                   // window, that has the mouse capture
     VclPtr<vcl::Window>     mpLastDeacWin;                  // Window, that need a deactivate (FloatingWindow-Handling)
     VclPtr<FloatingWindow>  mpFirstFloat;                   // First FloatingWindow in PopupMode
@@ -231,8 +238,6 @@ struct ImplSVWinData
     StartAutoScrollFlags    mnAutoScrollFlags = StartAutoScrollFlags::NONE; // auto scroll flags
     bool                    mbNoDeactivate = false;         // true: do not execute Deactivate
     bool                    mbNoSaveFocus = false;          // true: menus must not save/restore focus
-
-    std::unique_ptr<UITestLogger> m_pUITestLogger;
 };
 
 typedef std::vector< std::pair< OUString, FieldUnit > > FieldUnitStringList;
@@ -363,11 +368,12 @@ struct ImplSVData
     std::unique_ptr<SalSystem> mpSalSystem;                 // SalSystem interface
     bool                    mbResLocaleSet = false;         // SV-Resource-Manager
     std::locale             maResLocale;                    // Resource locale
-    ImplSchedulerContext    maSchedCtx;                     // indepen data for class Scheduler
-    ImplSVAppData           maAppData;                      // indepen data for class Application
-    ImplSVGDIData           maGDIData;                      // indepen data for Output classes
-    ImplSVWinData           maWinData;                      // indepen data for Windows classes
-    ImplSVCtrlData          maCtrlData;                     // indepen data for Control classes
+    ImplSchedulerContext    maSchedCtx;                     // Data for class Scheduler
+    ImplSVAppData           maAppData;                      // Data for class Application
+    ImplSVGDIData           maGDIData;                      // Data for Output classes
+    ImplSVFrameData         maFrameData;                    // Data for Frame classes
+    ImplSVWinData*          mpWinData = nullptr;            // Data for per-view Windows classes
+    ImplSVCtrlData          maCtrlData;                     // Data for Control classes
     ImplSVHelpData*         mpHelpData;                     // Data for Help classes
     ImplSVNWFData           maNWFData;
     UnoWrapperBase*         mpUnoWrapper = nullptr;
diff --git a/vcl/source/app/help.cxx b/vcl/source/app/help.cxx
index 7abe54cdfac0..b7cf9f4d4b6b 100644
--- a/vcl/source/app/help.cxx
+++ b/vcl/source/app/help.cxx
@@ -118,8 +118,8 @@ bool Help::StartExtHelp()
         aHelpData.mbExtHelpMode = true;
         aHelpData.mbOldBalloonMode = aHelpData.mbBalloonHelp;
         aHelpData.mbBalloonHelp = true;
-        if ( pSVData->maWinData.mpAppWin )
-            pSVData->maWinData.mpAppWin->ImplGenerateMouseMove();
+        if (pSVData->maFrameData.mpAppWin)
+            pSVData->maFrameData.mpAppWin->ImplGenerateMouseMove();
         return true;
     }
 
@@ -135,8 +135,8 @@ bool Help::EndExtHelp()
     {
         aHelpData.mbExtHelpMode = false;
         aHelpData.mbBalloonHelp = aHelpData.mbOldBalloonMode;
-        if ( pSVData->maWinData.mpAppWin )
-            pSVData->maWinData.mpAppWin->ImplGenerateMouseMove();
+        if (pSVData->maFrameData.mpAppWin)
+            pSVData->maFrameData.mpAppWin->ImplGenerateMouseMove();
         return true;
     }
 
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 9b4ce8144916..856f6745b300 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -3741,7 +3741,7 @@ weld::Builder* Application::CreateInterimBuilder(weld::Widget* pParent, const OU
 void SalInstanceWindow::help()
 {
     //show help for widget with keyboard focus
-    vcl::Window* pWidget = ImplGetSVData()->maWinData.mpFocusWin;
+    vcl::Window* pWidget = ImplGetSVData()->mpWinData->mpFocusWin;
     if (!pWidget)
         pWidget = m_xWindow;
     OString sHelpId = pWidget->GetHelpId();
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx
index fed84899714c..b69941f316e1 100644
--- a/vcl/source/app/svapp.cxx
+++ b/vcl/source/app/svapp.cxx
@@ -186,7 +186,7 @@ int Application::Main()
 
 bool Application::QueryExit()
 {
-    WorkWindow* pAppWin = ImplGetSVData()->maWinData.mpAppWin;
+    WorkWindow* pAppWin = ImplGetSVData()->maFrameData.mpAppWin;
 
     // call the close handler of the application window
     if ( pAppWin )
@@ -300,8 +300,8 @@ const vcl::KeyCode* Application::GetReservedKeyCode( sal_uLong i )
 IMPL_STATIC_LINK_NOARG( ImplSVAppData, ImplEndAllPopupsMsg, void*, void )
 {
     ImplSVData* pSVData = ImplGetSVData();
-    while (pSVData->maWinData.mpFirstFloat)
-        pSVData->maWinData.mpFirstFloat->EndPopupMode(FloatWinPopupEndFlags::Cancel);
+    while (pSVData->mpWinData->mpFirstFloat)
+        pSVData->mpWinData->mpFirstFloat->EndPopupMode(FloatWinPopupEndFlags::Cancel);
 }
 
 IMPL_STATIC_LINK_NOARG( ImplSVAppData, ImplEndAllDialogsMsg, void*, void )
@@ -484,7 +484,7 @@ void Scheduler::ProcessEventsToIdle()
     // events were processed at some point, but our check can't prevent further
     // processing in the main thread, which may add new events, so skip it.
     const ImplSVData* pSVData = ImplGetSVData();
-    if (!pSVData->mpDefInst->IsMainThread())
+    if ( !pSVData->mpDefInst->IsMainThread() )
         return;
     for (int nTaskPriority = 0; nTaskPriority < PRIO_COUNT; ++nTaskPriority)
     {
@@ -591,8 +591,8 @@ bool Application::IsUICaptured()
     // If mouse was captured, or if in tracking- or in select-mode of a floatingwindow (e.g. menus
     // or pulldown toolboxes) another window should be created
     // D&D active !!!
-    return pSVData->maWinData.mpCaptureWin || pSVData->maWinData.mpTrackWin ||
-         pSVData->maWinData.mpFirstFloat || nImplSysDialog;
+    return pSVData->mpWinData->mpCaptureWin || pSVData->mpWinData->mpTrackWin
+           || pSVData->mpWinData->mpFirstFloat || nImplSysDialog;
 }
 
 void Application::OverrideSystemSettings( AllSettings& /*rSettings*/ )
@@ -601,7 +601,7 @@ void Application::OverrideSystemSettings( AllSettings& /*rSettings*/ )
 
 void Application::MergeSystemSettings( AllSettings& rSettings )
 {
-    vcl::Window* pWindow = ImplGetSVData()->maWinData.mpFirstFrame;
+    vcl::Window* pWindow = ImplGetSVData()->maFrameData.mpFirstFrame;
     if( ! pWindow )
         pWindow = ImplGetDefaultWindow();
     if( pWindow )
@@ -646,7 +646,7 @@ void Application::SetSettings( const AllSettings& rSettings )
             ImplCallEventListenersApplicationDataChanged( &aDCEvt);
 
             // Update all windows
-            vcl::Window* pFirstFrame = pSVData->maWinData.mpFirstFrame;
+            vcl::Window* pFirstFrame = pSVData->maFrameData.mpFirstFrame;
             // Reset data that needs to be re-calculated
             long nOldDPIX = 0;
             long nOldDPIY = 0;
@@ -681,7 +681,7 @@ void Application::SetSettings( const AllSettings& rSettings )
 
             // if DPI resolution for screen output was changed set the new resolution for all
             // screen compatible VirDev's
-            pFirstFrame = pSVData->maWinData.mpFirstFrame;
+            pFirstFrame = pSVData->maFrameData.mpFirstFrame;
             if ( pFirstFrame )
             {
                 if ( (pFirstFrame->GetDPIX() != nOldDPIX) ||
@@ -742,7 +742,7 @@ void InitSettings(ImplSVData* pSVData)
 void Application::NotifyAllWindows( DataChangedEvent& rDCEvt )
 {
     ImplSVData* pSVData = ImplGetSVData();
-    vcl::Window*     pFrame = pSVData->maWinData.mpFirstFrame;
+    vcl::Window* pFrame = pSVData->maFrameData.mpFirstFrame;
     while ( pFrame )
     {
         pFrame->NotifyAllChildren( rDCEvt );
@@ -1053,12 +1053,12 @@ void Application::RemoveUserEvent( ImplSVEvent * nUserEvent )
 
 WorkWindow* Application::GetAppWindow()
 {
-    return ImplGetSVData()->maWinData.mpAppWin;
+    return ImplGetSVData()->maFrameData.mpAppWin;
 }
 
 vcl::Window* Application::GetFocusWindow()
 {
-    return ImplGetSVData()->maWinData.mpFocusWin;
+    return ImplGetSVData()->mpWinData->mpFocusWin;
 }
 
 OutputDevice* Application::GetDefaultDevice()
@@ -1069,7 +1069,7 @@ OutputDevice* Application::GetDefaultDevice()
 vcl::Window* Application::GetFirstTopLevelWindow()
 {
     ImplSVData* pSVData = ImplGetSVData();
-    return pSVData->maWinData.mpFirstFrame;
+    return pSVData->maFrameData.mpFirstFrame;
 }
 
 vcl::Window* Application::GetNextTopLevelWindow( vcl::Window const * pWindow )
@@ -1081,7 +1081,7 @@ long    Application::GetTopWindowCount()
 {
     long nRet = 0;
     ImplSVData* pSVData = ImplGetSVData();
-    vcl::Window *pWin = pSVData ? pSVData->maWinData.mpFirstFrame.get() : nullptr;
+    vcl::Window *pWin = pSVData ? pSVData->maFrameData.mpFirstFrame.get() : nullptr;
     while( pWin )
     {
         if( pWin->ImplGetWindow()->IsTopWindow() )
@@ -1095,7 +1095,7 @@ vcl::Window* Application::GetTopWindow( long nIndex )
 {
     long nIdx = 0;
     ImplSVData* pSVData = ImplGetSVData();
-    vcl::Window *pWin = pSVData ? pSVData->maWinData.mpFirstFrame.get() : nullptr;
+    vcl::Window *pWin = pSVData ? pSVData->maFrameData.mpFirstFrame.get() : nullptr;
     while( pWin )
     {
         if( pWin->ImplGetWindow()->IsTopWindow() )
@@ -1112,7 +1112,7 @@ vcl::Window* Application::GetTopWindow( long nIndex )
 
 vcl::Window* Application::GetActiveTopWindow()
 {
-    vcl::Window *pWin = ImplGetSVData()->maWinData.mpFocusWin;
+    vcl::Window *pWin = ImplGetSVData()->mpWinData->mpFocusWin;
     while( pWin )
     {
         if( pWin->IsTopWindow() )
@@ -1185,8 +1185,8 @@ OUString Application::GetDisplayName()
     ImplSVData* pSVData = ImplGetSVData();
     if ( pSVData->maAppData.mxDisplayName )
         return *(pSVData->maAppData.mxDisplayName);
-    else if ( pSVData->maWinData.mpAppWin )
-        return pSVData->maWinData.mpAppWin->GetText();
+    else if (pSVData->maFrameData.mpAppWin)
+        return pSVData->maFrameData.mpAppWin->GetText();
     else
         return OUString();
 }
@@ -1348,7 +1348,7 @@ vcl::Window* Application::GetDefDialogParent()
     // as DefDialogParent
 
     // current focus frame
-    vcl::Window *pWin = pSVData->maWinData.mpFocusWin;
+    vcl::Window *pWin = pSVData->mpWinData->mpFocusWin;
     if (pWin && !pWin->IsMenuFloatingWindow())
     {
         while (pWin->mpWindowImpl && pWin->mpWindowImpl->mpParent)
@@ -1358,7 +1358,7 @@ vcl::Window* Application::GetDefDialogParent()
         if (!pWin->mpWindowImpl)
         {
             OSL_FAIL( "Window hierarchy corrupted!" );
-            pSVData->maWinData.mpFocusWin = nullptr;   // avoid further access
+            pSVData->mpWinData->mpFocusWin = nullptr;   // avoid further access
             return nullptr;
         }
 
@@ -1369,14 +1369,14 @@ vcl::Window* Application::GetDefDialogParent()
     }
 
     // last active application frame
-    pWin = pSVData->maWinData.mpActiveApplicationFrame;
+    pWin = pSVData->maFrameData.mpActiveApplicationFrame;
     if (pWin)
     {
         return pWin->mpWindowImpl->mpFrameWindow->ImplGetWindow();
     }
 
     // first visible top window (may be totally wrong....)
-    pWin = pSVData->maWinData.mpFirstFrame;
+    pWin = pSVData->maFrameData.mpFirstFrame;
     while (pWin)
     {
         if( pWin->ImplGetWindow()->IsTopWindow() &&
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() {}
 
diff --git a/vcl/source/app/svmain.cxx b/vcl/source/app/svmain.cxx
index 3fd6d86b1bc0..74b7fa6a0789 100644
--- a/vcl/source/app/svmain.cxx
+++ b/vcl/source/app/svmain.cxx
@@ -487,7 +487,7 @@ void DeInitVCL()
 
     Scheduler::ImplDeInitScheduler();
 
-    pSVData->maWinData.maMsgBoxImgList.clear();
+    pSVData->mpWinData->maMsgBoxImgList.clear();
     pSVData->maCtrlData.maCheckImgList.clear();
     pSVData->maCtrlData.maRadioImgList.clear();
     pSVData->maCtrlData.mpDisclosurePlus.reset();
@@ -538,7 +538,7 @@ void DeInitVCL()
 
         pSVData->maAppData.mpSettings.reset();
     }
-    if (pSVData->maAppData.mpAccelMgr)
+    if ( pSVData->maAppData.mpAccelMgr )
     {
         delete pSVData->maAppData.mpAccelMgr;
         pSVData->maAppData.mpAccelMgr = nullptr;
@@ -569,17 +569,17 @@ void DeInitVCL()
     pSVData->maGDIData.mpLastVirDev = nullptr;
     pSVData->maGDIData.mpFirstPrinter = nullptr;
     pSVData->maGDIData.mpLastPrinter = nullptr;
-    pSVData->maWinData.mpFirstFrame = nullptr;
-    pSVData->maWinData.mpAppWin = nullptr;
-    pSVData->maWinData.mpActiveApplicationFrame = nullptr;
-    pSVData->maWinData.mpCaptureWin = nullptr;
-    pSVData->maWinData.mpLastDeacWin = nullptr;
-    pSVData->maWinData.mpFirstFloat = nullptr;
-    pSVData->maWinData.mpExecuteDialogs.clear();
-    pSVData->maWinData.mpExtTextInputWin = nullptr;
-    pSVData->maWinData.mpTrackWin = nullptr;
-    pSVData->maWinData.mpAutoScrollWin = nullptr;
-    pSVData->maWinData.mpLastWheelWindow = nullptr;
+    pSVData->maFrameData.mpFirstFrame = nullptr;
+    pSVData->maFrameData.mpAppWin = nullptr;
+    pSVData->maFrameData.mpActiveApplicationFrame = nullptr;
+    pSVData->mpWinData->mpCaptureWin = nullptr;
+    pSVData->mpWinData->mpLastDeacWin = nullptr;
+    pSVData->mpWinData->mpFirstFloat = nullptr;
+    pSVData->mpWinData->mpExecuteDialogs.clear();
+    pSVData->mpWinData->mpExtTextInputWin = nullptr;
+    pSVData->mpWinData->mpTrackWin = nullptr;
+    pSVData->mpWinData->mpAutoScrollWin = nullptr;
+    pSVData->mpWinData->mpLastWheelWindow = nullptr;
 
     pSVData->maGDIData.mxScreenFontList.reset();
     pSVData->maGDIData.mxScreenFontCache.reset();
diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx
index ffc6d9c2d147..6bb255b3eced 100644
--- a/vcl/source/outdev/font.cxx
+++ b/vcl/source/outdev/font.cxx
@@ -580,7 +580,7 @@ void OutputDevice::ImplClearAllFontData(bool bNewFontLists)
     if ( bNewFontLists )
     {
         pSVData->maGDIData.mxScreenFontList->Clear();
-        vcl::Window * pFrame = pSVData->maWinData.mpFirstFrame;
+        vcl::Window * pFrame = pSVData->maFrameData.mpFirstFrame;
         if ( pFrame )
         {
             if ( pFrame->AcquireGraphics() )
@@ -609,7 +609,7 @@ void OutputDevice::ImplUpdateFontDataForAllFrames( const FontUpdateHandler_t pHd
     ImplSVData* const pSVData = ImplGetSVData();
 
     // update all windows
-    vcl::Window* pFrame = pSVData->maWinData.mpFirstFrame;
+    vcl::Window* pFrame = pSVData->maFrameData.mpFirstFrame;
     while ( pFrame )
     {
         ( pFrame->*pHdl )( bNewFontLists );
diff --git a/vcl/source/outdev/map.cxx b/vcl/source/outdev/map.cxx
index 57969ec5758c..df63c7b31589 100644
--- a/vcl/source/outdev/map.cxx
+++ b/vcl/source/outdev/map.cxx
@@ -225,8 +225,8 @@ static void ImplCalcMapResolution( const MapMode& rMapMode,
             ImplSVData* pSVData = ImplGetSVData();
             if ( !pSVData->maGDIData.mnAppFontX )
             {
-                if( pSVData->maWinData.mpFirstFrame )
-                    vcl::Window::ImplInitAppFontData( pSVData->maWinData.mpFirstFrame );
+                if (pSVData->maFrameData.mpFirstFrame)
+                    vcl::Window::ImplInitAppFontData(pSVData->maFrameData.mpFirstFrame);
                 else
                 {
                     ScopedVclPtrInstance<WorkWindow> pWin( nullptr, 0 );
diff --git a/vcl/source/uitest/logger.cxx b/vcl/source/uitest/logger.cxx
index 432a6af86b18..fa829f5eb9ce 100644
--- a/vcl/source/uitest/logger.cxx
+++ b/vcl/source/uitest/logger.cxx
@@ -260,12 +260,12 @@ UITestLogger& UITestLogger::getInstance()
     ImplSVData *const pSVData = ImplGetSVData();
     assert(pSVData);
 
-    if (!pSVData->maWinData.m_pUITestLogger)
+    if (!pSVData->maFrameData.m_pUITestLogger)
     {
-        pSVData->maWinData.m_pUITestLogger.reset(new UITestLogger);
+        pSVData->maFrameData.m_pUITestLogger.reset(new UITestLogger);
     }
 
-    return *pSVData->maWinData.m_pUITestLogger;
+    return *pSVData->maFrameData.m_pUITestLogger;
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/uitest/uitest.cxx b/vcl/source/uitest/uitest.cxx
index bf1f69bfe54b..7ee417c251c5 100644
--- a/vcl/source/uitest/uitest.cxx
+++ b/vcl/source/uitest/uitest.cxx
@@ -55,20 +55,20 @@ bool UITest::executeDialog(const OUString& rCommand)
 std::unique_ptr<UIObject> UITest::getFocusTopWindow()
 {
     ImplSVData* pSVData = ImplGetSVData();
-    ImplSVWinData& rWinData = pSVData->maWinData;
+    ImplSVWinData& rWinData = *pSVData->mpWinData;
 
     if (!rWinData.mpExecuteDialogs.empty())
     {
         return rWinData.mpExecuteDialogs.back()->GetUITestFactory()(rWinData.mpExecuteDialogs.back());
     }
 
-    return rWinData.mpFirstFrame->GetUITestFactory()(rWinData.mpFirstFrame);
+    return pSVData->maFrameData.mpFirstFrame->GetUITestFactory()(pSVData->maFrameData.mpFirstFrame);
 }
 
 std::unique_ptr<UIObject> UITest::getFloatWindow()
 {
     ImplSVData* pSVData = ImplGetSVData();
-    ImplSVWinData& rWinData = pSVData->maWinData;
+    ImplSVWinData& rWinData = *pSVData->mpWinData;
 
     VclPtr<vcl::Window> pFloatWin = rWinData.mpFirstFloat;
     if (pFloatWin)
diff --git a/vcl/source/window/brdwin.cxx b/vcl/source/window/brdwin.cxx
index 08121d571ac5..9248f65c1955 100644
--- a/vcl/source/window/brdwin.cxx
+++ b/vcl/source/window/brdwin.cxx
@@ -1708,7 +1708,7 @@ void ImplBorderWindow::Deactivate()
 {
     // remove active windows from the ruler, also ignore the Deactivate
     // if a menu becomes active
-    if ( GetActivateMode() != ActivateModeFlags::NONE && !ImplGetSVData()->maWinData.mbNoDeactivate )
+    if (GetActivateMode() != ActivateModeFlags::NONE && !ImplGetSVData()->mpWinData->mbNoDeactivate)
         SetDisplayActive( false );
     Window::Deactivate();
 }
diff --git a/vcl/source/window/cursor.cxx b/vcl/source/window/cursor.cxx
index 3504f86b3924..f4cb6f52e13f 100644
--- a/vcl/source/window/cursor.cxx
+++ b/vcl/source/window/cursor.cxx
@@ -47,6 +47,9 @@ struct ImplCursorData
 static void ImplCursorInvert( ImplCursorData const * pData )
 {
     vcl::Window* pWindow  = pData->mpWindow;
+    if (!pWindow || pWindow->IsDisposed())
+        return;
+
     std::unique_ptr<PaintBufferGuard> pGuard;
     const bool bDoubleBuffering = pWindow->SupportsDoubleBuffering();
     if (bDoubleBuffering)
diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx
index d3710414385b..79e2cd95300d 100644
--- a/vcl/source/window/dialog.cxx
+++ b/vcl/source/window/dialog.cxx
@@ -403,14 +403,14 @@ vcl::Window* Dialog::GetDefaultParent(WinBits nStyle)
 {
     vcl::Window* pParent = Application::GetDefDialogParent();
     if (!pParent && !(nStyle & WB_SYSTEMWINDOW))
-        pParent = ImplGetSVData()->maWinData.mpAppWin;
+        pParent = ImplGetSVData()->maFrameData.mpAppWin;
 
     // If Parent is disabled, then we search for a modal dialog
     // in this frame
     if (pParent && (!pParent->IsInputEnabled() || pParent->IsInModalMode()))
     {
         ImplSVData* pSVData = ImplGetSVData();
-        auto& rExecuteDialogs = pSVData->maWinData.mpExecuteDialogs;
+        auto& rExecuteDialogs = pSVData->mpWinData->mpExecuteDialogs;
         auto it = std::find_if(rExecuteDialogs.rbegin(), rExecuteDialogs.rend(),
             [&pParent](VclPtr<Dialog>& rDialogPtr) {
                 return pParent->ImplGetFirstOverlapWindow()->IsWindowOrChild(rDialogPtr, true) &&
@@ -912,8 +912,8 @@ bool Dialog::ImplStartExecute()
             if (bModal && GetLOKNotifier())
             {
                 // check if there's already some dialog being ::Execute()d
-                const bool bDialogExecuting = std::any_of(pSVData->maWinData.mpExecuteDialogs.begin(),
-                                                          pSVData->maWinData.mpExecuteDialogs.end(),
+                const bool bDialogExecuting = std::any_of(pSVData->mpWinData->mpExecuteDialogs.begin(),
+                                                          pSVData->mpWinData->mpExecuteDialogs.end(),
                                                           [](const Dialog* pDialog) {
                                                               return pDialog->IsInSyncExecute();
                                                           });
@@ -923,15 +923,15 @@ bool Dialog::ImplStartExecute()
                     SAL_WARN("lok.dialog", "Dialog \"" << ImplGetDialogText(this) << "\" is being synchronously executed over an existing synchronously executing dialog.");
             }
 
-            SAL_INFO(
-                "vcl",
-                "Dialog \"" << ImplGetDialogText(this)
-                    << "\"cancelled in silent mode");
-            return false;
-        default: // default cannot happen
-        case Application::DialogCancelMode::Fatal:
-            std::abort();
-        }
+        SAL_INFO(
+            "vcl",
+            "Dialog \"" << ImplGetDialogText(this)
+                << "\"cancelled in silent mode");
+        return false;
+    default: // default cannot happen
+    case Application::DialogCancelMode::Fatal:
+        std::abort();
+    }
 
     if (bKitActive)
     {
@@ -947,29 +947,29 @@ bool Dialog::ImplStartExecute()
     }
 
 #ifdef DBG_UTIL
-        vcl::Window* pParent = GetParent();
-        if ( pParent )
-        {
-            pParent = pParent->ImplGetFirstOverlapWindow();
-            SAL_WARN_IF( !pParent->IsReallyVisible(), "vcl",
-                        "Dialog::StartExecuteModal() - Parent not visible" );
-            SAL_WARN_IF( !pParent->IsInputEnabled(), "vcl",
-                        "Dialog::StartExecuteModal() - Parent input disabled, use another parent to ensure modality!" );
-            SAL_WARN_IF(  pParent->IsInModalMode(), "vcl",
-                        "Dialog::StartExecuteModal() - Parent already modally disabled, use another parent to ensure modality!" );
+    vcl::Window* pParent = GetParent();
+    if ( pParent )
+    {
+        pParent = pParent->ImplGetFirstOverlapWindow();
+        SAL_WARN_IF( !pParent->IsReallyVisible(), "vcl",
+                    "Dialog::StartExecuteModal() - Parent not visible" );
+        SAL_WARN_IF( !pParent->IsInputEnabled(), "vcl",
+                    "Dialog::StartExecuteModal() - Parent input disabled, use another parent to ensure modality!" );
+        SAL_WARN_IF(  pParent->IsInModalMode(), "vcl",
+                    "Dialog::StartExecuteModal() - Parent already modally disabled, use another parent to ensure modality!" );
 
-        }
+    }
 #endif
 
-        // link all dialogs which are being executed
-        pSVData->maWinData.mpExecuteDialogs.push_back(this);
+    // link all dialogs which are being executed
+    pSVData->mpWinData->mpExecuteDialogs.push_back(this);
 
-        // stop capturing, in order to have control over the dialog
-        if ( pSVData->maWinData.mpTrackWin )
-            pSVData->maWinData.mpTrackWin->EndTracking( TrackingEventFlags::Cancel );
-        if ( pSVData->maWinData.mpCaptureWin )
-            pSVData->maWinData.mpCaptureWin->ReleaseMouse();
-        EnableInput();
+    // stop capturing, in order to have control over the dialog
+    if (pSVData->mpWinData->mpTrackWin)
+        pSVData->mpWinData->mpTrackWin->EndTracking(TrackingEventFlags::Cancel);
+    if (pSVData->mpWinData->mpCaptureWin)
+        pSVData->mpWinData->mpCaptureWin->ReleaseMouse();
+    EnableInput();
 
         if ( GetParent() )
         {
@@ -1117,6 +1117,7 @@ short Dialog::Execute()
 
 #else
     return RET_OK;
+
 #endif
 }
 
@@ -1140,7 +1141,7 @@ bool Dialog::StartExecuteAsync( VclAbstractDialog::AsyncContext &rCtx )
 void Dialog::RemoveFromDlgList()
 {
     ImplSVData* pSVData = ImplGetSVData();
-    auto& rExecuteDialogs = pSVData->maWinData.mpExecuteDialogs;
+    auto& rExecuteDialogs = pSVData->mpWinData->mpExecuteDialogs;
 
     // remove dialog from the list of dialogs which are being executed
     rExecuteDialogs.erase(std::remove_if(rExecuteDialogs.begin(), rExecuteDialogs.end(), [this](VclPtr<Dialog>& dialog){ return dialog.get() == this; }), rExecuteDialogs.end());
@@ -1159,14 +1160,14 @@ void Dialog::EndDialog( long nResult )
     {
         SetModalInputMode(false);
 
-        RemoveFromDlgList();
+    RemoveFromDlgList();
 
-        // set focus to previous modal dialogue if it is modal for
-        // the same frame parent (or NULL)
-        ImplSVData* pSVData = ImplGetSVData();
-        if (!pSVData->maWinData.mpExecuteDialogs.empty())
-        {
-            VclPtr<Dialog> pPrevious = pSVData->maWinData.mpExecuteDialogs.back();
+    // set focus to previous modal dialogue if it is modal for
+    // the same frame parent (or NULL)
+    ImplSVData* pSVData = ImplGetSVData();
+    if (!pSVData->mpWinData->mpExecuteDialogs.empty())
+    {
+        VclPtr<Dialog> pPrevious = pSVData->mpWinData->mpExecuteDialogs.back();
 
             vcl::Window* pFrameParent = ImplGetFrameWindow()->ImplGetParent();
             vcl::Window* pPrevFrameParent = pPrevious->ImplGetFrameWindow()? pPrevious->ImplGetFrameWindow()->ImplGetParent(): nullptr;
@@ -1201,7 +1202,6 @@ void Dialog::EndDialog( long nResult )
         mpDialogImpl->mbStartedModal = false;
         mpDialogImpl->mnResult = -1;
     }
-
     mbInExecute = false;
 
     if ( mpDialogImpl )
@@ -1216,7 +1216,7 @@ void Dialog::EndDialog( long nResult )
 void Dialog::EndAllDialogs( vcl::Window const * pParent )
 {
     ImplSVData* pSVData = ImplGetSVData();
-    auto& rExecuteDialogs = pSVData->maWinData.mpExecuteDialogs;
+    auto& rExecuteDialogs = pSVData->mpWinData->mpExecuteDialogs;
 
     for (auto it = rExecuteDialogs.rbegin(); it != rExecuteDialogs.rend(); ++it)
     {
@@ -1231,7 +1231,7 @@ void Dialog::EndAllDialogs( vcl::Window const * pParent )
 VclPtr<Dialog> Dialog::GetMostRecentExecutingDialog()
 {
     ImplSVData* pSVData = ImplGetSVData();
-    auto& rExecuteDialogs = pSVData->maWinData.mpExecuteDialogs;
+    auto& rExecuteDialogs = pSVData->mpWinData->mpExecuteDialogs;
     if (!rExecuteDialogs.empty())
         return rExecuteDialogs.back();
     return nullptr;
@@ -1254,7 +1254,7 @@ void Dialog::ImplSetModalInputMode( bool bModal )
     // previously Execute()'d dialog - the one below the top-most one
     VclPtr<Dialog> pPrevious;
     ImplSVData* pSVData = ImplGetSVData();
-    auto& rExecuteDialogs = pSVData->maWinData.mpExecuteDialogs;
+    auto& rExecuteDialogs = pSVData->mpWinData->mpExecuteDialogs;
     if (rExecuteDialogs.size() > 1)
         pPrevious = rExecuteDialogs[rExecuteDialogs.size() - 2];
 
diff --git a/vcl/source/window/event.cxx b/vcl/source/window/event.cxx
index 399dddd3abaa..797d40a79912 100644
--- a/vcl/source/window/event.cxx
+++ b/vcl/source/window/event.cxx
@@ -584,29 +584,29 @@ void Window::ImplCallFocusChangeActivate( vcl::Window* pNewOverlapWindow,
         if ( (pNewRealWindow->GetType() == WindowType::FLOATINGWINDOW) &&
              pNewRealWindow->GetActivateMode() == ActivateModeFlags::NONE)
         {
-            pSVData->maWinData.mpLastDeacWin = pOldOverlapWindow;
+            pSVData->mpWinData->mpLastDeacWin = pOldOverlapWindow;
             bCallDeactivate = false;
         }
     }
     else if ( (pNewRealWindow->GetType() != WindowType::FLOATINGWINDOW) ||
               pNewRealWindow->GetActivateMode() != ActivateModeFlags::NONE )
     {
-        if ( pSVData->maWinData.mpLastDeacWin )
+        if (pSVData->mpWinData->mpLastDeacWin)
         {
-            if ( pSVData->maWinData.mpLastDeacWin.get() == pNewOverlapWindow )
+            if (pSVData->mpWinData->mpLastDeacWin.get() == pNewOverlapWindow)
                 bCallActivate = false;
             else
             {
-                vcl::Window* pLastRealWindow = pSVData->maWinData.mpLastDeacWin->ImplGetWindow();
-                pSVData->maWinData.mpLastDeacWin->mpWindowImpl->mbActive = false;
-                pSVData->maWinData.mpLastDeacWin->Deactivate();
-                if ( pLastRealWindow != pSVData->maWinData.mpLastDeacWin.get() )
+                vcl::Window* pLastRealWindow = pSVData->mpWinData->mpLastDeacWin->ImplGetWindow();
+                pSVData->mpWinData->mpLastDeacWin->mpWindowImpl->mbActive = false;
+                pSVData->mpWinData->mpLastDeacWin->Deactivate();
+                if (pLastRealWindow != pSVData->mpWinData->mpLastDeacWin.get())
                 {
                     pLastRealWindow->mpWindowImpl->mbActive = true;
                     pLastRealWindow->Activate();
                 }
             }
-            pSVData->maWinData.mpLastDeacWin = nullptr;
+            pSVData->mpWinData->mpLastDeacWin = nullptr;
         }
     }
 
diff --git a/vcl/source/window/floatwin.cxx b/vcl/source/window/floatwin.cxx
index 8257aeea7d7d..bef5dfc13069 100644
--- a/vcl/source/window/floatwin.cxx
+++ b/vcl/source/window/floatwin.cxx
@@ -65,7 +65,7 @@ void FloatingWindow::ImplInit( vcl::Window* pParent, WinBits nStyle )
     SAL_WARN_IF(!pParent, "vcl", "FloatWindow::FloatingWindow(): - pParent == NULL!");
 
     if (!pParent)
-        pParent = ImplGetSVData()->maWinData.mpAppWin;
+        pParent = ImplGetSVData()->maFrameData.mpAppWin;
 
     SAL_WARN_IF(!pParent, "vcl", "FloatWindow::FloatingWindow(): - pParent == NULL and no AppWindow exists");
 
@@ -391,7 +391,7 @@ Point FloatingWindow::ImplCalcPos(vcl::Window* pWindow,
             default: break;
         }
 
-        // no further adjustment for LibreOfficeKit
+        // no further adjustement for LibreOfficeKit
         if (bLOKActive)
             break;
 
@@ -768,8 +768,8 @@ void FloatingWindow::StartPopupMode( const tools::Rectangle& rRect, FloatWinPopu
 
     // add FloatingWindow to list of windows that are in popup mode
     ImplSVData* pSVData = ImplGetSVData();
-    mpNextFloat = pSVData->maWinData.mpFirstFloat;
-    pSVData->maWinData.mpFirstFloat = this;
+    mpNextFloat = pSVData->mpWinData->mpFirstFloat;
+    pSVData->mpWinData->mpFirstFloat = this;
     if (nFlags & FloatWinPopupFlags::GrabFocus)
     {
         // force key input even without focus (useful for menus)
@@ -826,11 +826,11 @@ void FloatingWindow::ImplEndPopupMode( FloatWinPopupEndFlags nFlags, const VclPt
     mbInCleanUp = true; // prevent killing this window due to focus change while working with it
 
     // stop the PopupMode also for all following PopupMode windows
-    while ( pSVData->maWinData.mpFirstFloat && pSVData->maWinData.mpFirstFloat.get() != this )
-        pSVData->maWinData.mpFirstFloat->EndPopupMode( FloatWinPopupEndFlags::Cancel );
+    while (pSVData->mpWinData->mpFirstFloat && pSVData->mpWinData->mpFirstFloat.get() != this)
+        pSVData->mpWinData->mpFirstFloat->EndPopupMode(FloatWinPopupEndFlags::Cancel);
 
     // delete window from the list
-    pSVData->maWinData.mpFirstFloat = mpNextFloat;
+    pSVData->mpWinData->mpFirstFloat = mpNextFloat;
     mpNextFloat = nullptr;
 
     FloatWinPopupFlags nPopupModeFlags = mnPopupModeFlags;
@@ -846,11 +846,11 @@ void FloatingWindow::ImplEndPopupMode( FloatWinPopupEndFlags nFlags, const VclPt
         // restore focus to previous focus window if we still have the focus
         Window::EndSaveFocus(xFocusId);
     }
-    else if ( pSVData->maWinData.mpFocusWin && pSVData->maWinData.mpFirstFloat &&
-              ImplIsWindowOrChild( pSVData->maWinData.mpFocusWin ) )
+    else if ( pSVData->mpWinData->mpFocusWin && pSVData->mpWinData->mpFirstFloat &&
+              ImplIsWindowOrChild( pSVData->mpWinData->mpFocusWin ) )
     {
         // maybe pass focus on to a suitable FloatingWindow
-        pSVData->maWinData.mpFirstFloat->GrabFocus();
+        pSVData->mpWinData->mpFirstFloat->GrabFocus();
     }
 
     mbPopupModeCanceled = bool(nFlags & FloatWinPopupEndFlags::Cancel);
@@ -878,9 +878,9 @@ void FloatingWindow::ImplEndPopupMode( FloatWinPopupEndFlags nFlags, const VclPt
     {
         if ( !(nPopupModeFlags & FloatWinPopupFlags::NewLevel) )
         {
-            if ( pSVData->maWinData.mpFirstFloat )
+            if (pSVData->mpWinData->mpFirstFloat)
             {
-                FloatingWindow* pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
+                FloatingWindow* pLastLevelFloat = pSVData->mpWinData->mpFirstFloat->ImplFindLastLevelFloat();
                 pLastLevelFloat->EndPopupMode( FloatWinPopupEndFlags::Cancel | FloatWinPopupEndFlags::CloseAll );
             }
         }
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
index 2385f432c666..28a11d25c17e 100644
--- a/vcl/source/window/menu.cxx
+++ b/vcl/source/window/menu.cxx
@@ -2850,15 +2850,16 @@ sal_uInt16 PopupMenu::ImplExecute( const VclPtr<vcl::Window>& pW, const tools::R
     bool bRealExecute = false;
     if ( !pStartedFrom )
     {
-        pSVData->maWinData.mbNoDeactivate = true;
+        pSVData->mpWinData->mbNoDeactivate = true;
         xFocusId = Window::SaveFocus();
         bRealExecute = true;
     }
     else
     {
         // assure that only one menu is open at a time
-        if (pStartedFrom->IsMenuBar() && pSVData->maWinData.mpFirstFloat)
-            pSVData->maWinData.mpFirstFloat->EndPopupMode( FloatWinPopupEndFlags::Cancel | FloatWinPopupEndFlags::CloseAll );
+        if (pStartedFrom->IsMenuBar() && pSVData->mpWinData->mpFirstFloat)
+            pSVData->mpWinData->mpFirstFloat->EndPopupMode(FloatWinPopupEndFlags::Cancel
+                                                           | FloatWinPopupEndFlags::CloseAll);
     }
 
     SAL_WARN_IF( ImplGetWindow(), "vcl", "Win?!" );
diff --git a/vcl/source/window/menubarwindow.cxx b/vcl/source/window/menubarwindow.cxx
index 1873570b693f..4eebd3652bbd 100644
--- a/vcl/source/window/menubarwindow.cxx
+++ b/vcl/source/window/menubarwindow.cxx
@@ -481,13 +481,13 @@ void MenuBarWindow::ChangeHighlightItem( sal_uInt16 n, bool bSelectEntry, bool b
     bool bJustActivated = false;
     if ( ( nHighlightedItem == ITEMPOS_INVALID ) && ( n != ITEMPOS_INVALID ) )
     {
-        ImplGetSVData()->maWinData.mbNoDeactivate = true;
+        ImplGetSVData()->mpWinData->mbNoDeactivate = true;
         // #105406# avoid saving the focus when we already have the focus
-        bool bNoSaveFocus = (this == ImplGetSVData()->maWinData.mpFocusWin.get() );
+        bool bNoSaveFocus = (this == ImplGetSVData()->mpWinData->mpFocusWin.get());
 
         if( xSaveFocusId != nullptr )
         {
-            if( !ImplGetSVData()->maWinData.mbNoSaveFocus )
+            if (!ImplGetSVData()->mpWinData->mbNoSaveFocus)
             {
                  xSaveFocusId = nullptr;
                  if( !bNoSaveFocus )
@@ -512,8 +512,8 @@ void MenuBarWindow::ChangeHighlightItem( sal_uInt16 n, bool bSelectEntry, bool b
         pMenu->bInCallback = true;
         pMenu->Deactivate();
         pMenu->bInCallback = false;
-        ImplGetSVData()->maWinData.mbNoDeactivate = false;
-        if( !ImplGetSVData()->maWinData.mbNoSaveFocus )
+        ImplGetSVData()->mpWinData->mbNoDeactivate = false;
+        if (!ImplGetSVData()->mpWinData->mbNoSaveFocus)
         {
             VclPtr<vcl::Window> xTempFocusId;
             if (xSaveFocusId && !xSaveFocusId->isDisposed())
@@ -526,7 +526,7 @@ void MenuBarWindow::ChangeHighlightItem( sal_uInt16 n, bool bSelectEntry, bool b
                 // focus window, so we could avoid sending superfluous activate events
                 // to top window listeners.
                 if (xTempFocusId || bDefaultToDocument)
-                    ImplGetSVData()->maWinData.mpFocusWin = this;
+                    ImplGetSVData()->mpWinData->mpFocusWin = this;
 
                 // #105406# restore focus to document if we could not save focus before
                 if (!xTempFocusId && bDefaultToDocument)
diff --git a/vcl/source/window/menufloatingwindow.cxx b/vcl/source/window/menufloatingwindow.cxx
index 9a6728766672..8db82d51477a 100644
--- a/vcl/source/window/menufloatingwindow.cxx
+++ b/vcl/source/window/menufloatingwindow.cxx
@@ -442,7 +442,7 @@ void MenuFloatingWindow::End()
     xSaveFocusId = nullptr;
     if (xFocusId != nullptr && MenuInHierarchyHasFocus())
     {
-        ImplGetSVData()->maWinData.mbNoDeactivate = false;
+        ImplGetSVData()->mpWinData->mbNoDeactivate = false;
         Window::EndSaveFocus(xFocusId);
     }
 
diff --git a/vcl/source/window/mouse.cxx b/vcl/source/window/mouse.cxx
index 98cb27322aee..01adba1a2b80 100644
--- a/vcl/source/window/mouse.cxx
+++ b/vcl/source/window/mouse.cxx
@@ -147,7 +147,7 @@ void Window::ImplCallMouseMove( sal_uInt16 nMouseCode, bool bModChanged )
         bLeave = ((nX < 0) || (nY < 0) ||
                   (nX >= mpWindowImpl->mpFrameWindow->mnOutWidth) ||
                   (nY >= mpWindowImpl->mpFrameWindow->mnOutHeight)) &&
-                 !ImplGetSVData()->maWinData.mpCaptureWin;
+                 !ImplGetSVData()->mpWinData->mpCaptureWin;
         nMode |= MouseEventModifiers::SYNTHETIC;
         if ( bModChanged )
             nMode |= MouseEventModifiers::MODIFIERCHANGED;
@@ -165,7 +165,7 @@ void Window::ImplGenerateMouseMove()
 IMPL_LINK_NOARG(Window, ImplGenerateMouseMoveHdl, void*, void)
 {
     mpWindowImpl->mpFrameData->mnMouseMoveId = nullptr;
-    vcl::Window* pCaptureWin = ImplGetSVData()->maWinData.mpCaptureWin;
+    vcl::Window* pCaptureWin = ImplGetSVData()->mpWinData->mpCaptureWin;
     if( ! pCaptureWin ||
         (pCaptureWin->mpWindowImpl && pCaptureWin->mpWindowImpl->mpFrame == mpWindowImpl->mpFrame)
     )
@@ -252,7 +252,7 @@ void Window::ImplGrabFocus( GetFocusFlags nFlags )
     ImplSVData* pSVData = ImplGetSVData();
 
     bool bAsyncFocusWaiting = false;
-    vcl::Window *pFrame = pSVData->maWinData.mpFirstFrame;
+    vcl::Window *pFrame = pSVData->maFrameData.mpFirstFrame;
     while( pFrame  )
     {
         if( pFrame != mpWindowImpl->mpFrameWindow.get() && pFrame->mpWindowImpl->mpFrameData->mnFocusId )
@@ -279,15 +279,15 @@ void Window::ImplGrabFocus( GetFocusFlags nFlags )
         pParent = pParent->mpWindowImpl->mpParent;
     }
 
-    if ( !(( pSVData->maWinData.mpFocusWin.get() != this &&
+    if ( !(( pSVData->mpWinData->mpFocusWin.get() != this &&
              !mpWindowImpl->mbInDispose ) ||
            ( bAsyncFocusWaiting && !bHasFocus && !bMustNotGrabFocus )) )
         return;
 
     // EndExtTextInput if it is not the same window
-    if ( pSVData->maWinData.mpExtTextInputWin &&
-         (pSVData->maWinData.mpExtTextInputWin.get() != this) )
-        pSVData->maWinData.mpExtTextInputWin->EndExtTextInput();
+    if (pSVData->mpWinData->mpExtTextInputWin
+        && (pSVData->mpWinData->mpExtTextInputWin.get() != this))
+        pSVData->mpWinData->mpExtTextInputWin->EndExtTextInput();
 
     // mark this windows as the last FocusWindow
     vcl::Window* pOverlapWindow = ImplGetFirstOverlapWindow();
@@ -309,9 +309,9 @@ void Window::ImplGrabFocus( GetFocusFlags nFlags )
         }
     }
 
-    VclPtr<vcl::Window> pOldFocusWindow = pSVData->maWinData.mpFocusWin;
+    VclPtr<vcl::Window> pOldFocusWindow = pSVData->mpWinData->mpFocusWin;
 
-    pSVData->maWinData.mpFocusWin = this;
+    pSVData->mpWinData->mpFocusWin = this;
 
     if ( pOldFocusWindow )
     {
@@ -346,16 +346,16 @@ void Window::ImplGrabFocus( GetFocusFlags nFlags )
     // call Get- and LoseFocus
     if ( pOldFocusWindow && ! pOldFocusWindow->IsDisposed() )
     {
-        if ( pOldFocusWindow->IsTracking() &&
-             (pSVData->maWinData.mnTrackFlags & StartTrackingFlags::FocusCancel) )
-            pOldFocusWindow->EndTracking( TrackingEventFlags::Cancel | TrackingEventFlags::Focus );
+        if (pOldFocusWindow->IsTracking()
+            && (pSVData->mpWinData->mnTrackFlags & StartTrackingFlags::FocusCancel))
+            pOldFocusWindow->EndTracking(TrackingEventFlags::Cancel | TrackingEventFlags::Focus);
         NotifyEvent aNEvt( MouseNotifyEvent::LOSEFOCUS, pOldFocusWindow );
         if ( !ImplCallPreNotify( aNEvt ) )
             pOldFocusWindow->CompatLoseFocus();
         pOldFocusWindow->ImplCallDeactivateListeners( this );
     }
 
-    if ( pSVData->maWinData.mpFocusWin.get() == this )
+    if (pSVData->mpWinData->mpFocusWin.get() == this)
     {
         if ( mpWindowImpl->mpSysObj )
         {
@@ -364,7 +364,7 @@ void Window::ImplGrabFocus( GetFocusFlags nFlags )
                 mpWindowImpl->mpSysObj->GrabFocus();
         }
 
-        if ( pSVData->maWinData.mpFocusWin.get() == this )
+        if (pSVData->mpWinData->mpFocusWin.get() == this)
         {
             if ( mpWindowImpl->mpCursor )
                 mpWindowImpl->mpCursor->ImplShow();
@@ -446,15 +446,15 @@ void Window::CaptureMouse()
     ImplSVData* pSVData = ImplGetSVData();
 
     // possibly stop tracking
-    if ( pSVData->maWinData.mpTrackWin.get() != this )
+    if (pSVData->mpWinData->mpTrackWin.get() != this)
     {
-        if ( pSVData->maWinData.mpTrackWin )
-            pSVData->maWinData.mpTrackWin->EndTracking( TrackingEventFlags::Cancel );
+        if (pSVData->mpWinData->mpTrackWin)
+            pSVData->mpWinData->mpTrackWin->EndTracking(TrackingEventFlags::Cancel);
     }
 
-    if ( pSVData->maWinData.mpCaptureWin.get() != this )
+    if (pSVData->mpWinData->mpCaptureWin.get() != this)
     {
-        pSVData->maWinData.mpCaptureWin = this;
+        pSVData->mpWinData->mpCaptureWin = this;
         mpWindowImpl->mpFrame->CaptureMouse( true );
     }
 }
@@ -464,7 +464,7 @@ void Window::ReleaseMouse()
     if (IsMouseCaptured())
     {
         ImplSVData* pSVData = ImplGetSVData();
-        pSVData->maWinData.mpCaptureWin = nullptr;
+        pSVData->mpWinData->mpCaptureWin = nullptr;
         mpWindowImpl->mpFrame->CaptureMouse( false );
         ImplGenerateMouseMove();
     }
@@ -472,7 +472,7 @@ void Window::ReleaseMouse()
 
 bool Window::IsMouseCaptured() const
 {
-    return (this == ImplGetSVData()->maWinData.mpCaptureWin);
+    return (this == ImplGetSVData()->mpWinData->mpCaptureWin);
 }
 
 void Window::SetPointer( const Pointer& rPointer )
diff --git a/vcl/source/window/msgbox.cxx b/vcl/source/window/msgbox.cxx
index 23f7ca2f5e73..cc0e69582dcc 100644
--- a/vcl/source/window/msgbox.cxx
+++ b/vcl/source/window/msgbox.cxx
@@ -37,7 +37,7 @@
 static void ImplInitMsgBoxImageList()
 {
     ImplSVData* pSVData = ImplGetSVData();
-    std::vector<Image> &rImages = pSVData->maWinData.maMsgBoxImgList;
+    std::vector<Image> &rImages = pSVData->mpWinData->maMsgBoxImgList;
     if (rImages.empty())
     {
         rImages.emplace_back(Image(StockImage::Yes, SV_RESID_BITMAP_ERRORBOX));
@@ -50,7 +50,7 @@ static void ImplInitMsgBoxImageList()
 Image const & GetStandardInfoBoxImage()
 {
     ImplInitMsgBoxImageList();
-    return ImplGetSVData()->maWinData.maMsgBoxImgList[3];
+    return ImplGetSVData()->mpWinData->maMsgBoxImgList[3];
 }
 
 OUString GetStandardInfoBoxText()
@@ -61,7 +61,7 @@ OUString GetStandardInfoBoxText()
 Image const & GetStandardWarningBoxImage()
 {
     ImplInitMsgBoxImageList();
-    return ImplGetSVData()->maWinData.maMsgBoxImgList[2];
+    return ImplGetSVData()->mpWinData->maMsgBoxImgList[2];
 }
 
 OUString GetStandardWarningBoxText()
@@ -72,7 +72,7 @@ OUString GetStandardWarningBoxText()
 Image const & GetStandardErrorBoxImage()
 {
     ImplInitMsgBoxImageList();
-    return ImplGetSVData()->maWinData.maMsgBoxImgList[0];
+    return ImplGetSVData()->mpWinData->maMsgBoxImgList[0];
 }
 
 OUString GetStandardErrorBoxText()
@@ -83,7 +83,7 @@ OUString GetStandardErrorBoxText()
 Image const & GetStandardQueryBoxImage()
 {
     ImplInitMsgBoxImageList();
-    return ImplGetSVData()->maWinData.maMsgBoxImgList[1];
+    return ImplGetSVData()->mpWinData->maMsgBoxImgList[1];
 }
 
 OUString GetStandardQueryBoxText()
diff --git a/vcl/source/window/scrwnd.cxx b/vcl/source/window/scrwnd.cxx
index b5aec1cfb009..cf5bbb6ff546 100644
--- a/vcl/source/window/scrwnd.cxx
+++ b/vcl/source/window/scrwnd.cxx
@@ -51,7 +51,7 @@ ImplWheelWindow::ImplWheelWindow( vcl::Window* pParent ) :
     SAL_WARN_IF( !pParent, "vcl", "ImplWheelWindow::ImplWheelWindow(): Parent not set!" );
 
     const Size      aSize( pParent->GetOutputSizePixel() );
-    const StartAutoScrollFlags nFlags = ImplGetSVData()->maWinData.mnAutoScrollFlags;
+    const StartAutoScrollFlags nFlags = ImplGetSVData()->mpWinData->mnAutoScrollFlags;
     const bool      bHorz( nFlags & StartAutoScrollFlags::Horz );
     const bool      bVert( nFlags & StartAutoScrollFlags::Vert );
 
@@ -235,7 +235,7 @@ void ImplWheelWindow::ImplRecalcScrollValues()
 PointerStyle ImplWheelWindow::ImplGetMousePointer( long nDistX, long nDistY )
 {
     PointerStyle    eStyle;
-    const StartAutoScrollFlags nFlags = ImplGetSVData()->maWinData.mnAutoScrollFlags;
+    const StartAutoScrollFlags nFlags = ImplGetSVData()->mpWinData->mnAutoScrollFlags;
     const bool      bHorz( nFlags & StartAutoScrollFlags::Horz );
     const bool      bVert( nFlags & StartAutoScrollFlags::Vert );
 
@@ -314,7 +314,7 @@ void ImplWheelWindow::MouseMove( const MouseEvent& rMEvt )
     mnActDist = static_cast<sal_uLong>(hypot( static_cast<double>(nDistX), nDistY ));
 
     const PointerStyle  eActStyle = ImplGetMousePointer( nDistX, nDistY );
-    const StartAutoScrollFlags nFlags = ImplGetSVData()->maWinData.mnAutoScrollFlags;
+    const StartAutoScrollFlags nFlags = ImplGetSVData()->mpWinData->mnAutoScrollFlags;
     const bool          bHorz( nFlags & StartAutoScrollFlags::Horz );
     const bool          bVert( nFlags & StartAutoScrollFlags::Vert );
     const bool          bOuter = mnActDist > WHEEL_RADIUS;
diff --git a/vcl/source/window/stacking.cxx b/vcl/source/window/stacking.cxx
index d00ad9f9b5ef..fed866d72cc8 100644
--- a/vcl/source/window/stacking.cxx
+++ b/vcl/source/window/stacking.cxx
@@ -1138,7 +1138,7 @@ bool Window::IsWindowOrChild( const vcl::Window* pWindow, bool bSystemWindow ) c
 
 void Window::ImplSetFrameParent( const vcl::Window* pParent )
 {
-    vcl::Window* pFrameWindow = ImplGetSVData()->maWinData.mpFirstFrame;
+    vcl::Window* pFrameWindow = ImplGetSVData()->maFrameData.mpFirstFrame;
     while( pFrameWindow )
     {
         // search all frames that are children of this window
diff --git a/vcl/source/window/syswin.cxx b/vcl/source/window/syswin.cxx
index 72f2eb5bf46d..6576bae07ed6 100644
--- a/vcl/source/window/syswin.cxx
+++ b/vcl/source/window/syswin.cxx
@@ -697,7 +697,7 @@ void SystemWindow::SetWindowStateData( const WindowStateData& rData )
             {
                 tools::Rectangle aDesktop = GetDesktopRectPixel();
                 ImplSVData *pSVData = ImplGetSVData();
-                vcl::Window *pWin = pSVData->maWinData.mpFirstFrame;
+                vcl::Window *pWin = pSVData->maFrameData.mpFirstFrame;
                 bool bWrapped = false;
                 while( pWin )
                 {
@@ -727,7 +727,7 @@ void SystemWindow::SetWindowStateData( const WindowStateData& rData )
                                 aState.mnX += displacement;
                                 aState.mnY += displacement;
                             }
-                        pWin = pSVData->maWinData.mpFirstFrame; // check new pos again
+                        pWin = pSVData->maFrameData.mpFirstFrame; // check new pos again
                         }
                     }
                     pWin = pWin->mpWindowImpl->mpFrameData->mpNextFrame;
diff --git a/vcl/source/window/taskpanelist.cxx b/vcl/source/window/taskpanelist.cxx
index 1f382b824907..ba8a5175f2c0 100644
--- a/vcl/source/window/taskpanelist.cxx
+++ b/vcl/source/window/taskpanelist.cxx
@@ -180,30 +180,30 @@ bool TaskPaneList::HandleKeyEvent(const KeyEvent& rKeyEvent)
                 return true;
             }
 
-            // activate next task pane
-            vcl::Window *pNextWin = nullptr;
+                // activate next task pane
+                vcl::Window *pNextWin = nullptr;
 
-            if( bSplitterOnly )
-                pNextWin = FindNextSplitter( *p );
-            else
-                pNextWin = FindNextFloat( *p, bForward );
-
-            if( pNextWin != pWin )
-            {
-                ImplGetSVData()->maWinData.mbNoSaveFocus = true;
-                ImplTaskPaneListGrabFocus( pNextWin, bForward );
-                ImplGetSVData()->maWinData.mbNoSaveFocus = false;
-            }
-            else
-            {
-                // forward key if no splitter found
                 if( bSplitterOnly )
-                    return false;
-
-                // we did not find another taskpane, so
-                // put focus back into document
-                pWin->ImplGrabFocusToDocument( GetFocusFlags::F6 | (bForward ? GetFocusFlags::Forward : GetFocusFlags::Backward));
-            }
+                    pNextWin = FindNextSplitter( *p );
+                else
+                    pNextWin = FindNextFloat( *p, bForward );
+
+                if( pNextWin != pWin )
+                {
+                    ImplGetSVData()->mpWinData->mbNoSaveFocus = true;
+                    ImplTaskPaneListGrabFocus( pNextWin, bForward );
+                    ImplGetSVData()->mpWinData->mbNoSaveFocus = false;
+                }
+                else
+                {
+                    // forward key if no splitter found
+                    if( bSplitterOnly )
+                        return false;
+
+                    // we did not find another taskpane, so
+                    // put focus back into document
+                    pWin->ImplGrabFocusToDocument( GetFocusFlags::F6 | (bForward ? GetFocusFlags::Forward : GetFocusFlags::Backward));
+                }
 
             return true;
         }
diff --git a/vcl/source/window/toolbox.cxx b/vcl/source/window/toolbox.cxx
index 9fce6175fead..ef8641986555 100644
--- a/vcl/source/window/toolbox.cxx
+++ b/vcl/source/window/toolbox.cxx
@@ -4470,9 +4470,9 @@ static bool ImplCloseLastPopup( vcl::Window const *pParent )
     // close last popup toolbox (see also:
     // ImplHandleMouseFloatMode(...) in winproc.cxx )
 
-    if( ImplGetSVData()->maWinData.mpFirstFloat )
+    if (ImplGetSVData()->mpWinData->mpFirstFloat)
     {
-        FloatingWindow* pLastLevelFloat = ImplGetSVData()->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
+        FloatingWindow* pLastLevelFloat = ImplGetSVData()->mpWinData->mpFirstFloat->ImplFindLastLevelFloat();
         // only close the floater if it is not our direct parent, which would kill ourself
         if( pLastLevelFloat && pLastLevelFloat != pParent )
         {
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 6d5a73fc8f62..a0e49fbfcfa0 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -242,13 +242,13 @@ void Window::dispose()
     if ( ImplGetSVHelpData().mpHelpWin && (ImplGetSVHelpData().mpHelpWin->GetParent() == this) )
         ImplDestroyHelpWindow( true );
 
-    SAL_WARN_IF( pSVData->maWinData.mpTrackWin.get() == this, "vcl.window",
-                "Window::~Window(): Window is in TrackingMode" );
+    SAL_WARN_IF(pSVData->mpWinData->mpTrackWin.get() == this, "vcl.window",
+                "Window::~Window(): Window is in TrackingMode");
     SAL_WARN_IF(IsMouseCaptured(), "vcl.window",
                 "Window::~Window(): Window has the mouse captured");
 
     // due to old compatibility
-    if ( pSVData->maWinData.mpTrackWin == this )
+    if (pSVData->mpWinData->mpTrackWin == this)
         EndTracking();
     if (IsMouseCaptured())
         ReleaseMouse();
@@ -302,7 +302,7 @@ void Window::dispose()
         }
 
         bError = false;
-        pTempWin = pSVData->maWinData.mpFirstFrame;
+        pTempWin = pSVData->maFrameData.mpFirstFrame;
         while ( pTempWin )
         {
             if ( ImplIsRealParentPath( pTempWin ) )
@@ -402,16 +402,16 @@ void Window::dispose()
     }
 
     // EndExtTextInputMode
-    if ( pSVData->maWinData.mpExtTextInputWin == this )
+    if (pSVData->mpWinData->mpExtTextInputWin == this)
     {
         EndExtTextInput();
-        if ( pSVData->maWinData.mpExtTextInputWin == this )
-            pSVData->maWinData.mpExtTextInputWin = nullptr;
+        if (pSVData->mpWinData->mpExtTextInputWin == this)
+            pSVData->mpWinData->mpExtTextInputWin = nullptr;
     }
 
     // check if the focus window is our child
     bool bHasFocussedChild = false;
-    if( pSVData->maWinData.mpFocusWin && ImplIsRealParentPath( pSVData->maWinData.mpFocusWin ) )
+    if (pSVData->mpWinData->mpFocusWin && ImplIsRealParentPath(pSVData->mpWinData->mpFocusWin))
     {
         // #122232#, this must not happen and is an application bug ! but we try some cleanup to hopefully avoid crashes, see below
         bHasFocussedChild = true;
@@ -425,12 +425,12 @@ void Window::dispose()
 
     // if we get focus pass focus to another window
     vcl::Window* pOverlapWindow = ImplGetFirstOverlapWindow();
-    if ( pSVData->maWinData.mpFocusWin == this
-        || bHasFocussedChild )  // #122232#, see above, try some cleanup
+    if (pSVData->mpWinData->mpFocusWin == this
+        || bHasFocussedChild) // #122232#, see above, try some cleanup
     {
         if ( mpWindowImpl->mbFrame )
         {
-            pSVData->maWinData.mpFocusWin = nullptr;
+            pSVData->mpWinData->mpFocusWin = nullptr;
             pOverlapWindow->mpWindowImpl->mpLastFocusWindow = nullptr;
         }
         else
@@ -453,9 +453,9 @@ void Window::dispose()
                 mpWindowImpl->mpFrameWindow->GrabFocus();
 
             // If the focus was set back to 'this' set it to nothing
-            if ( pSVData->maWinData.mpFocusWin == this )
+            if (pSVData->mpWinData->mpFocusWin == this)
             {
-                pSVData->maWinData.mpFocusWin = nullptr;
+                pSVData->mpWinData->mpFocusWin = nullptr;
                 pOverlapWindow->mpWindowImpl->mpLastFocusWindow = nullptr;
             }
         }
@@ -466,12 +466,12 @@ void Window::dispose()
         pOverlapWindow->mpWindowImpl->mpLastFocusWindow = nullptr;
 
     // reset hint for DefModalDialogParent
-    if( pSVData->maWinData.mpActiveApplicationFrame == this )
-        pSVData->maWinData.mpActiveApplicationFrame = nullptr;
+    if( pSVData->maFrameData.mpActiveApplicationFrame == this )
+        pSVData->maFrameData.mpActiveApplicationFrame = nullptr;
 
     // reset hint of what was the last wheeled window
-    if( pSVData->maWinData.mpLastWheelWindow == this )
-        pSVData->maWinData.mpLastWheelWindow = nullptr;
+    if (pSVData->mpWinData->mpLastWheelWindow == this)
+        pSVData->mpWinData->mpLastWheelWindow = nullptr;
 
     // reset marked windows
     if ( mpWindowImpl->mpFrameData != nullptr )
@@ -485,8 +485,8 @@ void Window::dispose()
     }
 
     // reset Deactivate-Window
-    if ( pSVData->maWinData.mpLastDeacWin == this )
-        pSVData->maWinData.mpLastDeacWin = nullptr;
+    if (pSVData->mpWinData->mpLastDeacWin == this)
+        pSVData->mpWinData->mpLastDeacWin = nullptr;
 
     if ( mpWindowImpl->mbFrame && mpWindowImpl->mpFrameData )
     {
@@ -508,7 +508,8 @@ void Window::dispose()
     // de-register as "top window child" at our parent, if necessary
     if ( mpWindowImpl->mbFrame )
     {
-        bool bIsTopWindow = mpWindowImpl->mpWinData && ( mpWindowImpl->mpWinData->mnIsTopWindow == 1 );
+        bool bIsTopWindow
+            = mpWindowImpl->mpWinData && (mpWindowImpl->mpWinData->mnIsTopWindow == 1);
         if ( mpWindowImpl->mpRealParent && bIsTopWindow )
         {
             ImplWinData* pParentWinData = mpWindowImpl->mpRealParent->ImplGetWinData();
@@ -528,12 +529,12 @@ void Window::dispose()
     mpWindowImpl->mpBorderWindow.disposeAndClear();
     if ( mpWindowImpl->mbFrame )
     {
-        if ( pSVData->maWinData.mpFirstFrame == this )
-            pSVData->maWinData.mpFirstFrame = mpWindowImpl->mpFrameData->mpNextFrame;
+        if ( pSVData->maFrameData.mpFirstFrame == this )
+            pSVData->maFrameData.mpFirstFrame = mpWindowImpl->mpFrameData->mpNextFrame;
         else
         {
             sal_Int32 nWindows = 0;
-            vcl::Window* pSysWin = pSVData->maWinData.mpFirstFrame;
+            vcl::Window* pSysWin = pSVData->maFrameData.mpFirstFrame;
             while ( pSysWin && pSysWin->mpWindowImpl->mpFrameData->mpNextFrame.get() != this )
             {
                 pSysWin = pSysWin->mpWindowImpl->mpFrameData->mpNextFrame;
@@ -766,9 +767,9 @@ ImplWinData::~ImplWinData()
 ImplFrameData::ImplFrameData( vcl::Window *pWindow )
 {
     ImplSVData* pSVData = ImplGetSVData();
-    assert (pSVData->maWinData.mpFirstFrame.get() != pWindow);
-    mpNextFrame        = pSVData->maWinData.mpFirstFrame;
-    pSVData->maWinData.mpFirstFrame = pWindow;
+    assert (pSVData->maFrameData.mpFirstFrame.get() != pWindow);
+    mpNextFrame        = pSVData->maFrameData.mpFirstFrame;
+    pSVData->maFrameData.mpFirstFrame = pWindow;
     mpFirstOverlap     = nullptr;
     mpFocusWin         = nullptr;
     mpMouseMoveWin     = nullptr;
@@ -1216,7 +1217,7 @@ void Window::ImplInitAppFontData( vcl::Window const * pWindow )
 
 ImplWinData* Window::ImplGetWinData() const
 {
-    if ( !mpWindowImpl->mpWinData )
+    if (!mpWindowImpl->mpWinData)
     {
         static const char* pNoNWF = getenv( "SAL_NO_NWF" );
 
@@ -1717,7 +1718,7 @@ void Window::ImplPosSizeWindow( long nX, long nY,
 void Window::ImplNewInputContext()
 {
     ImplSVData* pSVData = ImplGetSVData();
-    vcl::Window*     pFocusWin = pSVData->maWinData.mpFocusWin;
+    vcl::Window* pFocusWin = pSVData->mpWinData->mpFocusWin;
     if ( !pFocusWin )
         return;
 
@@ -2220,7 +2221,7 @@ void Window::Show(bool bVisible, ShowFlags nFlags)
 
             if ( !mpWindowImpl->mbFrame )
             {
-                if( mpWindowImpl->mpWinData && mpWindowImpl->mpWinData->mbEnableNativeWidget )
+                if (mpWindowImpl->mpWinData && mpWindowImpl->mpWinData->mbEnableNativeWidget)
                 {
                     /*
                     * #i48371# native theming: some themes draw outside the control
@@ -2436,11 +2437,9 @@ void Window::Enable( bool bEnable, bool bChild )
     // #i56102# restore app focus win in case the
     // window was disabled when the frame focus changed
     ImplSVData* pSVData = ImplGetSVData();
-    if( bEnable &&
-        pSVData->maWinData.mpFocusWin == nullptr &&
-        mpWindowImpl->mpFrameData->mbHasFocus &&
-        mpWindowImpl->mpFrameData->mpFocusWin == this )
-        pSVData->maWinData.mpFocusWin = this;
+    if (bEnable && pSVData->mpWinData->mpFocusWin == nullptr
+        && mpWindowImpl->mpFrameData->mbHasFocus && mpWindowImpl->mpFrameData->mpFocusWin == this)
+        pSVData->mpWinData->mpFocusWin = this;
 
     if ( mpWindowImpl->mbDisabled != !bEnable )
     {
@@ -2521,11 +2520,9 @@ void Window::EnableInput( bool bEnable, bool bChild )
     // #i56102# restore app focus win in case the
     // window was disabled when the frame focus changed
     ImplSVData* pSVData = ImplGetSVData();
-    if( bEnable &&
-        pSVData->maWinData.mpFocusWin == nullptr &&
-        mpWindowImpl->mpFrameData->mbHasFocus &&
-        mpWindowImpl->mpFrameData->mpFocusWin == this )
-        pSVData->maWinData.mpFocusWin = this;
+    if (bEnable && pSVData->mpWinData->mpFocusWin == nullptr
+        && mpWindowImpl->mpFrameData->mbHasFocus && mpWindowImpl->mpFrameData->mpFocusWin == this)
+        pSVData->mpWinData->mpFocusWin = this;
 
     if ( bChild )
     {
@@ -2574,7 +2571,7 @@ void Window::EnableInput( bool bEnable, const vcl::Window* pExcludeWindow )
     }
 
     // enable/disable floating system windows as well
-    vcl::Window* pFrameWin = ImplGetSVData()->maWinData.mpFirstFrame;
+    vcl::Window* pFrameWin = ImplGetSVData()->maFrameData.mpFirstFrame;
     while ( pFrameWin )
     {
         if( pFrameWin->ImplIsFloatingWindow() )
@@ -3000,7 +2997,7 @@ void Window::GrabFocus()
 
 bool Window::HasFocus() const
 {
-    return (this == ImplGetSVData()->maWinData.mpFocusWin);
+    return (this == ImplGetSVData()->mpWinData->mpFocusWin);
 }
 
 void Window::GrabFocusToDocument()
@@ -3024,7 +3021,7 @@ void Window::SetFakeFocus( bool bFocus )
 bool Window::HasChildPathFocus( bool bSystemWindow ) const
 {
 
-    vcl::Window* pFocusWin = ImplGetSVData()->maWinData.mpFocusWin;
+    vcl::Window* pFocusWin = ImplGetSVData()->mpWinData->mpFocusWin;
     if ( pFocusWin )
         return ImplIsWindowOrChild( pFocusWin, bSystemWindow );
     return false;
@@ -3413,7 +3410,7 @@ void Window::ImplCallActivateListeners( vcl::Window *pOld )
         else if( (mpWindowImpl->mnStyle & WB_INTROWIN) == 0 )
         {
             // top level frame reached: store hint for DefModalDialogParent
-            ImplGetSVData()->maWinData.mpActiveApplicationFrame = mpWindowImpl->mpFrameWindow;
+            ImplGetSVData()->maFrameData.mpActiveApplicationFrame = mpWindowImpl->mpFrameWindow;
         }
     }
 }
@@ -3681,7 +3678,7 @@ void Window::ImplNotifyIconifiedState( bool bIconified )
 bool Window::HasActiveChildFrame()
 {
     bool bRet = false;
-    vcl::Window *pFrameWin = ImplGetSVData()->maWinData.mpFirstFrame;
+    vcl::Window *pFrameWin = ImplGetSVData()->maFrameData.mpFirstFrame;
     while( pFrameWin )
     {
         if( pFrameWin != mpWindowImpl->mpFrameWindow )
diff --git a/vcl/source/window/window2.cxx b/vcl/source/window/window2.cxx
index 3e05a54f0b20..dcf5af8a7eed 100644
--- a/vcl/source/window/window2.cxx
+++ b/vcl/source/window/window2.cxx
@@ -227,7 +227,7 @@ IMPL_LINK( Window, ImplTrackTimerHdl, Timer*, pTimer, void )
     ImplSVData* pSVData = ImplGetSVData();
 
     // if Button-Repeat we have to change the timeout
-    if ( pSVData->maWinData.mnTrackFlags & StartTrackingFlags::ButtonRepeat )
+    if ( pSVData->mpWinData->mnTrackFlags & StartTrackingFlags::ButtonRepeat )
         pTimer->SetTimeout( GetSettings().GetMouseSettings().GetButtonRepeat() );
 
     // create Tracking-Event
@@ -250,27 +250,27 @@ void Window::StartTracking( StartTrackingFlags nFlags )
 {
     ImplSVData* pSVData = ImplGetSVData();
 
-    if ( pSVData->maWinData.mpTrackWin.get() != this )
+    if ( pSVData->mpWinData->mpTrackWin.get() != this )
     {
-        if ( pSVData->maWinData.mpTrackWin )
-            pSVData->maWinData.mpTrackWin->EndTracking( TrackingEventFlags::Cancel );
+        if ( pSVData->mpWinData->mpTrackWin )
+            pSVData->mpWinData->mpTrackWin->EndTracking( TrackingEventFlags::Cancel );
     }
 
     if ( nFlags & (StartTrackingFlags::ScrollRepeat | StartTrackingFlags::ButtonRepeat) )
     {
-        pSVData->maWinData.mpTrackTimer = new AutoTimer;
+        pSVData->mpWinData->mpTrackTimer = new AutoTimer;
 
         if ( nFlags & StartTrackingFlags::ScrollRepeat )
-            pSVData->maWinData.mpTrackTimer->SetTimeout( MouseSettings::GetScrollRepeat() );
+            pSVData->mpWinData->mpTrackTimer->SetTimeout( MouseSettings::GetScrollRepeat() );
         else
-            pSVData->maWinData.mpTrackTimer->SetTimeout( MouseSettings::GetButtonStartRepeat() );
-        pSVData->maWinData.mpTrackTimer->SetInvokeHandler( LINK( this, Window, ImplTrackTimerHdl ) );
-        pSVData->maWinData.mpTrackTimer->SetDebugName( "vcl::Window pSVData->maWinData.mpTrackTimer" );
-        pSVData->maWinData.mpTrackTimer->Start();
+            pSVData->mpWinData->mpTrackTimer->SetTimeout( MouseSettings::GetButtonStartRepeat() );
+        pSVData->mpWinData->mpTrackTimer->SetInvokeHandler( LINK( this, Window, ImplTrackTimerHdl ) );
+        pSVData->mpWinData->mpTrackTimer->SetDebugName( "vcl::Window pSVData->mpWinData->mpTrackTimer" );
+        pSVData->mpWinData->mpTrackTimer->Start();
     }
 
-    pSVData->maWinData.mpTrackWin   = this;
-    pSVData->maWinData.mnTrackFlags = nFlags;
+    pSVData->mpWinData->mpTrackWin   = this;
+    pSVData->mpWinData->mnTrackFlags = nFlags;
     CaptureMouse();
 }
 
@@ -278,20 +278,20 @@ void Window::EndTracking( TrackingEventFlags nFlags )
 {
     ImplSVData* pSVData = ImplGetSVData();
 
-    if ( pSVData->maWinData.mpTrackWin.get() == this )
+    if ( pSVData->mpWinData->mpTrackWin.get() == this )
     {
         // due to DbgChkThis in brackets, as the window could be destroyed
         // in the handler
         {
 
-        if ( pSVData->maWinData.mpTrackTimer )
+        if ( pSVData->mpWinData->mpTrackTimer )
         {
-            delete pSVData->maWinData.mpTrackTimer;
-            pSVData->maWinData.mpTrackTimer = nullptr;
+            delete pSVData->mpWinData->mpTrackTimer;
+            pSVData->mpWinData->mpTrackTimer = nullptr;
         }
 
-        pSVData->maWinData.mpTrackWin    = nullptr;
-        pSVData->maWinData.mnTrackFlags  = StartTrackingFlags::NONE;
+        pSVData->mpWinData->mpTrackWin    = nullptr;
+        pSVData->mpWinData->mnTrackFlags  = StartTrackingFlags::NONE;
         ReleaseMouse();
         }
 
@@ -322,21 +322,21 @@ void Window::EndTracking( TrackingEventFlags nFlags )
 
 bool Window::IsTracking() const
 {
-    return (ImplGetSVData()->maWinData.mpTrackWin == this);
+    return (ImplGetSVData()->mpWinData->mpTrackWin == this);
 }
 
 void Window::StartAutoScroll( StartAutoScrollFlags nFlags )
 {
     ImplSVData* pSVData = ImplGetSVData();
 
-    if ( pSVData->maWinData.mpAutoScrollWin.get() != this )
+    if ( pSVData->mpWinData->mpAutoScrollWin.get() != this )
     {
-        if ( pSVData->maWinData.mpAutoScrollWin )
-            pSVData->maWinData.mpAutoScrollWin->EndAutoScroll();
+        if ( pSVData->mpWinData->mpAutoScrollWin )
+            pSVData->mpWinData->mpAutoScrollWin->EndAutoScroll();
     }
 
-    pSVData->maWinData.mpAutoScrollWin = this;
-    pSVData->maWinData.mnAutoScrollFlags = nFlags;
+    pSVData->mpWinData->mpAutoScrollWin = this;
+    pSVData->mpWinData->mnAutoScrollFlags = nFlags;
     pSVData->maAppData.mpWheelWindow = VclPtr<ImplWheelWindow>::Create( this );
 }
 
@@ -344,10 +344,10 @@ void Window::EndAutoScroll()
 {
     ImplSVData* pSVData = ImplGetSVData();
 
-    if ( pSVData->maWinData.mpAutoScrollWin.get() == this )
+    if ( pSVData->mpWinData->mpAutoScrollWin.get() == this )
     {
-        pSVData->maWinData.mpAutoScrollWin = nullptr;
-        pSVData->maWinData.mnAutoScrollFlags = StartAutoScrollFlags::NONE;
+        pSVData->mpWinData->mpAutoScrollWin = nullptr;
+        pSVData->mpWinData->mnAutoScrollFlags = StartAutoScrollFlags::NONE;
         pSVData->maAppData.mpWheelWindow->ImplStop();
         pSVData->maAppData.mpWheelWindow->SetParentToDefaultWindow();
         pSVData->maAppData.mpWheelWindow.disposeAndClear();
@@ -357,9 +357,9 @@ void Window::EndAutoScroll()
 VclPtr<vcl::Window> Window::SaveFocus()
 {
     ImplSVData* pSVData = ImplGetSVData();
-    if ( pSVData->maWinData.mpFocusWin )
+    if ( pSVData->mpWinData->mpFocusWin )
     {
-        return pSVData->maWinData.mpFocusWin;
+        return pSVData->mpWinData->mpFocusWin;
     }
     else
         return nullptr;
@@ -822,7 +822,7 @@ void Window::EnableDocking( bool bEnable )
         ImplGetDockingManager()->RemoveWindow( this );
 }
 
-// retrieves the list of owner draw decorated windows for this window hierarchy
+// retrieves the list of owner draw decorated windows for this window hiearchy
 ::std::vector<VclPtr<vcl::Window> >& Window::ImplGetOwnerDrawList()
 {
     return ImplGetTopmostFrameWindow()->mpWindowImpl->mpFrameData->maOwnerDrawList;
diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx
index 6b5f48d68444..b3ea4f5bf97e 100644
--- a/vcl/source/window/winproc.cxx
+++ b/vcl/source/window/winproc.cxx
@@ -69,15 +69,15 @@ static bool ImplHandleMouseFloatMode( vcl::Window* pChild, const Point& rMousePo
 {
     ImplSVData* pSVData = ImplGetSVData();
 
-    if ( pSVData->maWinData.mpFirstFloat && !pSVData->maWinData.mpCaptureWin &&
-         !pSVData->maWinData.mpFirstFloat->ImplIsFloatPopupModeWindow( pChild ) )
+    if (pSVData->mpWinData->mpFirstFloat && !pSVData->mpWinData->mpCaptureWin
+        && !pSVData->mpWinData->mpFirstFloat->ImplIsFloatPopupModeWindow(pChild))
     {
         /*
          *  #93895# since floats are system windows, coordinates have
          *  to be converted to float relative for the hittest
          */
         HitTest         nHitTest = HITTEST_OUTSIDE;
-        FloatingWindow* pFloat = pSVData->maWinData.mpFirstFloat->ImplFloatHitTest( pChild, rMousePos, nHitTest );
+        FloatingWindow* pFloat = pSVData->mpWinData->mpFirstFloat->ImplFloatHitTest( pChild, rMousePos, nHitTest );
         FloatingWindow* pLastLevelFloat;
         FloatWinPopupFlags nPopupFlags;
         if ( nSVEvent == MouseNotifyEvent::MOUSEMOVE )
@@ -101,7 +101,7 @@ static bool ImplHandleMouseFloatMode( vcl::Window* pChild, const Point& rMousePo
                 {
                     if ( !pFloat )
                     {
-                        pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
+                        pLastLevelFloat = pSVData->mpWinData->mpFirstFloat->ImplFindLastLevelFloat();
                         pLastLevelFloat->EndPopupMode( FloatWinPopupEndFlags::Cancel | FloatWinPopupEndFlags::CloseAll );
                         return true;
                     }
@@ -124,7 +124,7 @@ static bool ImplHandleMouseFloatMode( vcl::Window* pChild, const Point& rMousePo
                     }
                     else
                     {
-                        pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
+                        pLastLevelFloat = pSVData->mpWinData->mpFirstFloat->ImplFindLastLevelFloat();
                         nPopupFlags = pLastLevelFloat->GetPopupModeFlags();
                         if ( !(nPopupFlags & FloatWinPopupFlags::NoMouseUpClose) )
                         {
@@ -138,7 +138,7 @@ static bool ImplHandleMouseFloatMode( vcl::Window* pChild, const Point& rMousePo
             {
                 if ( !pFloat )
                 {
-                    pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
+                    pLastLevelFloat = pSVData->mpWinData->mpFirstFloat->ImplFindLastLevelFloat();
                     nPopupFlags = pLastLevelFloat->GetPopupModeFlags();
                     if ( nPopupFlags & FloatWinPopupFlags::AllMouseButtonClose )
                     {
@@ -327,21 +327,21 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
     else
         pWinFrameData->mbMouseIn = true;
 
-    DBG_ASSERT( !pSVData->maWinData.mpTrackWin ||
-                (pSVData->maWinData.mpTrackWin == pSVData->maWinData.mpCaptureWin),
-                "ImplHandleMouseEvent: TrackWin != CaptureWin" );
+    DBG_ASSERT(!pSVData->mpWinData->mpTrackWin
+                   || (pSVData->mpWinData->mpTrackWin == pSVData->mpWinData->mpCaptureWin),
+               "ImplHandleMouseEvent: TrackWin != CaptureWin");
 
     // AutoScrollMode
-    if ( pSVData->maWinData.mpAutoScrollWin && (nSVEvent == MouseNotifyEvent::MOUSEBUTTONDOWN) )
+    if (pSVData->mpWinData->mpAutoScrollWin && (nSVEvent == MouseNotifyEvent::MOUSEBUTTONDOWN))
     {
-        pSVData->maWinData.mpAutoScrollWin->EndAutoScroll();
+        pSVData->mpWinData->mpAutoScrollWin->EndAutoScroll();
         return true;
     }
 
     // find mouse window
-    if ( pSVData->maWinData.mpCaptureWin )
+    if (pSVData->mpWinData->mpCaptureWin)
     {
-        pChild = pSVData->maWinData.mpCaptureWin;
+        pChild = pSVData->mpWinData->mpCaptureWin;
 
         SAL_WARN_IF( xWindow != pChild->ImplGetFrameWindow(), "vcl",
                     "ImplHandleMouseEvent: mouse event is not sent to capture window" );
@@ -378,7 +378,8 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
 
         // no mouse messages to disabled windows
         // #106845# if the window was disabled during capturing we have to pass the mouse events to release capturing
-        if ( pSVData->maWinData.mpCaptureWin.get() != pChild && (!pChild->IsEnabled() || !pChild->IsInputEnabled() || pChild->IsInModalMode() ) )
+        if (pSVData->mpWinData->mpCaptureWin.get() != pChild
+            && (!pChild->IsEnabled() || !pChild->IsInputEnabled() || pChild->IsInModalMode()))
         {
             ImplHandleMouseFloatMode( pChild, aMousePos, nCode, nSVEvent, bMouseLeave );
             if ( nSVEvent == MouseNotifyEvent::MOUSEMOVE )
@@ -412,10 +413,10 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
         }
 
         // End ExtTextInput-Mode, if the user click in the same TopLevel Window
-        if ( pSVData->maWinData.mpExtTextInputWin &&
-             ((nSVEvent == MouseNotifyEvent::MOUSEBUTTONDOWN) ||
-              (nSVEvent == MouseNotifyEvent::MOUSEBUTTONUP)) )
-            pSVData->maWinData.mpExtTextInputWin->EndExtTextInput();
+        if (pSVData->mpWinData->mpExtTextInputWin
+            && ((nSVEvent == MouseNotifyEvent::MOUSEBUTTONDOWN)
+                || (nSVEvent == MouseNotifyEvent::MOUSEBUTTONUP)))
+            pSVData->mpWinData->mpExtTextInputWin->EndExtTextInput();
     }
 
     // determine mouse event data
@@ -615,11 +616,11 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
 
 
     // tracking window gets the mouse events
-    if ( pSVData->maWinData.mpTrackWin )
-        pChild = pSVData->maWinData.mpTrackWin;
+    if (pSVData->mpWinData->mpTrackWin)
+        pChild = pSVData->mpWinData->mpTrackWin;
 
     // handle FloatingMode
-    if ( !pSVData->maWinData.mpTrackWin && pSVData->maWinData.mpFirstFloat )
+    if (!pSVData->mpWinData->mpTrackWin && pSVData->mpWinData->mpFirstFloat)
     {
         if ( ImplHandleMouseFloatMode( pChild, aMousePos, nCode, nSVEvent, bMouseLeave ) )
         {
@@ -645,8 +646,10 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
     // bring window into foreground on mouseclick
     if ( nSVEvent == MouseNotifyEvent::MOUSEBUTTONDOWN )
     {
-        if( !pSVData->maWinData.mpFirstFloat && // totop for floating windows in popup would change the focus and would close them immediately
-            !(pChild->ImplGetFrameWindow()->GetStyle() & WB_OWNERDRAWDECORATION) )    // ownerdrawdecorated windows must never grab focus
+        if (!pSVData->mpWinData->mpFirstFloat
+            && // totop for floating windows in popup would change the focus and would close them immediately
+            !(pChild->ImplGetFrameWindow()->GetStyle()
+              & WB_OWNERDRAWDECORATION)) // ownerdrawdecorated windows must never grab focus
             pChild->ToTop();
         if ( pChild->IsDisposed() )
             return true;
@@ -659,16 +662,16 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
         bRet = false;
         if ( nSVEvent == MouseNotifyEvent::MOUSEMOVE )
         {
-            if ( pSVData->maWinData.mpTrackWin )
+            if (pSVData->mpWinData->mpTrackWin)
             {
                 TrackingEvent aTEvt( aMEvt );
                 pChild->Tracking( aTEvt );
                 if ( !pChild->IsDisposed() )
                 {
                     // When ScrollRepeat, we restart the timer
-                    if ( pSVData->maWinData.mpTrackTimer &&
-                         (pSVData->maWinData.mnTrackFlags & StartTrackingFlags::ScrollRepeat) )
-                        pSVData->maWinData.mpTrackTimer->Start();
+                    if (pSVData->mpWinData->mpTrackTimer
+                        && (pSVData->mpWinData->mnTrackFlags & StartTrackingFlags::ScrollRepeat))
+                        pSVData->mpWinData->mpTrackTimer->Start();
                 }
                 bCallHelpRequest = false;
                 bRet = true;
@@ -676,8 +679,9 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
             else
             {
                 // Auto-ToTop
-                if ( !pSVData->maWinData.mpCaptureWin &&
-                     (pChild->GetSettings().GetMouseSettings().GetOptions() & MouseSettingsOptions::AutoFocus) )
+                if (!pSVData->mpWinData->mpCaptureWin
+                    && (pChild->GetSettings().GetMouseSettings().GetOptions()
+                        & MouseSettingsOptions::AutoFocus))
                     pChild->ToTop( ToTopFlags::NoGrabFocus );
 
                 if( pChild->IsDisposed() )
@@ -695,8 +699,8 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
         }
         else if ( nSVEvent == MouseNotifyEvent::MOUSEBUTTONDOWN )
         {
-            if ( pSVData->maWinData.mpTrackWin &&
-                 !(pSVData->maWinData.mnTrackFlags & StartTrackingFlags::MouseButtonDown) )
+            if (pSVData->mpWinData->mpTrackWin
+                && !(pSVData->mpWinData->mnTrackFlags & StartTrackingFlags::MouseButtonDown))
                 bRet = true;
             else
             {
@@ -706,7 +710,7 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
         }
         else
         {
-            if ( pSVData->maWinData.mpTrackWin )
+            if (pSVData->mpWinData->mpTrackWin)
             {
                 pChild->EndTracking();
                 bRet = true;
@@ -817,7 +821,7 @@ static vcl::Window* ImplGetKeyInputWindow( vcl::Window* pWindow )
     // focus or the last time the focus.
 
     // the first floating window always has the focus, try it, or any parent floating windows, first
-    vcl::Window* pChild = pSVData->maWinData.mpFirstFloat;
+    vcl::Window* pChild = pSVData->mpWinData->mpFirstFloat;
     while (pChild)
     {
         if (pChild->ImplGetWindowImpl()->mbFloatWin)
@@ -848,8 +852,8 @@ static vcl::Window* ImplGetKeyInputWindow( vcl::Window* pWindow )
     // system this is often the case when a Lookup Choice Window has
     // the focus - because this windows send the KeyInput directly to
     // the window without resetting the focus
-    SAL_WARN_IF( pChild != pSVData->maWinData.mpFocusWin, "vcl",
-                       "ImplHandleKey: Keyboard-Input is sent to a frame without focus" );
+    SAL_WARN_IF(pChild != pSVData->mpWinData->mpFocusWin, "vcl",
+                "ImplHandleKey: Keyboard-Input is sent to a frame without focus");
 
     // no keyinput to disabled windows
     if ( !pChild->IsEnabled() || !pChild->IsInputEnabled() || pChild->IsInModalMode() )
@@ -916,23 +920,24 @@ static bool ImplHandleKey( vcl::Window* pWindow, MouseNotifyEvent nSVEvent,
             ImplDestroyHelpWindow( false );
 
         // AutoScrollMode
-        if ( pSVData->maWinData.mpAutoScrollWin )
+        if (pSVData->mpWinData->mpAutoScrollWin)
         {
-            pSVData->maWinData.mpAutoScrollWin->EndAutoScroll();
+            pSVData->mpWinData->mpAutoScrollWin->EndAutoScroll();
             if ( nEvCode == KEY_ESCAPE )
                 return true;
         }
 
-        if ( pSVData->maWinData.mpTrackWin )
+        if (pSVData->mpWinData->mpTrackWin)
         {
             sal_uInt16 nOrigCode = aKeyCode.GetCode();
 
-            if ( (nOrigCode == KEY_ESCAPE) && !(pSVData->maWinData.mnTrackFlags & StartTrackingFlags::NoKeyCancel) )
+            if ((nOrigCode == KEY_ESCAPE)
+                && !(pSVData->mpWinData->mnTrackFlags & StartTrackingFlags::NoKeyCancel))
             {
-                pSVData->maWinData.mpTrackWin->EndTracking( TrackingEventFlags::Cancel | TrackingEventFlags::Key );
-                if ( pSVData->maWinData.mpFirstFloat )
+                pSVData->mpWinData->mpTrackWin->EndTracking( TrackingEventFlags::Cancel | TrackingEventFlags::Key );
+                if (pSVData->mpWinData->mpFirstFloat)
                 {
-                    FloatingWindow* pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
+                    FloatingWindow* pLastLevelFloat = pSVData->mpWinData->mpFirstFloat->ImplFindLastLevelFloat();
                     if ( !(pLastLevelFloat->GetPopupModeFlags() & FloatWinPopupFlags::NoKeyClose) )
                     {
                         sal_uInt16 nEscCode = aKeyCode.GetCode();
@@ -945,17 +950,17 @@ static bool ImplHandleKey( vcl::Window* pWindow, MouseNotifyEvent nSVEvent,
             }
             else if ( nOrigCode == KEY_RETURN )
             {
-                pSVData->maWinData.mpTrackWin->EndTracking( TrackingEventFlags::Key );
+                pSVData->mpWinData->mpTrackWin->EndTracking( TrackingEventFlags::Key );
                 return true;
             }
-            else if ( !(pSVData->maWinData.mnTrackFlags & StartTrackingFlags::KeyInput) )
+            else if (!(pSVData->mpWinData->mnTrackFlags & StartTrackingFlags::KeyInput))
                 return true;
         }
 
         // handle FloatingMode
-        if ( pSVData->maWinData.mpFirstFloat )
+        if (pSVData->mpWinData->mpFirstFloat)
         {
-            FloatingWindow* pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
+            FloatingWindow* pLastLevelFloat = pSVData->mpWinData->mpFirstFloat->ImplFindLastLevelFloat();
             if ( !(pLastLevelFloat->GetPopupModeFlags() & FloatWinPopupFlags::NoKeyClose) )
             {
                 sal_uInt16 nCode = aKeyCode.GetCode();
@@ -1135,7 +1140,7 @@ static bool ImplHandleExtTextInput( vcl::Window* pWindow,
     int nTries = 200;
     while( nTries-- )
     {
-        pChild = pSVData->maWinData.mpExtTextInputWin;
+        pChild = pSVData->mpWinData->mpExtTextInputWin;
         if ( !pChild )
         {
             pChild = ImplGetKeyInputWindow( pWindow );
@@ -1161,7 +1166,7 @@ static bool ImplHandleExtTextInput( vcl::Window* pWindow,
         pChild->ImplGetWindowImpl()->mbExtTextInput = true;
         pWinData->mpExtOldText = OUString();
         pWinData->mpExtOldAttrAry.reset();
-        pSVData->maWinData.mpExtTextInputWin = pChild;
+        pSVData->mpWinData->mpExtTextInputWin = pChild;
         ImplCallCommand( pChild, CommandEventId::StartExtTextInput );
     }
 
@@ -1218,13 +1223,13 @@ static bool ImplHandleExtTextInput( vcl::Window* pWindow,
 static bool ImplHandleEndExtTextInput()
 {
     ImplSVData* pSVData = ImplGetSVData();
-    vcl::Window*     pChild = pSVData->maWinData.mpExtTextInputWin;
-    bool        bRet = false;
+    vcl::Window* pChild = pSVData->mpWinData->mpExtTextInputWin;
+    bool bRet = false;
 
     if ( pChild )
     {
         pChild->ImplGetWindowImpl()->mbExtTextInput = false;
-        pSVData->maWinData.mpExtTextInputWin = nullptr;
+        pSVData->mpWinData->mpExtTextInputWin = nullptr;
         ImplWinData* pWinData = pChild->ImplGetWinData();
         pWinData->mpExtOldText.reset();
         pWinData->mpExtOldAttrAry.reset();
@@ -1239,7 +1244,7 @@ static void ImplHandleExtTextInputPos( vcl::Window* pWindow,
                                        bool * pVertical )
 {
     ImplSVData* pSVData = ImplGetSVData();
-    vcl::Window*     pChild = pSVData->maWinData.mpExtTextInputWin;
+    vcl::Window* pChild = pSVData->mpWinData->mpExtTextInputWin;
 
     if ( !pChild )
         pChild = ImplGetKeyInputWindow( pWindow );
@@ -1348,8 +1353,8 @@ public:
 bool HandleGestureEventBase::Setup()
 {
 
-    if (m_pSVData->maWinData.mpAutoScrollWin)
-        m_pSVData->maWinData.mpAutoScrollWin->EndAutoScroll();
+    if (m_pSVData->mpWinData->mpAutoScrollWin)
+        m_pSVData->mpWinData->mpAutoScrollWin->EndAutoScroll();
     if (ImplGetSVHelpData().mpHelpWin)
         ImplDestroyHelpWindow( true );
     return !m_pWindow->IsDisposed();
@@ -1360,13 +1365,13 @@ vcl::Window* HandleGestureEventBase::FindTarget()
     // first check any floating window ( eg. drop down listboxes)
     vcl::Window *pMouseWindow = nullptr;
 
-    if (m_pSVData->maWinData.mpFirstFloat && !m_pSVData->maWinData.mpCaptureWin &&
-         !m_pSVData->maWinData.mpFirstFloat->ImplIsFloatPopupModeWindow( m_pWindow ) )
+    if (m_pSVData->mpWinData->mpFirstFloat && !m_pSVData->mpWinData->mpCaptureWin &&
+         !m_pSVData->mpWinData->mpFirstFloat->ImplIsFloatPopupModeWindow( m_pWindow ) )
     {
         HitTest nHitTest = HITTEST_OUTSIDE;
-        pMouseWindow = m_pSVData->maWinData.mpFirstFloat->ImplFloatHitTest( m_pWindow, m_aMousePos, nHitTest );
+        pMouseWindow = m_pSVData->mpWinData->mpFirstFloat->ImplFloatHitTest( m_pWindow, m_aMousePos, nHitTest );
         if (!pMouseWindow)
-            pMouseWindow = m_pSVData->maWinData.mpFirstFloat;
+            pMouseWindow = m_pSVData->mpWinData->mpFirstFloat;
     }
     // then try the window directly beneath the mouse
     if( !pMouseWindow )
@@ -1415,7 +1420,7 @@ vcl::Window *HandleGestureEventBase::Dispatch(vcl::Window* pMouseWindow)
     {
         vcl::Window* pFocusWindow = m_pWindow->ImplGetWindowImpl()->mpFrameData->mpFocusWin;
         if ( pFocusWindow && (pFocusWindow != pMouseWindow) &&
-             (pFocusWindow == m_pSVData->maWinData.mpFocusWin) )
+             (pFocusWindow == m_pSVData->mpWinData->mpFocusWin) )
         {
             // no wheel-messages to disabled windows
             if ( pFocusWindow->IsEnabled() && pFocusWindow->IsInputEnabled() && ! pFocusWindow->IsInModalMode() )
@@ -1480,17 +1485,17 @@ bool HandleWheelEvent::HandleEvent(const SalWheelMouseEvent& rEvt)
     // avoid the problem that scrolling via wheel to this point brings a widget
     // under the mouse that also accepts wheel commands, so stick with the old
     // widget if the time gap is very small
-    if (shouldReusePreviousMouseWindow(pSVData->maWinData.maLastWheelEvent, rEvt) &&
-        acceptableWheelScrollTarget(pSVData->maWinData.mpLastWheelWindow))
+    if (shouldReusePreviousMouseWindow(pSVData->mpWinData->maLastWheelEvent, rEvt) &&
+        acceptableWheelScrollTarget(pSVData->mpWinData->mpLastWheelWindow))
     {
-        xMouseWindow = pSVData->maWinData.mpLastWheelWindow;
+        xMouseWindow = pSVData->mpWinData->mpLastWheelWindow;
     }
 
-    pSVData->maWinData.maLastWheelEvent = rEvt;
+    pSVData->mpWinData->maLastWheelEvent = rEvt;
 
-    pSVData->maWinData.mpLastWheelWindow = Dispatch(xMouseWindow);
+    pSVData->mpWinData->mpLastWheelWindow = Dispatch(xMouseWindow);
 
-    return pSVData->maWinData.mpLastWheelWindow.get();
+    return pSVData->mpWinData->mpLastWheelWindow.get();
 }
 
 class HandleGestureEvent : public HandleGestureEventBase
@@ -1610,11 +1615,13 @@ static void KillOwnPopups( vcl::Window const * pWindow )
 {
     ImplSVData* pSVData = ImplGetSVData();
     vcl::Window *pParent = pWindow->ImplGetWindowImpl()->mpFrameWindow;
-    vcl::Window *pChild = pSVData->maWinData.mpFirstFloat;
+    vcl::Window *pChild = pSVData->mpWinData->mpFirstFloat;
     if ( pChild && pParent->ImplIsWindowOrChild( pChild, true ) )
     {
-        if ( !(pSVData->maWinData.mpFirstFloat->GetPopupModeFlags() & FloatWinPopupFlags::NoAppFocusClose) )
-            pSVData->maWinData.mpFirstFloat->EndPopupMode( FloatWinPopupEndFlags::Cancel | FloatWinPopupEndFlags::CloseAll );
+        if (!(pSVData->mpWinData->mpFirstFloat->GetPopupModeFlags()
+              & FloatWinPopupFlags::NoAppFocusClose))
+            pSVData->mpWinData->mpFirstFloat->EndPopupMode(FloatWinPopupEndFlags::Cancel
+                                                           | FloatWinPopupEndFlags::CloseAll);
     }
 }
 
@@ -1780,8 +1787,9 @@ IMPL_LINK_NOARG(vcl::Window, ImplAsyncFocusHdl, void*, void)
                 ImplSVData* pSVData = ImplGetSVData();
                 vcl::Window*     pTopLevelWindow = ImplGetWindowImpl()->mpFrameData->mpFocusWin->ImplGetFirstOverlapWindow();
 
-                if ((!pTopLevelWindow->IsInputEnabled() || pTopLevelWindow->IsInModalMode()) && !pSVData->maWinData.mpExecuteDialogs.empty())
-                    pSVData->maWinData.mpExecuteDialogs.back()->ToTop(ToTopFlags::RestoreWhenMin | ToTopFlags::GrabFocusOnly);
+                if ((!pTopLevelWindow->IsInputEnabled() || pTopLevelWindow->IsInModalMode())
+                    && !pSVData->mpWinData->mpExecuteDialogs.empty())
+                    pSVData->mpWinData->mpExecuteDialogs.back()->ToTop(ToTopFlags::RestoreWhenMin | ToTopFlags::GrabFocusOnly);
                 else
                     pTopLevelWindow->GrabFocus();
             }
@@ -1796,12 +1804,12 @@ IMPL_LINK_NOARG(vcl::Window, ImplAsyncFocusHdl, void*, void)
         {
             ImplSVData* pSVData = ImplGetSVData();
 
-            if ( pSVData->maWinData.mpFocusWin == pFocusWin )
+            if (pSVData->mpWinData->mpFocusWin == pFocusWin)
             {
                 // transfer the FocusWindow
                 vcl::Window* pOverlapWindow = pFocusWin->ImplGetFirstOverlapWindow();
                 pOverlapWindow->ImplGetWindowImpl()->mpLastFocusWindow = pFocusWin;
-                pSVData->maWinData.mpFocusWin = nullptr;
+                pSVData->mpWinData->mpFocusWin = nullptr;
 
                 if ( pFocusWin->ImplGetWindowImpl()->mpCursor )
                     pFocusWin->ImplGetWindowImpl()->mpCursor->ImplHide();
@@ -1858,14 +1866,14 @@ static void ImplHandleLoseFocus( vcl::Window* pWindow )
     ImplSVData* pSVData = ImplGetSVData();
 
     // Abort the autoscroll if the frame loses focus
-    if ( pSVData->maWinData.mpAutoScrollWin )
-        pSVData->maWinData.mpAutoScrollWin->EndAutoScroll();
+    if (pSVData->mpWinData->mpAutoScrollWin)
+        pSVData->mpWinData->mpAutoScrollWin->EndAutoScroll();
 
     // Abort tracking if the frame loses focus
-    if ( pSVData->maWinData.mpTrackWin )
+    if (pSVData->mpWinData->mpTrackWin)
     {
-        if ( pSVData->maWinData.mpTrackWin->ImplGetWindowImpl()->mpFrameWindow == pWindow )
-            pSVData->maWinData.mpTrackWin->EndTracking( TrackingEventFlags::Cancel );
+        if (pSVData->mpWinData->mpTrackWin->ImplGetWindowImpl()->mpFrameWindow == pWindow)
+            pSVData->mpWinData->mpTrackWin->EndTracking(TrackingEventFlags::Cancel);
     }
 
     pWindow->ImplGetWindowImpl()->mpFrameData->mbHasFocus = false;
@@ -1883,7 +1891,7 @@ static void ImplHandleLoseFocus( vcl::Window* pWindow )
         pFocusWin->ImplGetWindowImpl()->mpCursor->ImplHide();
 
     // Make sure that no menu is visible when a toplevel window loses focus.
-    VclPtr<FloatingWindow> pFirstFloat = pSVData->maWinData.mpFirstFloat;
+    VclPtr<FloatingWindow> pFirstFloat = pSVData->mpWinData->mpFirstFloat;
     if (pFirstFloat && !pWindow->GetParent())
         pFirstFloat->EndPopupMode(FloatWinPopupEndFlags::Cancel | FloatWinPopupEndFlags::CloseAll);
 }
@@ -1920,10 +1928,10 @@ static void ImplHandleClose( vcl::Window* pWindow )
     }
 
     // on Close stop all floating modes and end popups
-    if ( pSVData->maWinData.mpFirstFloat )
+    if (pSVData->mpWinData->mpFirstFloat)
     {
         FloatingWindow* pLastLevelFloat;
-        pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
+        pLastLevelFloat = pSVData->mpWinData->mpFirstFloat->ImplFindLastLevelFloat();
         pLastLevelFloat->EndPopupMode( FloatWinPopupEndFlags::Cancel | FloatWinPopupEndFlags::CloseAll );
     }
     if ( ImplGetSVHelpData().mbExtHelpMode )
@@ -1931,11 +1939,11 @@ static void ImplHandleClose( vcl::Window* pWindow )
     if ( ImplGetSVHelpData().mpHelpWin )
         ImplDestroyHelpWindow( false );
     // AutoScrollMode
-    if ( pSVData->maWinData.mpAutoScrollWin )
-        pSVData->maWinData.mpAutoScrollWin->EndAutoScroll();
+    if (pSVData->mpWinData->mpAutoScrollWin)
+        pSVData->mpWinData->mpAutoScrollWin->EndAutoScroll();
 
-    if ( pSVData->maWinData.mpTrackWin )
-        pSVData->maWinData.mpTrackWin->EndTracking( TrackingEventFlags::Cancel | TrackingEventFlags::Key );
+    if (pSVData->mpWinData->mpTrackWin)
+        pSVData->mpWinData->mpTrackWin->EndTracking( TrackingEventFlags::Cancel | TrackingEventFlags::Key );
 
     if (bWasPopup)
         return;
@@ -2091,7 +2099,7 @@ static bool ImplHandleMenuEvent( vcl::Window const * pWindow, SalMenuEvent* pEve
 static void ImplHandleSalKeyMod( vcl::Window* pWindow, SalKeyModEvent const * pEvent )
 {
     ImplSVData* pSVData = ImplGetSVData();
-    vcl::Window* pTrackWin = pSVData->maWinData.mpTrackWin;
+    vcl::Window* pTrackWin = pSVData->mpWinData->mpTrackWin;
     if ( pTrackWin )
         pWindow = pTrackWin;
 #ifdef MACOSX
@@ -2285,7 +2293,7 @@ static void ImplHandleSalQueryCharPosition( vcl::Window *pWindow,
     pEvt->mnCursorBoundHeight = 0;
 
     ImplSVData* pSVData = ImplGetSVData();
-    vcl::Window*     pChild = pSVData->maWinData.mpExtTextInputWin;
+    vcl::Window* pChild = pSVData->mpWinData->mpExtTextInputWin;
 
     if ( !pChild )
         pChild = ImplGetKeyInputWindow( pWindow );
diff --git a/vcl/source/window/wrkwin.cxx b/vcl/source/window/wrkwin.cxx
index 1133a9f383ad..d4ae1e7898a8 100644
--- a/vcl/source/window/wrkwin.cxx
+++ b/vcl/source/window/wrkwin.cxx
@@ -61,8 +61,9 @@ void WorkWindow::ImplInit( vcl::Window* pParent, WinBits nStyle, SystemParentDat
     if ( nStyle & WB_APP )
     {
         ImplSVData* pSVData = ImplGetSVData();
-        SAL_WARN_IF( pSVData->maWinData.mpAppWin, "vcl", "WorkWindow::WorkWindow(): More than one window with style WB_APP" );
-        pSVData->maWinData.mpAppWin = this;

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list