summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamás Zolnai <tamas.zolnai@collabora.com>2019-07-23 19:38:56 +0200
committerAndras Timar <andras.timar@collabora.com>2020-05-13 18:48:37 +0200
commit202018a41c14a65b57643af02b76e8356f47244b (patch)
treedaeb6b40a38c85a6902347ef27ef6e38490c5ae5
parent1baf051aa1055e9789585fdd4859d23e6e14ac7d (diff)
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@gmail.com> Reviewed-by: Andras Timar <andras.timar@collabora.com> Reviewed-on: https://gerrit.libreoffice.org/84803 Tested-by: Jenkins
-rw-r--r--include/sfx2/viewfrm.hxx2
-rw-r--r--include/vcl/svapp.hxx6
-rw-r--r--sfx2/source/view/viewfrm.cxx6
-rw-r--r--vcl/inc/helpwin.hxx2
-rw-r--r--vcl/inc/svdata.hxx5
-rw-r--r--vcl/source/app/help.cxx88
-rw-r--r--vcl/source/app/svdata.cxx81
-rw-r--r--vcl/source/window/window.cxx2
-rw-r--r--vcl/source/window/winproc.cxx60
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx8
-rw-r--r--vcl/win/window/salframe.cxx2
11 files changed, 183 insertions, 79 deletions
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 b64f68fe5a3c..7c0efa142fda 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -1569,6 +1569,7 @@ SfxViewFrame::SfxViewFrame
)
: m_pImpl( new SfxViewFrame_Impl( rFrame ) )
, m_pBindings( new SfxBindings )
+ , m_pHelpData(CreateSVHelpData())
, m_nAdjustPosPixelLock( 0 )
{
@@ -1611,6 +1612,9 @@ SfxViewFrame::~SfxViewFrame()
// Delete Member
KillDispatcher_Impl();
+
+ DestroySVHelpData(m_pHelpData);
+ m_pHelpData = nullptr;
}
// Remove and delete the Dispatcher.
@@ -3242,6 +3246,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 5d2e19e80654..fc5e14ffda02 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 : 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 654b9ec968f1..69fdcca77c46 100644
--- a/vcl/inc/svdata.hxx
+++ b/vcl/inc/svdata.hxx
@@ -369,6 +369,7 @@ struct ImplSchedulerContext
struct ImplSVData
{
+ ImplSVData();
~ImplSVData();
SalData* mpSalData = nullptr;
SalInstance* mpDefInst = nullptr; // Default SalInstance
@@ -386,7 +387,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
@@ -422,6 +423,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 49551be5f901..b7adc843e472 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 c8b9ddc72227..190a0de4a717 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() );
@@ -269,6 +268,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;
@@ -281,11 +281,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!
@@ -313,7 +313,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 );
@@ -683,9 +683,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;
}
}
@@ -728,7 +728,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;
}
@@ -902,13 +902,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
@@ -1048,15 +1048,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 );
@@ -1067,7 +1067,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;
@@ -1346,7 +1346,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();
}
@@ -1620,7 +1620,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 );
}
@@ -1699,7 +1699,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 );
}
@@ -1922,9 +1922,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 820828c3e796..2fc5e123b0f3 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -12305,8 +12305,8 @@ namespace
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);
@@ -12474,8 +12474,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 aedba78e3fca..0bc9d7c7512a 100644
--- a/vcl/win/window/salframe.cxx
+++ b/vcl/win/window/salframe.cxx
@@ -3033,7 +3033,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)))