From d021884ab62bb339427cb01bebb2660f47417019 Mon Sep 17 00:00:00 2001 From: Neil Date: Wed, 28 Feb 2024 09:57:51 +1100 Subject: Ensure keyboard-initiated context menu appears in multi-screen situations when in PopUp::Text mode. --- doc/ScintillaHistory.html | 3 +++ win32/ScintillaWin.cxx | 26 ++++++++++++++------------ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html index 59373c8e2..7c8e77510 100644 --- a/doc/ScintillaHistory.html +++ b/doc/ScintillaHistory.html @@ -606,6 +606,9 @@ created on different threads. There may be more problems with this scenario so it should be avoided. Bug #2420. +
  • + For Win32, ensure keyboard-initiated context menu appears in multi-screen situations. +
  • Release 5.4.1 diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index de1bf2fb7..f27cd59ed 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -1520,19 +1520,21 @@ Window::Cursor ScintillaWin::ContextCursor(Point pt) { } sptr_t ScintillaWin::ShowContextMenu(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { - Point pt = PointFromLParam(lParam); - POINT rpt = POINTFromPoint(pt); - ::ScreenToClient(MainHWND(), &rpt); - const Point ptClient = PointFromPOINT(rpt); + Point ptScreen = PointFromLParam(lParam); + Point ptClient; + POINT point = POINTFromLParam(lParam); + if ((point.x == -1) && (point.y == -1)) { + // Caused by keyboard so display menu near caret + ptClient = PointMainCaret(); + point = POINTFromPoint(ptClient); + ::ClientToScreen(MainHWND(), &point); + ptScreen = PointFromPOINT(point); + } else { + ::ScreenToClient(MainHWND(), &point); + ptClient = PointFromPOINT(point); + } if (ShouldDisplayPopup(ptClient)) { - if ((pt.x == -1) && (pt.y == -1)) { - // Caused by keyboard so display menu near caret - pt = PointMainCaret(); - POINT spt = POINTFromPoint(pt); - ::ClientToScreen(MainHWND(), &spt); - pt = PointFromPOINT(spt); - } - ContextMenu(pt); + ContextMenu(ptScreen); return 0; } return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam); -- cgit v1.2.3