X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/cbc3272bf34cfa54e7e5ba52eb65b875967c7a6c..b65d182beff5f0a5a2b743c886416c8d65a5b921:/window.c diff --git a/window.c b/window.c index 5dab8df4..a9456c8c 100644 --- a/window.c +++ b/window.c @@ -149,6 +149,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { default_protocol = DEFAULT_PROTOCOL; default_port = DEFAULT_PORT; + cfg.logtype = LGTYP_NONE; do_defaults(NULL, &cfg); @@ -169,11 +170,6 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { tolower(p[2]) == 'h') { default_protocol = cfg.protocol = PROT_SSH; default_port = cfg.port = 22; - } else if (q == p + 3 && - tolower(p[0]) == 'l' && - tolower(p[1]) == 'o' && - tolower(p[2]) == 'g') { - logfile = "putty.log"; } else if (q == p + 7 && tolower(p[0]) == 'c' && tolower(p[1]) == 'l' && @@ -537,6 +533,11 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { ShowWindow (hwnd, show); /* + * Open the initial log file if there is one. + */ + logfopen(); + + /* * Set the palette up. */ pal = NULL; @@ -1060,6 +1061,7 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, static int ignore_clip = FALSE; static int just_reconfigged = FALSE; static int resizing = FALSE; + static int need_backend_resize = FALSE; switch (message) { case WM_TIMER: @@ -1170,14 +1172,28 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, case IDM_RECONF: { int prev_alwaysontop = cfg.alwaysontop; + char oldlogfile[FILENAME_MAX]; + int oldlogtype; int need_setwpos = FALSE; int old_fwidth, old_fheight; + + strcpy(oldlogfile, cfg.logfilename); + oldlogtype = cfg.logtype; cfg.width = cols; cfg.height = rows; old_fwidth = font_width; old_fheight = font_height; + GetWindowText(hwnd, cfg.wintitle, sizeof(cfg.wintitle)); + if (!do_reconfig(hwnd)) break; + + if (strcmp(oldlogfile, cfg.logfilename) || + oldlogtype != cfg.logtype) { + logfclose(); /* reset logging */ + logfopen(); + } + just_reconfigged = TRUE; { int i; @@ -1267,6 +1283,7 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, SWP_NOACTIVATE | SWP_NOCOPYBITS | SWP_NOMOVE | SWP_NOZORDER); } + set_title(cfg.wintitle); if (IsIconic(hwnd)) { SetWindowText (hwnd, cfg.win_name_always ? window_name : icon_name); @@ -1422,11 +1439,13 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, case WM_ENTERSIZEMOVE: EnableSizeTip(1); resizing = TRUE; + need_backend_resize = FALSE; break; case WM_EXITSIZEMOVE: EnableSizeTip(0); resizing = FALSE; - back->size(); + if (need_backend_resize) + back->size(); break; case WM_SIZING: { @@ -1502,6 +1521,8 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, */ if (!resizing) back->size(); + else + need_backend_resize = TRUE; just_reconfigged = FALSE; } } @@ -1870,11 +1891,14 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, int scan, left_alt = 0, key_down, shift_state; int r, i, code; unsigned char * p = output; + static int alt_state = 0; + + HKL kbd_layout = GetKeyboardLayout(0); static WORD keys[3]; static int compose_char = 0; static WPARAM compose_key = 0; - + r = GetKeyboardState(keystate); if (!r) memset(keystate, 0, sizeof(keystate)); else @@ -1907,7 +1931,7 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, debug(("*")); debug((", S%02x", scan=(HIWORD(lParam) & 0xFF) )); - ch = MapVirtualKey(wParam, 2); + ch = MapVirtualKeyEx(wParam, 2, kbd_layout); if (ch>=' ' && ch<='~') debug((", '%c'", ch)); else if (ch) debug((", $%02x", ch)); @@ -2064,6 +2088,7 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, return -1; } if (left_alt && wParam == VK_SPACE && cfg.alt_space) { + alt_state = 0; PostMessage(hwnd, WM_CHAR, ' ', 0); SendMessage (hwnd, WM_SYSCOMMAND, SC_KEYMENU, 0); return -1; @@ -2291,7 +2316,7 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, if(cfg.xlat_capslockcyr) keystate[VK_CAPITAL] = 0; - r = ToAscii (wParam, scan, keystate, keys, 0); + r = ToAsciiEx(wParam, scan, keystate, keys, 0, kbd_layout); if(r>0) { p = output; @@ -2340,7 +2365,6 @@ static int TranslateKey(UINT message, WPARAM wParam, LPARAM lParam, /* 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)