diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-12-02 21:43:46 +0000 |
---|---|---|
committer | Adolfo Jayme Barrientos <fitojb@ubuntu.com> | 2021-12-03 19:22:56 +0100 |
commit | 0d4568f4b082b0f3cce97b4f18c2dc1ff60aeb85 (patch) | |
tree | fbafd44d45983652c0015ab8ea1d502c4bf7e4d4 | |
parent | 2cf3118195b415534cfbf6fd5053066207a9ea4e (diff) |
Resolves: tdf#145959 menu pos should be relative to SmCmdBoxWindow
Change-Id: Ie8da9bbb4385b3315fd62e6f2dc8ab394ea3709f
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126237
Tested-by: Jenkins
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
-rw-r--r-- | starmath/inc/view.hxx | 4 | ||||
-rw-r--r-- | starmath/source/edit.cxx | 5 | ||||
-rw-r--r-- | starmath/source/view.cxx | 24 |
3 files changed, 25 insertions, 8 deletions
diff --git a/starmath/inc/view.hxx b/starmath/inc/view.hxx index 3f77dd76c29c..749db736d21a 100644 --- a/starmath/inc/view.hxx +++ b/starmath/inc/view.hxx @@ -212,6 +212,10 @@ public: virtual void StateChanged( StateChangedType nStateChange ) override; virtual void Command(const CommandEvent& rCEvt) override; + Point WidgetToWindowPos(const weld::Widget& rWidget, const Point& rPos); + + void ShowContextMenu(const Point& rPos); + void AdjustPosition(); SmEditWindow& GetEditWindow() diff --git a/starmath/source/edit.cxx b/starmath/source/edit.cxx index 2588e9f60325..e8e79a24e12c 100644 --- a/starmath/source/edit.cxx +++ b/starmath/source/edit.cxx @@ -266,10 +266,9 @@ bool SmEditTextWindow::Command(const CommandEvent& rCEvt) if (rCEvt.GetCommand() == CommandEventId::ContextMenu) { - // purely for "ExecutePopup" taking a vcl::Window and - // we assume SmEditTextWindow 0,0 is at SmEditWindow 0,0 ReleaseMouse(); - mrEditWindow.GetCmdBox().Command(rCEvt); + SmCmdBoxWindow& rCmdBox = mrEditWindow.GetCmdBox(); + rCmdBox.ShowContextMenu(rCmdBox.WidgetToWindowPos(*GetDrawingArea(), rCEvt.GetMousePosPixel())); GrabFocus(); return true; } diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx index e0b79fc42d07..d369ad97db20 100644 --- a/starmath/source/view.cxx +++ b/starmath/source/view.cxx @@ -827,15 +827,29 @@ SmCmdBoxWindow::SmCmdBoxWindow(SfxBindings *pBindings_, SfxChildWindow *pChildWi aInitialFocusTimer.SetTimeout(100); } +Point SmCmdBoxWindow::WidgetToWindowPos(const weld::Widget& rWidget, const Point& rPos) +{ + Point aRet(rPos); + int x(0), y(0), width(0), height(0); + rWidget.get_extents_relative_to(*m_xContainer, x, y, width, height); + aRet.Move(x, y); + aRet.Move(m_xBox->GetPosPixel().X(), m_xBox->GetPosPixel().Y()); + return aRet; +} + +void SmCmdBoxWindow::ShowContextMenu(const Point& rPos) +{ + ToTop(); + SmViewShell *pViewSh = GetView(); + if (pViewSh) + pViewSh->GetViewFrame()->GetDispatcher()->ExecutePopup("edit", this, &rPos); +} + void SmCmdBoxWindow::Command(const CommandEvent& rCEvt) { if (rCEvt.GetCommand() == CommandEventId::ContextMenu) { - ToTop(); - Point aPoint = rCEvt.GetMousePosPixel(); - SmViewShell *pViewSh = GetView(); - if (pViewSh) - pViewSh->GetViewFrame()->GetDispatcher()->ExecutePopup("edit", this, &aPoint); + ShowContextMenu(rCEvt.GetMousePosPixel()); return; } |