From ca7b9fe538f9fb9a60e3a83d344978caa21889c4 Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 11 Sep 2000 09:23:52 +0000 Subject: [PATCH] Saner handling of WM_SYSCOMMAND:SC_KEYMENU to avoid problems on an isolated press of the Alt key git-svn-id: svn://svn.tartarus.org/sgt/putty@582 cda61777-01e9-0310-a592-d414129be87e --- window.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/window.c b/window.c index 408a9b68..d85a4cd1 100644 --- a/window.c +++ b/window.c @@ -36,6 +36,7 @@ #define WM_IGNORE_SIZE (WM_XUSER + 1) #define WM_IGNORE_CLIP (WM_XUSER + 2) +#define WM_IGNORE_KEYMENU (WM_XUSER + 3) static LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, unsigned char *output); @@ -855,8 +856,12 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, HDC hdc; static int ignore_size = FALSE; static int ignore_clip = FALSE; + static int ignore_keymenu = TRUE; static int just_reconfigged = FALSE; + if (message != 275) + debug(("msg=%d wParam=%08x lParam=%08x\r\n", message, wParam, lParam)); + switch (message) { case WM_TIMER: if (pending_netevent) @@ -879,6 +884,10 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, return 0; case WM_SYSCOMMAND: switch (wParam & ~0xF) { /* low 4 bits reserved to Windows */ + case SC_KEYMENU: + if (ignore_keymenu) + return 0; /* don't put up system menu on Alt */ + break; case IDM_SHOWLOG: showeventlog(hwnd); break; @@ -1108,6 +1117,9 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, case WM_IGNORE_CLIP: ignore_clip = wParam; /* don't panic on DESTROYCLIPBOARD */ break; + case WM_IGNORE_KEYMENU: + ignore_keymenu = wParam; /* do or don't ignore SC_KEYMENU */ + break; case WM_DESTROYCLIPBOARD: if (!ignore_clip) term_deselect(); @@ -1695,19 +1707,22 @@ static WPARAM compose_key = 0; /* Lets see if it's a pattern we know all about ... */ if (wParam == VK_PRIOR && shift_state == 1) { - SendMessage (hwnd, WM_VSCROLL, SB_PAGEUP, 0); - return 0; + SendMessage (hwnd, WM_VSCROLL, SB_PAGEUP, 0); + return 0; } if (wParam == VK_NEXT && shift_state == 1) { - SendMessage (hwnd, WM_VSCROLL, SB_PAGEDOWN, 0); - return 0; + SendMessage (hwnd, WM_VSCROLL, SB_PAGEDOWN, 0); + return 0; } if (left_alt && wParam == VK_F4 && cfg.alt_f4) { - return -1; + return -1; } if (left_alt && wParam == VK_SPACE && cfg.alt_space) { - SendMessage (hwnd, WM_SYSCOMMAND, SC_KEYMENU, 0); - return -1; + + SendMessage (hwnd, WM_IGNORE_KEYMENU, FALSE, 0); + SendMessage (hwnd, WM_SYSCOMMAND, SC_KEYMENU, 0); + SendMessage (hwnd, WM_IGNORE_KEYMENU, TRUE, 0); + return -1; } /* Nethack keypad */ -- 2.11.0