diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-02-02 11:28:53 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2016-02-02 11:31:43 +0000 |
commit | f6c3c942976d615972674c5a5e12337d07be104c (patch) | |
tree | a68d6f0209fe0242857c3cf95bec3b87d639e79d | |
parent | 33003d0fed4a5aaef4b631fcc3c0941f0eca34c9 (diff) |
Resolves: tdf#97495 fix SmElementsControl tooltips
instead of setting a single tooltip for the whole
panel area, wait for a tooltip request and specify
the area to which it applies.
Which is what other widgets that have different
tooltip areas do, and maps much better to the gtk3
tooltip system which functions like that too.
Change-Id: I56f452562c3c4d9dcec4109a8ee6168f34619472
-rw-r--r-- | starmath/inc/ElementsDockingWindow.hxx | 3 | ||||
-rw-r--r-- | starmath/source/ElementsDockingWindow.cxx | 56 |
2 files changed, 51 insertions, 8 deletions
diff --git a/starmath/inc/ElementsDockingWindow.hxx b/starmath/inc/ElementsDockingWindow.hxx index 4e1652abbcd1..a458d9d20359 100644 --- a/starmath/inc/ElementsDockingWindow.hxx +++ b/starmath/inc/ElementsDockingWindow.hxx @@ -83,7 +83,8 @@ class SmElementsControl : public Control virtual void Paint(vcl::RenderContext& rRenderContext, const Rectangle&) override; virtual void MouseButtonDown(const MouseEvent& rMEvt) override; - virtual void MouseMove( const MouseEvent& rMEvt ) override; + virtual void MouseMove(const MouseEvent& rMEvt) override; + virtual void RequestHelp(const HelpEvent& rHEvt) override; SmDocShell* mpDocShell; SmFormat maFormat; diff --git a/starmath/source/ElementsDockingWindow.cxx b/starmath/source/ElementsDockingWindow.cxx index b3b0f2ce7147..1fca973e12f7 100644 --- a/starmath/source/ElementsDockingWindow.cxx +++ b/starmath/source/ElementsDockingWindow.cxx @@ -28,6 +28,7 @@ #include <svl/stritem.hxx> #include <sfx2/dispatch.hxx> #include <sfx2/sfxmodelfactory.hxx> +#include <vcl/help.hxx> #include <vcl/settings.hxx> SmElement::SmElement(SmNodePointer pNode, const OUString& aText, const OUString& aHelpText) : @@ -387,10 +388,55 @@ void SmElementsControl::Paint(vcl::RenderContext& rRenderContext, const Rectangl rRenderContext.Pop(); } +void SmElementsControl::RequestHelp(const HelpEvent& rHEvt) +{ + if (rHEvt.GetMode() & (HelpEventMode::BALLOON | HelpEventMode::QUICK)) + { + SmElement* pHelpElement = mpCurrentElement; + + if (!rHEvt.KeyboardActivated()) + { + Point aHelpEventPos(ScreenToOutputPixel(rHEvt.GetMousePosPixel())); + for (size_t i = 0; i < maElementList.size() ; i++) + { + SmElement* pElement = maElementList[i].get(); + Rectangle aRect(pElement->mBoxLocation, pElement->mBoxSize); + if (aRect.IsInside(aHelpEventPos)) + { + pHelpElement = pElement; + break; + } + } + } + + if (!pHelpElement) + return; + + Rectangle aHelpRect(pHelpElement->mBoxLocation, pHelpElement->mBoxSize); + Point aPt = OutputToScreenPixel( aHelpRect.TopLeft() ); + aHelpRect.Left() = aPt.X(); + aHelpRect.Top()= aPt.Y(); + aPt = OutputToScreenPixel( aHelpRect.BottomRight() ); + aHelpRect.Right() = aPt.X(); + aHelpRect.Bottom() = aPt.Y(); + + // get text and display it + OUString aStr = pHelpElement->getHelpText(); + if (rHEvt.GetMode() & HelpEventMode::BALLOON) + { + Help::ShowBalloon(this, aHelpRect.Center(), aHelpRect, aStr); + } + else + Help::ShowQuickHelp(this, aHelpRect, aStr, aStr, QuickHelpFlags::CtrlText); + return; + } + + Control::RequestHelp(rHEvt); +} + void SmElementsControl::MouseMove( const MouseEvent& rMouseEvent ) { mpCurrentElement = nullptr; - OUString tooltip; if (Rectangle(Point(0, 0), GetOutputSizePixel()).IsInside(rMouseEvent.GetPosPixel())) { for (size_t i = 0; i < maElementList.size() ; i++) @@ -404,17 +450,13 @@ void SmElementsControl::MouseMove( const MouseEvent& rMouseEvent ) mpCurrentElement = element; LayoutOrPaintContents(); Invalidate(); - tooltip = element->getHelpText(); } } } - } - else - { - Control::MouseMove (rMouseEvent); + return; } - SetQuickHelpText(tooltip); + Control::MouseMove(rMouseEvent); } void SmElementsControl::MouseButtonDown(const MouseEvent& rMouseEvent) |