diff options
author | Neil <nyamatongwe@gmail.com> | 2024-02-28 09:57:51 +1100 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2024-02-28 09:57:51 +1100 |
commit | d021884ab62bb339427cb01bebb2660f47417019 (patch) | |
tree | c3805bb453ccc1309ce40f24dcd58f9ac375f1c4 /win32 | |
parent | 788c7b6cd96bd6734a77e654d1c59b3b48117953 (diff) | |
download | scintilla-mirror-d021884ab62bb339427cb01bebb2660f47417019.tar.gz |
Ensure keyboard-initiated context menu appears in multi-screen situations when
in PopUp::Text mode.
Diffstat (limited to 'win32')
-rw-r--r-- | win32/ScintillaWin.cxx | 26 |
1 files changed, 14 insertions, 12 deletions
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); |