From fbc1b6e997ad736e4bd1dd17778931044baa78e4 Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 30 Oct 2000 10:39:10 +0000 Subject: [PATCH] Fix side-effect of Always On Top patch: any reconfiguring in mid-session was zapping the window to the top left corner of the screen git-svn-id: svn://svn.tartarus.org/sgt/putty@780 cda61777-01e9-0310-a592-d414129be87e --- window.c | 176 +++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 93 insertions(+), 83 deletions(-) diff --git a/window.c b/window.c index 315df81b..e2e7ffb4 100644 --- a/window.c +++ b/window.c @@ -1156,92 +1156,102 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, } break; case IDM_RECONF: - if (!do_reconfig(hwnd)) - break; - just_reconfigged = TRUE; - { - int i; - for (i=0; i<8; i++) - if (fonts[i]) - DeleteObject(fonts[i]); - } - bold_mode = cfg.bold_colour ? BOLD_COLOURS : BOLD_FONT; - und_mode = UND_FONT; - init_fonts(0); - sfree(logpal); - /* Telnet will change local echo -> remote if the remote asks */ - if (cfg.protocol != PROT_TELNET) - ldisc = (cfg.ldisc_term ? &ldisc_term : &ldisc_simple); - if (pal) - DeleteObject(pal); - logpal = NULL; - pal = NULL; - cfgtopalette(); - init_palette(); - - /* Enable or disable the scroll bar, etc */ - { - LONG nflg, flag = GetWindowLong(hwnd, GWL_STYLE); - LONG nexflag, exflag = GetWindowLong(hwnd, GWL_EXSTYLE); - - nexflag = exflag; - if (cfg.alwaysontop) { - nexflag = WS_EX_TOPMOST; - SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE); - } else { - nexflag = 0; - SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE); + { + int prev_alwaysontop = cfg.alwaysontop; + if (!do_reconfig(hwnd)) + break; + just_reconfigged = TRUE; + { + int i; + for (i=0; i<8; i++) + if (fonts[i]) + DeleteObject(fonts[i]); + } + bold_mode = cfg.bold_colour ? BOLD_COLOURS : BOLD_FONT; + und_mode = UND_FONT; + init_fonts(0); + sfree(logpal); + /* + * Telnet will change local echo -> remote if the + * remote asks. + */ + if (cfg.protocol != PROT_TELNET) + ldisc = (cfg.ldisc_term ? &ldisc_term : &ldisc_simple); + if (pal) + DeleteObject(pal); + logpal = NULL; + pal = NULL; + cfgtopalette(); + init_palette(); + + /* Enable or disable the scroll bar, etc */ + { + LONG nflg, flag = GetWindowLong(hwnd, GWL_STYLE); + LONG nexflag, exflag = GetWindowLong(hwnd, GWL_EXSTYLE); + + nexflag = exflag; + if (cfg.alwaysontop != prev_alwaysontop) { + if (cfg.alwaysontop) { + nexflag = WS_EX_TOPMOST; + SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, + SWP_NOMOVE | SWP_NOSIZE); + } else { + nexflag = 0; + SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, + SWP_NOMOVE | SWP_NOSIZE); + } + } + + nflg = flag; + if (cfg.scrollbar) nflg |= WS_VSCROLL; + else nflg &= ~WS_VSCROLL; + if (cfg.locksize) + nflg &= ~(WS_THICKFRAME|WS_MAXIMIZEBOX); + else + nflg |= (WS_THICKFRAME|WS_MAXIMIZEBOX); + + if (nflg != flag || nexflag != exflag) + { + RECT cr, wr; + + if (nflg != flag) + SetWindowLong(hwnd, GWL_STYLE, nflg); + if (nexflag != exflag) + 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| + SWP_FRAMECHANGED); + + GetWindowRect (hwnd, &wr); + GetClientRect (hwnd, &cr); + extra_width = wr.right - wr.left - cr.right + cr.left; + extra_height = wr.bottom - wr.top - cr.bottom + cr.top; + } } - nflg = flag; - if (cfg.scrollbar) nflg |= WS_VSCROLL; - else nflg &= ~WS_VSCROLL; - if (cfg.locksize) - nflg &= ~(WS_THICKFRAME|WS_MAXIMIZEBOX); - else - nflg |= (WS_THICKFRAME|WS_MAXIMIZEBOX); - - if (nflg != flag || nexflag != exflag) - { - RECT cr, wr; - - if (nflg != flag) - SetWindowLong(hwnd, GWL_STYLE, nflg); - if (nexflag != exflag) - 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| - SWP_FRAMECHANGED); - - GetWindowRect (hwnd, &wr); - GetClientRect (hwnd, &cr); - extra_width = wr.right - wr.left - cr.right + cr.left; - extra_height = wr.bottom - wr.top - cr.bottom + cr.top; - } - } - - 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 (IsIconic(hwnd)) { - SetWindowText (hwnd, - cfg.win_name_always ? window_name : icon_name); - } + 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 (IsIconic(hwnd)) { + SetWindowText (hwnd, + cfg.win_name_always ? window_name : icon_name); + } + } break; - case IDM_CLRSB: - term_clrsb(); - break; - case IDM_RESET: - term_pwron(); - break; - case IDM_TEL_AYT: back->special (TS_AYT); break; + case IDM_CLRSB: + term_clrsb(); + break; + case IDM_RESET: + term_pwron(); + break; + case IDM_TEL_AYT: back->special (TS_AYT); break; case IDM_TEL_BRK: back->special (TS_BRK); break; case IDM_TEL_SYNCH: back->special (TS_SYNCH); break; case IDM_TEL_EC: back->special (TS_EC); break; -- 2.11.0