X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/fc35d05a58ea5981eedb66b8868f2ea1989c99bc..6908fed739ac49c43d4400ef572e0811a0ac676e:/window.c diff --git a/window.c b/window.c index 26567d70..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) { @@ -1410,6 +1423,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, last_movement = now; } } + net_pending_errors(); return 0; case WM_CREATE: break; @@ -1614,6 +1628,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, InvalidateRect(hwnd, NULL, TRUE); reset_window(init_lvl); + net_pending_errors(); } break; case IDM_COPYALL: @@ -1627,42 +1642,55 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, break; case IDM_TEL_AYT: back->special(TS_AYT); + net_pending_errors(); break; case IDM_TEL_BRK: back->special(TS_BRK); + net_pending_errors(); break; case IDM_TEL_SYNCH: back->special(TS_SYNCH); + net_pending_errors(); break; case IDM_TEL_EC: back->special(TS_EC); + net_pending_errors(); break; case IDM_TEL_EL: back->special(TS_EL); + net_pending_errors(); break; case IDM_TEL_GA: back->special(TS_GA); + net_pending_errors(); break; case IDM_TEL_NOP: back->special(TS_NOP); + net_pending_errors(); break; case IDM_TEL_ABORT: back->special(TS_ABORT); + net_pending_errors(); break; case IDM_TEL_AO: back->special(TS_AO); + net_pending_errors(); break; case IDM_TEL_IP: back->special(TS_IP); + net_pending_errors(); break; case IDM_TEL_SUSP: back->special(TS_SUSP); + net_pending_errors(); break; case IDM_TEL_EOR: back->special(TS_EOR); + net_pending_errors(); break; case IDM_TEL_EOF: back->special(TS_EOF); + net_pending_errors(); break; case IDM_ABOUT: showabout(hwnd); @@ -1715,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, @@ -1739,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; @@ -1771,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(); } } @@ -1800,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: @@ -2188,6 +2219,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, } } } + net_pending_errors(); return 0; case WM_INPUTLANGCHANGE: {