aboutsummaryrefslogtreecommitdiffhomepage
path: root/win32/ScintillaWin.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'win32/ScintillaWin.cxx')
-rw-r--r--win32/ScintillaWin.cxx40
1 files changed, 25 insertions, 15 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index 9cf900fb3..d189f226e 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -1418,11 +1418,17 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
(wParam & MK_CONTROL) != 0);
break;
- case WM_RBUTTONDOWN:
- ::SetFocus(MainHWND());
- if (!PointInSelection(Point::FromLong(static_cast<long>(lParam)))) {
- CancelModes();
- SetEmptySelection(PositionFromLocation(Point::FromLong(static_cast<long>(lParam))));
+ case WM_RBUTTONDOWN: {
+ ::SetFocus(MainHWND());
+ Point pt = Point::FromLong(static_cast<long>(lParam));
+ if (!PointInSelection(pt)) {
+ CancelModes();
+ SetEmptySelection(PositionFromLocation(Point::FromLong(static_cast<long>(lParam))));
+ }
+
+ RightButtonDownWithModifiers(pt, ::GetMessageTime(), ModifierFlags((wParam & MK_SHIFT) != 0,
+ (wParam & MK_CONTROL) != 0,
+ Platform::IsKeyDown(VK_MENU)));
}
break;
@@ -1571,18 +1577,22 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
return HandleCompositionWindowed(wParam, lParam);
}
- case WM_CONTEXTMENU:
- if (displayPopupMenu) {
+ case WM_CONTEXTMENU: {
Point pt = Point::FromLong(static_cast<long>(lParam));
- if ((pt.x == -1) && (pt.y == -1)) {
- // Caused by keyboard so display menu near caret
- pt = PointMainCaret();
- POINT spt = {static_cast<int>(pt.x), static_cast<int>(pt.y)};
- ::ClientToScreen(MainHWND(), &spt);
- pt = PointFromPOINT(spt);
+ POINT rpt = {static_cast<int>(pt.x), static_cast<int>(pt.y)};
+ ::ScreenToClient(MainHWND(), &rpt);
+ const Point ptClient = PointFromPOINT(rpt);
+ if (ShouldDisplayPopup(ptClient)) {
+ if ((pt.x == -1) && (pt.y == -1)) {
+ // Caused by keyboard so display menu near caret
+ pt = PointMainCaret();
+ POINT spt = {static_cast<int>(pt.x), static_cast<int>(pt.y)};
+ ::ClientToScreen(MainHWND(), &spt);
+ pt = PointFromPOINT(spt);
+ }
+ ContextMenu(pt);
+ return 0;
}
- ContextMenu(pt);
- return 0;
}
return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam);