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