[Libreoffice-commits] core.git: include/sfx2 include/vcl sfx2/source vcl/inc vcl/source vcl/unx vcl/win

Tamás Zolnai (via logerrit) logerrit at kemper.freedesktop.org
Wed Dec 11 12:12:10 UTC 2019


 include/sfx2/viewfrm.hxx      |    2 
 include/vcl/svapp.hxx         |    6 ++
 sfx2/source/view/viewfrm.cxx  |    6 ++
 vcl/inc/helpwin.hxx           |    2 
 vcl/inc/svdata.hxx            |    5 +-
 vcl/source/app/help.cxx       |   88 +++++++++++++++++++++---------------------
 vcl/source/app/svdata.cxx     |   81 ++++++++++++++++++++++++++++++++++++++
 vcl/source/window/window.cxx  |    2 
 vcl/source/window/winproc.cxx |   60 ++++++++++++++--------------
 vcl/unx/gtk3/gtk3gtkinst.cxx  |    8 +--
 vcl/win/window/salframe.cxx   |    2 
 11 files changed, 183 insertions(+), 79 deletions(-)

New commits:
commit 13eb488c91e36f4a4e5bb4a4410d6c5284ffd824
Author:     Tamás Zolnai <tamas.zolnai at collabora.com>
AuthorDate: Tue Jul 23 19:38:56 2019 +0200
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Wed Dec 11 13:10:52 2019 +0100

    lok: Support per-view help data
    
    Used for showing tooltip windows in LO online.
    
    Change-Id: I8b6a7272c75025e717923c839fa8fd9f4cab2903
    Reviewed-on: https://gerrit.libreoffice.org/84717
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Andras Timar <andras.timar at collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/84803
    Tested-by: Jenkins

diff --git a/include/sfx2/viewfrm.hxx b/include/sfx2/viewfrm.hxx
index fe336ba5f091..20bcc4904fcb 100644
--- a/include/sfx2/viewfrm.hxx
+++ b/include/sfx2/viewfrm.hxx
@@ -28,6 +28,7 @@
 #include <sfx2/objsh.hxx>
 #include <sfx2/shell.hxx>
 #include <svl/poolitem.hxx>
+#include <vcl/svapp.hxx>
 
 class Button;
 class SvBorder;
@@ -48,6 +49,7 @@ class SFX2_DLLPUBLIC SfxViewFrame: public SfxShell, public SfxListener
     SfxObjectShellRef           m_xObjSh;
     std::unique_ptr<SfxDispatcher> m_pDispatcher;
     SfxBindings*                m_pBindings;
+    ImplSVHelpData*             m_pHelpData;
     sal_uInt16                  m_nAdjustPosPixelLock;
 
 private:
diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx
index 16b8015b923a..95e46500a899 100644
--- a/include/vcl/svapp.hxx
+++ b/include/vcl/svapp.hxx
@@ -1452,6 +1452,12 @@ VCL_DLLPUBLIC bool InitAccessBridge();
 VCL_DLLPUBLIC void CreateMainLoopThread( oslWorkerFunction pWorker, void * pThreadData );
 VCL_DLLPUBLIC void JoinMainLoopThread();
 
+/// The following are to manage per-view (frame) help data.
+struct ImplSVHelpData;
+VCL_DLLPUBLIC ImplSVHelpData* CreateSVHelpData();
+VCL_DLLPUBLIC void DestroySVHelpData(ImplSVHelpData*);
+VCL_DLLPUBLIC void SetSVHelpData(ImplSVHelpData*);
+
 inline void Application::EndYield()
 {
     PostUserEvent( Link<void*,void>() );
diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index 96bdf69f0c89..cefe8af5bd9b 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -1619,6 +1619,7 @@ SfxViewFrame::SfxViewFrame
 )
     : m_pImpl( new SfxViewFrame_Impl( rFrame ) )
     , m_pBindings( new SfxBindings )
+    , m_pHelpData(CreateSVHelpData())
     , m_nAdjustPosPixelLock( 0 )
 {
 
@@ -1661,6 +1662,9 @@ SfxViewFrame::~SfxViewFrame()
 
     // Delete Member
     KillDispatcher_Impl();
+
+    DestroySVHelpData(m_pHelpData);
+    m_pHelpData = nullptr;
 }
 
 // Remove and delete the Dispatcher.
@@ -3292,6 +3296,8 @@ void SfxViewFrame::UpdateDocument_Impl()
 
 void SfxViewFrame::SetViewFrame( SfxViewFrame* pFrame )
 {
+    if(pFrame)
+        SetSVHelpData(pFrame->m_pHelpData);
     SfxGetpApp()->SetViewFrame_Impl( pFrame );
 }
 
diff --git a/vcl/inc/helpwin.hxx b/vcl/inc/helpwin.hxx
index 569456d02ae0..0a8119916391 100644
--- a/vcl/inc/helpwin.hxx
+++ b/vcl/inc/helpwin.hxx
@@ -24,6 +24,7 @@
 #include <vcl/timer.hxx>
 
 enum class QuickHelpFlags;
+struct ImplSVHelpData;
 
 class HelpTextWindow final : public FloatingWindow
 {
@@ -73,6 +74,7 @@ void ImplShowHelpWindow( vcl::Window* pParent, sal_uInt16 nHelpWinStyle, QuickHe
         const OUString& rHelpText,
         const Point& rScreenPos, const tools::Rectangle& rHelpArea );
 VCL_DLLPUBLIC void ImplDestroyHelpWindow( bool bUpdateHideTime );
+VCL_DLLPUBLIC void ImplDestroyHelpWindow(ImplSVHelpData& rHelpData, bool bUpdateHideTime);
 void ImplSetHelpWindowPos( vcl::Window* pHelpWindow, sal_uInt16 nHelpWinStyle, QuickHelpFlags nStyle,
                             const Point& rPos, const tools::Rectangle& rHelpArea );
 
diff --git a/vcl/inc/svdata.hxx b/vcl/inc/svdata.hxx
index f95b6136e6d8..0876d6146e65 100644
--- a/vcl/inc/svdata.hxx
+++ b/vcl/inc/svdata.hxx
@@ -331,6 +331,7 @@ struct ImplSchedulerContext
 
 struct ImplSVData
 {
+    ImplSVData();
     ~ImplSVData();
     SalData*                mpSalData = nullptr;
     SalInstance*            mpDefInst = nullptr;            // Default SalInstance
@@ -348,7 +349,7 @@ struct ImplSVData
     ImplSVGDIData           maGDIData;                      // indepen data for Output classes
     ImplSVWinData           maWinData;                      // indepen data for Windows classes
     ImplSVCtrlData          maCtrlData;                     // indepen data for Control classes
-    ImplSVHelpData          maHelpData;                     // indepen data for Help classes
+    ImplSVHelpData*         mpHelpData;                     // Data for Help classes
     ImplSVNWFData           maNWFData;
     UnoWrapperBase*         mpUnoWrapper = nullptr;
     VclPtr<vcl::Window>     mpIntroWindow;                  // the splash screen
@@ -384,6 +385,8 @@ VCL_PLUGIN_PUBLIC OUString VclResId(const char* pId);
 DockingManager*     ImplGetDockingManager();
 BlendFrameCache*    ImplGetBlendFrameCache();
 
+VCL_PLUGIN_PUBLIC ImplSVHelpData& ImplGetSVHelpData();
+
 VCL_DLLPUBLIC bool        ImplCallPreNotify( NotifyEvent& rEvt );
 
 VCL_PLUGIN_PUBLIC ImplSVData* ImplGetSVData();
diff --git a/vcl/source/app/help.cxx b/vcl/source/app/help.cxx
index 0176b8b895e0..f88c11f1f833 100644
--- a/vcl/source/app/help.cxx
+++ b/vcl/source/app/help.cxx
@@ -76,43 +76,44 @@ OUString Help::GetHelpText( const OUString&, const weld::Widget* )
 
 void Help::EnableContextHelp()
 {
-    ImplGetSVData()->maHelpData.mbContextHelp = true;
+    ImplGetSVHelpData().mbContextHelp = true;
 }
 
 void Help::DisableContextHelp()
 {
-    ImplGetSVData()->maHelpData.mbContextHelp = false;
+    ImplGetSVHelpData().mbContextHelp = false;
 }
 
 bool Help::IsContextHelpEnabled()
 {
-    return ImplGetSVData()->maHelpData.mbContextHelp;
+    return ImplGetSVHelpData().mbContextHelp;
 }
 
 void Help::EnableExtHelp()
 {
-    ImplGetSVData()->maHelpData.mbExtHelp = true;
+    ImplGetSVHelpData().mbExtHelp = true;
 }
 
 void Help::DisableExtHelp()
 {
-    ImplGetSVData()->maHelpData.mbExtHelp = false;
+    ImplGetSVHelpData().mbExtHelp = false;
 }
 
 bool Help::IsExtHelpEnabled()
 {
-    return ImplGetSVData()->maHelpData.mbExtHelp;
+    return ImplGetSVHelpData().mbExtHelp;
 }
 
 bool Help::StartExtHelp()
 {
     ImplSVData* pSVData = ImplGetSVData();
+    ImplSVHelpData& aHelpData = ImplGetSVHelpData();
 
-    if ( pSVData->maHelpData.mbExtHelp && !pSVData->maHelpData.mbExtHelpMode )
+    if ( aHelpData.mbExtHelp && !aHelpData.mbExtHelpMode )
     {
-        pSVData->maHelpData.mbExtHelpMode = true;
-        pSVData->maHelpData.mbOldBalloonMode = pSVData->maHelpData.mbBalloonHelp;
-        pSVData->maHelpData.mbBalloonHelp = true;
+        aHelpData.mbExtHelpMode = true;
+        aHelpData.mbOldBalloonMode = aHelpData.mbBalloonHelp;
+        aHelpData.mbBalloonHelp = true;
         if ( pSVData->maWinData.mpAppWin )
             pSVData->maWinData.mpAppWin->ImplGenerateMouseMove();
         return true;
@@ -124,11 +125,12 @@ bool Help::StartExtHelp()
 bool Help::EndExtHelp()
 {
     ImplSVData* pSVData = ImplGetSVData();
+    ImplSVHelpData& aHelpData = ImplGetSVHelpData();
 
-    if ( pSVData->maHelpData.mbExtHelp && pSVData->maHelpData.mbExtHelpMode )
+    if ( aHelpData.mbExtHelp && aHelpData.mbExtHelpMode )
     {
-        pSVData->maHelpData.mbExtHelpMode = false;
-        pSVData->maHelpData.mbBalloonHelp = pSVData->maHelpData.mbOldBalloonMode;
+        aHelpData.mbExtHelpMode = false;
+        aHelpData.mbBalloonHelp = aHelpData.mbOldBalloonMode;
         if ( pSVData->maWinData.mpAppWin )
             pSVData->maWinData.mpAppWin->ImplGenerateMouseMove();
         return true;
@@ -139,17 +141,17 @@ bool Help::EndExtHelp()
 
 void Help::EnableBalloonHelp()
 {
-    ImplGetSVData()->maHelpData.mbBalloonHelp = true;
+    ImplGetSVHelpData().mbBalloonHelp = true;
 }
 
 void Help::DisableBalloonHelp()
 {
-    ImplGetSVData()->maHelpData.mbBalloonHelp = false;
+    ImplGetSVHelpData().mbBalloonHelp = false;
 }
 
 bool Help::IsBalloonHelpEnabled()
 {
-    return ImplGetSVData()->maHelpData.mbBalloonHelp;
+    return ImplGetSVHelpData().mbBalloonHelp;
 }
 
 void Help::ShowBalloon( vcl::Window* pParent,
@@ -162,17 +164,17 @@ void Help::ShowBalloon( vcl::Window* pParent,
 
 void Help::EnableQuickHelp()
 {
-    ImplGetSVData()->maHelpData.mbQuickHelp = true;
+    ImplGetSVHelpData().mbQuickHelp = true;
 }
 
 void Help::DisableQuickHelp()
 {
-    ImplGetSVData()->maHelpData.mbQuickHelp = false;
+    ImplGetSVHelpData().mbQuickHelp = false;
 }
 
 bool Help::IsQuickHelpEnabled()
 {
-    return ImplGetSVData()->maHelpData.mbQuickHelp;
+    return ImplGetSVHelpData().mbQuickHelp;
 }
 
 void Help::ShowQuickHelp( vcl::Window* pParent,
@@ -188,7 +190,7 @@ void Help::ShowQuickHelp( vcl::Window* pParent,
 
 void Help::HideBalloonAndQuickHelp()
 {
-    HelpTextWindow const * pHelpWin = ImplGetSVData()->maHelpData.mpHelpWin;
+    HelpTextWindow const * pHelpWin = ImplGetSVHelpData().mpHelpWin;
     bool const bIsVisible = ( pHelpWin != nullptr ) && pHelpWin->IsVisible();
     ImplDestroyHelpWindow( bIsVisible );
 }
@@ -248,7 +250,7 @@ void Help::HidePopover(vcl::Window const * pParent, void* nId)
     // trigger update, so that a Paint is instantly triggered since we do not save the background
     pFrameWindow->ImplUpdateAll();
     pHelpWin.disposeAndClear();
-    ImplGetSVData()->maHelpData.mnLastHelpHideTime = tools::Time::GetSystemTicks();
+    ImplGetSVHelpData().mnLastHelpHideTime = tools::Time::GetSystemTicks();
 }
 
 HelpTextWindow::HelpTextWindow( vcl::Window* pParent, const OUString& rText, sal_uInt16 nHelpWinStyle, QuickHelpFlags nStyle ) :
@@ -269,9 +271,8 @@ HelpTextWindow::HelpTextWindow( vcl::Window* pParent, const OUString& rText, sal
     SetHelpText( rText );
     Window::SetHelpText( rText );
 
-    ImplSVData* pSVData = ImplGetSVData();
-    if ( pSVData->maHelpData.mbSetKeyboardHelp )
-        pSVData->maHelpData.mbKeyboardHelp = true;
+    if ( ImplGetSVHelpData().mbSetKeyboardHelp )
+        ImplGetSVHelpData().mbKeyboardHelp = true;
 
 
     maShowTimer.SetInvokeHandler( LINK( this, HelpTextWindow, TimerHdl ) );
@@ -317,8 +318,8 @@ void HelpTextWindow::dispose()
     maShowTimer.Stop();
     maHideTimer.Stop();
 
-    if( this == ImplGetSVData()->maHelpData.mpHelpWin )
-        ImplGetSVData()->maHelpData.mpHelpWin = nullptr;
+    if( this == ImplGetSVHelpData().mpHelpWin )
+        ImplGetSVHelpData().mpHelpWin = nullptr;
     FloatingWindow::dispose();
 }
 
@@ -423,7 +424,7 @@ void HelpTextWindow::ShowHelp(bool bNoDelay)
     if (!bNoDelay)
     {
         // In case of ExtendedHelp display help sooner
-        if ( ImplGetSVData()->maHelpData.mbExtHelpMode )
+        if ( ImplGetSVHelpData().mbExtHelpMode )
             nTimeout = 15;
         else
         {
@@ -445,8 +446,7 @@ IMPL_LINK( HelpTextWindow, TimerHdl, Timer*, pTimer, void)
         if ( mnHelpWinStyle == HELPWINSTYLE_QUICK )
         {
             // start auto-hide-timer for non-ShowTip windows
-            ImplSVData* pSVData = ImplGetSVData();
-            if ( this == pSVData->maHelpData.mpHelpWin )
+            if ( this == ImplGetSVHelpData().mpHelpWin )
                 maHideTimer.Start();
         }
         ImplShow();
@@ -487,12 +487,12 @@ void ImplShowHelpWindow( vcl::Window* pParent, sal_uInt16 nHelpWinStyle, QuickHe
         return;
     }
 
-    ImplSVData* pSVData = ImplGetSVData();
+    ImplSVHelpData& aHelpData = ImplGetSVHelpData();
 
-    if (rHelpText.isEmpty() && !pSVData->maHelpData.mbRequestingHelp)
+    if (rHelpText.isEmpty() && !aHelpData.mbRequestingHelp)
         return;
 
-    VclPtr<HelpTextWindow> pHelpWin = pSVData->maHelpData.mpHelpWin;
+    VclPtr<HelpTextWindow> pHelpWin = aHelpData.mpHelpWin;
     bool bNoDelay = false;
     if ( pHelpWin )
     {
@@ -501,7 +501,7 @@ void ImplShowHelpWindow( vcl::Window* pParent, sal_uInt16 nHelpWinStyle, QuickHe
         if  (   (   rHelpText.isEmpty()
                 ||  ( pHelpWin->GetWinStyle() != nHelpWinStyle )
                 )
-            &&  pSVData->maHelpData.mbRequestingHelp
+            &&  aHelpData.mbRequestingHelp
             )
         {
             // remove help window if no HelpText or
@@ -515,7 +515,7 @@ void ImplShowHelpWindow( vcl::Window* pParent, sal_uInt16 nHelpWinStyle, QuickHe
         else
         {
             bool const bUpdate = (pHelpWin->GetHelpText() != rHelpText) ||
-                ((pHelpWin->GetHelpArea() != rHelpArea) && pSVData->maHelpData.mbRequestingHelp);
+                ((pHelpWin->GetHelpArea() != rHelpArea) && aHelpData.mbRequestingHelp);
             if (bUpdate)
             {
                 vcl::Window * pWindow = pHelpWin->GetParent()->ImplGetFrameWindow();
@@ -536,11 +536,11 @@ void ImplShowHelpWindow( vcl::Window* pParent, sal_uInt16 nHelpWinStyle, QuickHe
         return;
 
     sal_uInt64 nCurTime = tools::Time::GetSystemTicks();
-    if ( ( nCurTime - pSVData->maHelpData.mnLastHelpHideTime ) < HelpSettings::GetTipDelay() )
+    if ( ( nCurTime - aHelpData.mnLastHelpHideTime ) < HelpSettings::GetTipDelay() )
         bNoDelay = true;
 
     pHelpWin = VclPtr<HelpTextWindow>::Create( pParent, rHelpText, nHelpWinStyle, nStyle );
-    pSVData->maHelpData.mpHelpWin = pHelpWin;
+    aHelpData.mpHelpWin = pHelpWin;
     pHelpWin->SetHelpArea( rHelpArea );
 
     //  positioning
@@ -548,7 +548,7 @@ void ImplShowHelpWindow( vcl::Window* pParent, sal_uInt16 nHelpWinStyle, QuickHe
     pHelpWin->SetOutputSizePixel( aSz );
     ImplSetHelpWindowPos( pHelpWin, nHelpWinStyle, nStyle, rScreenPos, rHelpArea );
     // if not called from Window::RequestHelp, then without delay...
-    if ( !pSVData->maHelpData.mbRequestingHelp )
+    if ( !aHelpData.mbRequestingHelp )
         bNoDelay = true;
     pHelpWin->ShowHelp(bNoDelay);
 
@@ -556,8 +556,12 @@ void ImplShowHelpWindow( vcl::Window* pParent, sal_uInt16 nHelpWinStyle, QuickHe
 
 void ImplDestroyHelpWindow( bool bUpdateHideTime )
 {
-    ImplSVData* pSVData = ImplGetSVData();
-    VclPtr<HelpTextWindow> pHelpWin = pSVData->maHelpData.mpHelpWin;
+    ImplDestroyHelpWindow(ImplGetSVHelpData(), bUpdateHideTime);
+}
+
+void ImplDestroyHelpWindow(ImplSVHelpData& rHelpData, bool bUpdateHideTime)
+{
+    VclPtr<HelpTextWindow> pHelpWin = rHelpData.mpHelpWin;
     if ( pHelpWin )
     {
         vcl::Window * pWindow = pHelpWin->GetParent()->ImplGetFrameWindow();
@@ -565,12 +569,12 @@ void ImplDestroyHelpWindow( bool bUpdateHideTime )
         tools::Rectangle aInvRect( pHelpWin->GetWindowExtentsRelative( pWindow ) );
         if( pHelpWin->IsVisible() )
             pWindow->Invalidate( aInvRect );
-        pSVData->maHelpData.mpHelpWin = nullptr;
-        pSVData->maHelpData.mbKeyboardHelp = false;
+        rHelpData.mpHelpWin = nullptr;
+        rHelpData.mbKeyboardHelp = false;
         pHelpWin->Hide();
         pHelpWin.disposeAndClear();
         if( bUpdateHideTime )
-            pSVData->maHelpData.mnLastHelpHideTime = tools::Time::GetSystemTicks();
+            rHelpData.mnLastHelpHideTime = tools::Time::GetSystemTicks();
     }
 }
 
diff --git a/vcl/source/app/svdata.cxx b/vcl/source/app/svdata.cxx
index 877f3011d536..a9377fa6732b 100644
--- a/vcl/source/app/svdata.cxx
+++ b/vcl/source/app/svdata.cxx
@@ -62,6 +62,10 @@ namespace
 {
     struct private_aImplSVData :
         public rtl::Static<ImplSVData, private_aImplSVData> {};
+    /// Default instance ensures that ImplSVData::mpHelpData is never null.
+    struct private_aImplSVHelpData :
+        public rtl::Static<ImplSVHelpData, private_aImplSVHelpData> {};
+
 }
 
 ImplSVData* ImplGetSVData() {
@@ -353,6 +357,83 @@ void LocaleConfigurationListener::ConfigurationChanged( utl::ConfigurationBroadc
 }
 
 
+ImplSVHelpData* CreateSVHelpData()
+{
+    if (!comphelper::LibreOfficeKit::isActive())
+        return nullptr;
+
+    ImplSVHelpData* pNewData = new ImplSVHelpData;
+
+    // Set options set globally
+    ImplSVHelpData& aStaticHelpData = private_aImplSVHelpData::get();
+    pNewData->mbContextHelp = aStaticHelpData.mbContextHelp;
+    pNewData->mbExtHelp = aStaticHelpData.mbExtHelp;
+    pNewData->mbExtHelpMode = aStaticHelpData.mbExtHelpMode;
+    pNewData->mbOldBalloonMode = aStaticHelpData.mbOldBalloonMode;
+    pNewData->mbBalloonHelp = aStaticHelpData.mbBalloonHelp;
+    pNewData->mbQuickHelp = aStaticHelpData.mbQuickHelp;
+
+    return pNewData;
+}
+
+void DestroySVHelpData(ImplSVHelpData* pSVHelpData)
+{
+    if (!comphelper::LibreOfficeKit::isActive())
+        return;
+
+    // Change the SVData's help date if neccessary
+    if(ImplGetSVData()->mpHelpData == pSVHelpData)
+    {
+        ImplGetSVData()->mpHelpData = &private_aImplSVHelpData::get();
+    }
+
+    if(pSVHelpData)
+    {
+        ImplDestroyHelpWindow(*pSVHelpData, false);
+        delete pSVHelpData;
+    }
+}
+
+void SetSVHelpData(ImplSVHelpData* pSVHelpData)
+{
+    if (!comphelper::LibreOfficeKit::isActive())
+        return;
+
+    ImplSVData* pSVData = ImplGetSVData();
+    if (pSVData->mpHelpData != pSVHelpData)
+    {
+        // If current one is the static, clean it up to avoid having lingering references.
+        if (pSVData->mpHelpData == &private_aImplSVHelpData::get())
+        {
+            pSVData->mpHelpData->mpHelpWin.reset();
+        }
+
+        pSVData->mpHelpData = pSVHelpData;
+        if (pSVData->mpHelpData == nullptr)
+        {
+            pSVData->mpHelpData = &private_aImplSVHelpData::get(); // Never leave it null.
+        }
+    }
+}
+
+ImplSVData::ImplSVData()
+{
+    mpHelpData = &private_aImplSVHelpData::get();
+}
+
+ImplSVHelpData& ImplGetSVHelpData()
+{
+    ImplSVData* pSVData = ImplGetSVData();
+    if(pSVData->mpHelpData)
+    {
+        return *pSVData->mpHelpData;
+    }
+    else
+    {
+        return private_aImplSVHelpData::get();
+    }
+}
+
 ImplSVData::~ImplSVData() {}
 ImplSVAppData::~ImplSVAppData() {}
 ImplSVGDIData::~ImplSVGDIData() {}
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index b1f0762f01e7..c044959369c5 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -234,7 +234,7 @@ void Window::dispose()
 
     ImplSVData* pSVData = ImplGetSVData();
 
-    if ( pSVData->maHelpData.mpHelpWin && (pSVData->maHelpData.mpHelpWin->GetParent() == this) )
+    if ( ImplGetSVHelpData().mpHelpWin && (ImplGetSVHelpData().mpHelpWin->GetParent() == this) )
         ImplDestroyHelpWindow( true );
 
     SAL_WARN_IF( pSVData->maWinData.mpTrackWin.get() == this, "vcl.window",
diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx
index 6f50e85699e8..8031cac53862 100644
--- a/vcl/source/window/winproc.cxx
+++ b/vcl/source/window/winproc.cxx
@@ -84,7 +84,7 @@ static bool ImplHandleMouseFloatMode( vcl::Window* pChild, const Point& rMousePo
 
             if ( !pFloat || bHitTestInsideRect )
             {
-                if ( pSVData->maHelpData.mpHelpWin && !pSVData->maHelpData.mbKeyboardHelp )
+                if ( ImplGetSVHelpData().mpHelpWin && !ImplGetSVHelpData().mbKeyboardHelp )
                     ImplDestroyHelpWindow( true );
                 pChild->ImplGetFrame()->SetPointer( PointerStyle::Arrow );
                 return true;
@@ -167,27 +167,27 @@ static void ImplHandleMouseHelpRequest( vcl::Window* pChild, const Point& rMouse
             return;
     }
 
-    ImplSVData* pSVData = ImplGetSVData();
-    if ( !pSVData->maHelpData.mpHelpWin ||
-         !( pSVData->maHelpData.mpHelpWin->IsWindowOrChild( pChild ) ||
-           pChild->IsWindowOrChild( pSVData->maHelpData.mpHelpWin ) ) )
+    ImplSVHelpData& aHelpData = ImplGetSVHelpData();
+    if ( !aHelpData.mpHelpWin ||
+         !( aHelpData.mpHelpWin->IsWindowOrChild( pChild ) ||
+           pChild->IsWindowOrChild( aHelpData.mpHelpWin ) ) )
     {
         HelpEventMode nHelpMode = HelpEventMode::NONE;
-        if ( pSVData->maHelpData.mbQuickHelp )
+        if ( aHelpData.mbQuickHelp )
             nHelpMode = HelpEventMode::QUICK;
-        if ( pSVData->maHelpData.mbBalloonHelp )
+        if ( aHelpData.mbBalloonHelp )
             nHelpMode |= HelpEventMode::BALLOON;
         if ( bool(nHelpMode) )
         {
             if ( pChild->IsInputEnabled() && !pChild->IsInModalMode() )
             {
                 HelpEvent aHelpEvent( rMousePos, nHelpMode );
-                pSVData->maHelpData.mbRequestingHelp = true;
+                aHelpData.mbRequestingHelp = true;
                 pChild->RequestHelp( aHelpEvent );
-                pSVData->maHelpData.mbRequestingHelp = false;
+                aHelpData.mbRequestingHelp = false;
             }
             // #104172# do not kill keyboard activated tooltips
-            else if ( pSVData->maHelpData.mpHelpWin && !pSVData->maHelpData.mbKeyboardHelp)
+            else if ( aHelpData.mpHelpWin && !aHelpData.mbKeyboardHelp)
             {
                 ImplDestroyHelpWindow( true );
             }
@@ -197,8 +197,7 @@ static void ImplHandleMouseHelpRequest( vcl::Window* pChild, const Point& rMouse
 
 static void ImplSetMousePointer( vcl::Window const * pChild )
 {
-    ImplSVData* pSVData = ImplGetSVData();
-    if ( pSVData->maHelpData.mbExtHelpMode )
+    if ( ImplGetSVHelpData().mbExtHelpMode )
         pChild->ImplGetFrame()->SetPointer( PointerStyle::Help );
     else
         pChild->ImplGetFrame()->SetPointer( pChild->ImplGetMousePointer() );
@@ -273,6 +272,7 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
                            long nX, long nY, sal_uInt64 nMsgTime,
                            sal_uInt16 nCode, MouseEventModifiers nMode )
 {
+    ImplSVHelpData& aHelpData = ImplGetSVHelpData();
     ImplSVData* pSVData = ImplGetSVData();
     Point       aMousePos( nX, nY );
     VclPtr<vcl::Window> pChild;
@@ -285,11 +285,11 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
     // mousebuttonup event
     if ( (nSVEvent == MouseNotifyEvent::MOUSEBUTTONDOWN) || (nSVEvent == MouseNotifyEvent::MOUSEBUTTONUP) )
     {
-        if ( (nSVEvent == MouseNotifyEvent::MOUSEBUTTONUP) && pSVData->maHelpData.mbExtHelpMode )
+        if ( (nSVEvent == MouseNotifyEvent::MOUSEBUTTONUP) && aHelpData.mbExtHelpMode )
             Help::EndExtHelp();
-        if ( pSVData->maHelpData.mpHelpWin )
+        if ( aHelpData.mpHelpWin )
         {
-            if( xWindow->ImplGetWindow() == pSVData->maHelpData.mpHelpWin )
+            if( xWindow->ImplGetWindow() == aHelpData.mpHelpWin )
             {
                 ImplDestroyHelpWindow( false );
                 return true; // xWindow is dead now - avoid crash!
@@ -317,7 +317,7 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
     if ( bMouseLeave )
     {
         pWinFrameData->mbMouseIn = false;
-        if ( pSVData->maHelpData.mpHelpWin && !pSVData->maHelpData.mbKeyboardHelp )
+        if ( ImplGetSVHelpData().mpHelpWin && !ImplGetSVHelpData().mbKeyboardHelp )
         {
             ImplDestroyHelpWindow( true );
 
@@ -687,9 +687,9 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
                 {
                     // if the MouseMove handler changes the help window's visibility
                     // the HelpRequest handler should not be called anymore
-                    vcl::Window* pOldHelpTextWin = pSVData->maHelpData.mpHelpWin;
+                    vcl::Window* pOldHelpTextWin = ImplGetSVHelpData().mpHelpWin;
                     pChild->MouseMove( aMEvt );
-                    if ( pOldHelpTextWin != pSVData->maHelpData.mpHelpWin )
+                    if ( pOldHelpTextWin != ImplGetSVHelpData().mpHelpWin )
                         bCallHelpRequest = false;
                 }
             }
@@ -732,7 +732,7 @@ bool ImplHandleMouseEvent( const VclPtr<vcl::Window>& xWindow, MouseNotifyEvent
 
     if ( nSVEvent == MouseNotifyEvent::MOUSEMOVE )
     {
-        if ( bCallHelpRequest && !pSVData->maHelpData.mbKeyboardHelp )
+        if ( bCallHelpRequest && !ImplGetSVHelpData().mbKeyboardHelp )
             ImplHandleMouseHelpRequest( pChild, pChild->OutputToScreenPixel( aMEvt.GetPosPixel() ) );
         bRet = true;
     }
@@ -906,13 +906,13 @@ static bool ImplHandleKey( vcl::Window* pWindow, MouseNotifyEvent nSVEvent,
     // handle tracking window
     if ( nSVEvent == MouseNotifyEvent::KEYINPUT )
     {
-        if ( pSVData->maHelpData.mbExtHelpMode )
+        if ( ImplGetSVHelpData().mbExtHelpMode )
         {
             Help::EndExtHelp();
             if ( nEvCode == KEY_ESCAPE )
                 return true;
         }
-        if ( pSVData->maHelpData.mpHelpWin )
+        if ( ImplGetSVHelpData().mpHelpWin )
             ImplDestroyHelpWindow( false );
 
         // AutoScrollMode
@@ -1052,15 +1052,15 @@ static bool ImplHandleKey( vcl::Window* pWindow, MouseNotifyEvent nSVEvent,
 
                 HelpEvent aHelpEvent( aPos, HelpEventMode::BALLOON );
                 aHelpEvent.SetKeyboardActivated( true );
-                pSVData->maHelpData.mbSetKeyboardHelp = true;
+                ImplGetSVHelpData().mbSetKeyboardHelp = true;
                 pChild->RequestHelp( aHelpEvent );
-                pSVData->maHelpData.mbSetKeyboardHelp = false;
+                ImplGetSVHelpData().mbSetKeyboardHelp = false;
             }
             else if ( (nCode == KEY_F1) || (nCode == KEY_HELP) )
             {
                 if ( !aKeyCode.GetModifier() )
                 {
-                    if ( pSVData->maHelpData.mbContextHelp )
+                    if ( ImplGetSVHelpData().mbContextHelp )
                     {
                         Point       aMousePos = pChild->OutputToScreenPixel( pChild->GetPointerPosPixel() );
                         HelpEvent   aHelpEvent( aMousePos, HelpEventMode::CONTEXT );
@@ -1071,7 +1071,7 @@ static bool ImplHandleKey( vcl::Window* pWindow, MouseNotifyEvent nSVEvent,
                 }
                 else if ( aKeyCode.IsShift() )
                 {
-                    if ( pSVData->maHelpData.mbExtHelp )
+                    if ( ImplGetSVHelpData().mbExtHelp )
                         Help::StartExtHelp();
                     else
                         bRet = false;
@@ -1354,7 +1354,7 @@ bool HandleGestureEventBase::Setup()
 
     if (m_pSVData->maWinData.mpAutoScrollWin)
         m_pSVData->maWinData.mpAutoScrollWin->EndAutoScroll();
-    if (m_pSVData->maHelpData.mpHelpWin)
+    if (ImplGetSVHelpData().mpHelpWin)
         ImplDestroyHelpWindow( true );
     return !m_pWindow->IsDisposed();
 }
@@ -1648,7 +1648,7 @@ void ImplHandleResize( vcl::Window* pWindow, long nNewWidth, long nNewHeight )
     if (bChanged && pWindow->GetStyle() & (WB_MOVEABLE|WB_SIZEABLE))
     {
         KillOwnPopups( pWindow );
-        if( pWindow->ImplGetWindow() != ImplGetSVData()->maHelpData.mpHelpWin )
+        if( pWindow->ImplGetWindow() != ImplGetSVHelpData().mpHelpWin )
             ImplDestroyHelpWindow( true );
     }
 
@@ -1727,7 +1727,7 @@ static void ImplHandleMove( vcl::Window* pWindow )
     if( pWindow->GetStyle() & (WB_MOVEABLE|WB_SIZEABLE) )
     {
         KillOwnPopups( pWindow );
-        if( pWindow->ImplGetWindow() != ImplGetSVData()->maHelpData.mpHelpWin )
+        if( pWindow->ImplGetWindow() != ImplGetSVHelpData().mpHelpWin )
             ImplDestroyHelpWindow( true );
     }
 
@@ -1954,9 +1954,9 @@ static void ImplHandleClose( const vcl::Window* pWindow )
         pLastLevelFloat = pSVData->maWinData.mpFirstFloat->ImplFindLastLevelFloat();
         pLastLevelFloat->EndPopupMode( FloatWinPopupEndFlags::Cancel | FloatWinPopupEndFlags::CloseAll );
     }
-    if ( pSVData->maHelpData.mbExtHelpMode )
+    if ( ImplGetSVHelpData().mbExtHelpMode )
         Help::EndExtHelp();
-    if ( pSVData->maHelpData.mpHelpWin )
+    if ( ImplGetSVHelpData().mpHelpWin )
         ImplDestroyHelpWindow( false );
     // AutoScrollMode
     if ( pSVData->maWinData.mpAutoScrollWin )
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 9fe5c2d289ad..407e99f96c45 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -12450,8 +12450,8 @@ public:
     gboolean signalTooltipQuery(GtkWidget* pWidget, gint /*x*/, gint /*y*/,
                                          gboolean /*keyboard_mode*/, GtkTooltip *tooltip)
     {
-        const ImplSVData* pSVData = ImplGetSVData();
-        if (pSVData->maHelpData.mbBalloonHelp)
+        const ImplSVHelpData& aHelpData = ImplGetSVHelpData();
+        if (aHelpData.mbBalloonHelp)
         {
             /*Current mechanism which needs help installed*/
             OString sHelpId = ::get_help_id(pWidget);
@@ -12592,8 +12592,8 @@ private:
             OString sHelpId = m_aUtf8HelpRoot + sBuildableName;
             set_help_id(pWidget, sHelpId);
             //hook up for extended help
-            const ImplSVData* pSVData = ImplGetSVData();
-            if (pSVData->maHelpData.mbBalloonHelp && !GTK_IS_DIALOG(pWidget) && !GTK_IS_ASSISTANT(pWidget))
+            const ImplSVHelpData& aHelpData = ImplGetSVHelpData();
+            if (aHelpData.mbBalloonHelp && !GTK_IS_DIALOG(pWidget) && !GTK_IS_ASSISTANT(pWidget))
             {
                 gtk_widget_set_has_tooltip(pWidget, true);
                 g_signal_connect(pWidget, "query-tooltip", G_CALLBACK(signalTooltipQuery), nullptr);
diff --git a/vcl/win/window/salframe.cxx b/vcl/win/window/salframe.cxx
index b9e3b7026a81..4ff89546cfeb 100644
--- a/vcl/win/window/salframe.cxx
+++ b/vcl/win/window/salframe.cxx
@@ -3040,7 +3040,7 @@ static bool ImplHandleMouseMsg( HWND hWnd, UINT nMsg,
                 aPt.x = static_cast<short>(LOWORD(lParam));
                 aPt.y = static_cast<short>(HIWORD(lParam));
                 ScreenToClient(hWnd, &aPt);
-                if (const auto& pHelpWin = ImplGetSVData()->maHelpData.mpHelpWin)
+                if (const auto& pHelpWin = ImplGetSVHelpData().mpHelpWin)
                 {
                     const tools::Rectangle& rHelpRect = pHelpWin->GetHelpArea();
                     if (rHelpRect.IsInside(Point(aPt.x, aPt.y)))


More information about the Libreoffice-commits mailing list