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.zol...@collabora.com> AuthorDate: Tue Jul 23 19:38:56 2019 +0200 Commit: Andras Timar <andras.ti...@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 <jenkinscollaboraoff...@gmail.com> Reviewed-by: Andras Timar <andras.ti...@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))) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits