X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/fbc1b6e997ad736e4bd1dd17778931044baa78e4..2cba1186aa3895ab0ca3613d6e1f17854f70a97a:/window.c?ds=sidebyside diff --git a/window.c b/window.c index e2e7ffb4..2797c53e 100644 --- a/window.c +++ b/window.c @@ -40,6 +40,7 @@ #define IDM_TEL_EOF 0x0130 #define IDM_ABOUT 0x0140 #define IDM_SAVEDSESS 0x0150 +#define IDM_COPYALL 0x0160 #define IDM_SAVED_MIN 0x1000 #define IDM_SAVED_MAX 0x2000 @@ -412,9 +413,10 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { { char *bits; int size = (font_width+15)/16 * 2 * font_height; - bits = calloc(size, 1); + bits = smalloc(size); + memset(bits, 0, size); caretbm = CreateBitmap(font_width, font_height, 1, 1, bits); - free(bits); + sfree(bits); } /* @@ -513,6 +515,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { AppendMenu (m, MF_POPUP | MF_ENABLED, (UINT) s, "Sa&ved Sessions"); AppendMenu (m, MF_ENABLED, IDM_RECONF, "Chan&ge Settings..."); AppendMenu (m, MF_SEPARATOR, 0, 0); + AppendMenu (m, MF_ENABLED, IDM_COPYALL, "C&opy All to Clipboard"); AppendMenu (m, MF_ENABLED, IDM_CLRSB, "C&lear Scrollback"); AppendMenu (m, MF_ENABLED, IDM_RESET, "Rese&t Terminal"); AppendMenu (m, MF_SEPARATOR, 0, 0); @@ -592,7 +595,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { if (!has_focus) timer_id = SetTimer(hwnd, 1, 59500, NULL); else - timer_id = SetTimer(hwnd, 1, 250, NULL); + timer_id = SetTimer(hwnd, 1, 100, NULL); long_timer = 1; /* There's no point rescanning everything in the message queue @@ -1128,7 +1131,7 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, cl = c; } else if (wParam == IDM_SAVEDSESS) { char *session = sessions[(lParam - IDM_SAVED_MIN) / 16]; - cl = malloc(16 + strlen(session)); /* 8, but play safe */ + cl = smalloc(16 + strlen(session)); /* 8, but play safe */ if (!cl) cl = NULL; /* not a very important failure mode */ else { @@ -1152,7 +1155,7 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, if (filemap) CloseHandle(filemap); if (freecl) - free(cl); + sfree(cl); } break; case IDM_RECONF: @@ -1245,6 +1248,9 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, } } break; + case IDM_COPYALL: + term_copyall(); + break; case IDM_CLRSB: term_clrsb(); break; @@ -1905,11 +1911,14 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, } #endif + if (wParam == VK_MENU && (HIWORD(lParam)&KF_EXTENDED)) { + keystate[VK_RMENU] = keystate[VK_MENU]; + } + /* Note if AltGr was pressed and if it was used as a compose key */ if (cfg.compose_key) { if (wParam == VK_MENU && (HIWORD(lParam)&KF_EXTENDED)) { - keystate[VK_RMENU] = keystate[VK_MENU]; if (!compose_state) compose_key = wParam; } if (wParam == VK_APPS && !compose_state) @@ -1926,8 +1935,9 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, } else if (compose_state==1 && wParam != VK_CONTROL) compose_state = 0; - } else + } else { compose_state = 0; + } /* Nastyness with NUMLock - Shift-NUMLock is left alone though */ if ( (cfg.funky_type == 3 || @@ -2029,7 +2039,7 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, return -1; } if (left_alt && wParam == VK_SPACE && cfg.alt_space) { - + PostMessage(hwnd, WM_CHAR, ' ', 0); SendMessage (hwnd, WM_SYSCOMMAND, SC_KEYMENU, 0); return -1; } @@ -2302,9 +2312,17 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, } } - /* This stops ALT press-release doing a 'COMMAND MENU' function */ - if (!cfg.alt_only) { - if (message == WM_SYSKEYUP && wParam == VK_MENU) + /* ALT alone may or may not want to bring up the System menu */ + if (wParam == VK_MENU) { + if (cfg.alt_only) { + static int alt_state = 0; + if (message == WM_SYSKEYDOWN) + alt_state = 1; + else if (message == WM_SYSKEYUP && alt_state) + PostMessage(hwnd, WM_CHAR, ' ', 0); + if (message == WM_SYSKEYUP) + alt_state = 0; + } else return 0; }