X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/dcbde23605bb045df116a1dd522d4ddb4d9288fa..5b7ce734d2e126ebebf27b0a6ece1db672cd3eae:/window.c diff --git a/window.c b/window.c index 1568617b..8c2d96c9 100644 --- a/window.c +++ b/window.c @@ -314,6 +314,14 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { } } + /* Check for invalid Port number (i.e. zero) */ + if (cfg.port == 0) { + MessageBox(NULL, "Invalid Port Number", + "PuTTY Internal Error", MB_OK |MB_ICONEXCLAMATION); + WSACleanup(); + return 1; + } + real_ldisc = (cfg.ldisc_term ? &ldisc_term : &ldisc_simple); /* To start with, we use the simple line discipline, so we can * type passwords etc without fear of them being echoed... */ @@ -418,6 +426,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { caretbm = CreateBitmap(font_width, font_height, 1, 1, bits); sfree(bits); } + CreateCaret(hwnd, caretbm, font_width, font_height); /* * Initialise the scroll bar. @@ -1161,6 +1170,9 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, case IDM_RECONF: { int prev_alwaysontop = cfg.alwaysontop; + int need_setwpos = FALSE; + cfg.width = cols; + cfg.height = rows; if (!do_reconfig(hwnd)) break; just_reconfigged = TRUE; @@ -1223,6 +1235,7 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, SetWindowLong(hwnd, GWL_EXSTYLE, nexflag); SendMessage (hwnd, WM_IGNORE_SIZE, 0, 0); + SetWindowPos(hwnd, NULL, 0,0,0,0, SWP_NOACTIVATE|SWP_NOCOPYBITS| SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER| @@ -1235,13 +1248,20 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, } } + if (cfg.height != rows || + cfg.width != cols || + cfg.savelines != savelines) + need_setwpos = TRUE; term_size(cfg.height, cfg.width, cfg.savelines); InvalidateRect(hwnd, NULL, TRUE); - SetWindowPos (hwnd, NULL, 0, 0, - extra_width + font_width * cfg.width, - extra_height + font_height * cfg.height, - SWP_NOACTIVATE | SWP_NOCOPYBITS | - SWP_NOMOVE | SWP_NOZORDER); + if (need_setwpos) { + force_normal(hwnd); + SetWindowPos (hwnd, NULL, 0, 0, + extra_width + font_width * cfg.width, + extra_height + font_height * cfg.height, + SWP_NOACTIVATE | SWP_NOCOPYBITS | + SWP_NOMOVE | SWP_NOZORDER); + } if (IsIconic(hwnd)) { SetWindowText (hwnd, cfg.win_name_always ? window_name : icon_name); @@ -1379,7 +1399,7 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, return 0; case WM_SETFOCUS: has_focus = TRUE; - CreateCaret(hwnd, caretbm, 0, 0); + CreateCaret(hwnd, caretbm, font_width, font_height); ShowCaret(hwnd); compose_state = 0; term_out(); @@ -1911,11 +1931,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) @@ -1932,8 +1955,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 ||