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. --- win32/ScintillaWin.cxx | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'win32') 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