diff options
Diffstat (limited to 'win32/ScintillaWin.cxx')
-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); |