X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/f2003e3230fa6f3a1cc5d60256d1a19c8b0022d5..6908fed739ac49c43d4400ef572e0811a0ac676e:/window.c diff --git a/window.c b/window.c index 006e5ff7..9e09223e 100644 --- a/window.c +++ b/window.c @@ -1335,13 +1335,13 @@ static void reset_window(int reinit) { } } -static void click(Mouse_Button b, int x, int y, int shift, int ctrl) +static void click(Mouse_Button b, int x, int y, int shift, int ctrl, int alt) { int thistime = GetMessageTime(); if (send_raw_mouse && !(cfg.mouse_override && shift)) { lastbtn = MBT_NOTHING; - term_mouse(b, MA_CLICK, x, y, shift, ctrl); + term_mouse(b, MA_CLICK, x, y, shift, ctrl, alt); return; } @@ -1354,7 +1354,7 @@ static void click(Mouse_Button b, int x, int y, int shift, int ctrl) lastact = MA_CLICK; } if (lastact != MA_NOTHING) - term_mouse(b, lastact, x, y, shift, ctrl); + term_mouse(b, lastact, x, y, shift, ctrl, alt); lasttime = thistime; } @@ -1385,6 +1385,19 @@ static void show_mouseptr(int show) cursor_visible = show; } +static int is_alt_pressed(void) +{ + BYTE keystate[256]; + int r = GetKeyboardState(keystate); + if (!r) + return FALSE; + if (keystate[VK_MENU] & 0x80) + return TRUE; + if (keystate[VK_RMENU] & 0x80) + return TRUE; + return FALSE; +} + static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { @@ -1730,14 +1743,15 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, if (send_raw_mouse) { /* send a mouse-down followed by a mouse up */ + term_mouse(b, MA_CLICK, TO_CHR_X(X_POS(lParam)), TO_CHR_Y(Y_POS(lParam)), wParam & MK_SHIFT, - wParam & MK_CONTROL); + wParam & MK_CONTROL, is_alt_pressed()); term_mouse(b, MA_RELEASE, TO_CHR_X(X_POS(lParam)), TO_CHR_Y(Y_POS(lParam)), wParam & MK_SHIFT, - wParam & MK_CONTROL); + wParam & MK_CONTROL, is_alt_pressed()); } else { /* trigger a scroll */ term_scroll(0, @@ -1754,6 +1768,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, case WM_RBUTTONUP: { int button, press; + switch (message) { case WM_LBUTTONDOWN: button = MBT_LEFT; @@ -1786,13 +1801,14 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, if (press) { click(button, TO_CHR_X(X_POS(lParam)), TO_CHR_Y(Y_POS(lParam)), - wParam & MK_SHIFT, wParam & MK_CONTROL); + wParam & MK_SHIFT, wParam & MK_CONTROL, + is_alt_pressed()); SetCapture(hwnd); } else { term_mouse(button, MA_RELEASE, TO_CHR_X(X_POS(lParam)), TO_CHR_Y(Y_POS(lParam)), wParam & MK_SHIFT, - wParam & MK_CONTROL); + wParam & MK_CONTROL, is_alt_pressed()); ReleaseCapture(); } } @@ -1815,7 +1831,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, b = MBT_RIGHT; term_mouse(b, MA_DRAG, TO_CHR_X(X_POS(lParam)), TO_CHR_Y(Y_POS(lParam)), wParam & MK_SHIFT, - wParam & MK_CONTROL); + wParam & MK_CONTROL, is_alt_pressed()); } return 0; case WM_NCMOUSEMOVE: