#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);
int guess_width, guess_height;
putty_inst = inst;
- flags = FLAG_VERBOSE | FLAG_WINDOWED | FLAG_CONNECTION;
+ flags = FLAG_VERBOSE | FLAG_INTERACTIVE;
winsock_ver = MAKEWORD(1, 1);
if (WSAStartup(winsock_ver, &wsadata)) {
*/
static void enact_pending_netevent(void) {
int i;
+ static int reentering = 0;
+
+ if (reentering)
+ return; /* don't unpend the pending */
+
pending_netevent = FALSE;
+
+ reentering = 1;
i = back->msg (pend_netevent_wParam, pend_netevent_lParam);
+ reentering = 0;
if (i < 0) {
char buf[1024];
HDC hdc;
static int ignore_size = FALSE;
static int ignore_clip = FALSE;
+ static int ignore_keymenu = TRUE;
static int just_reconfigged = FALSE;
switch (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;
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();
/* 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 */