mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-16 12:03:03 -05:00
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 [originally from svn r780]
This commit is contained in:
parent
21299d2c39
commit
a739876719
172
window.c
172
window.c
@ -1156,92 +1156,102 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case IDM_RECONF:
|
case IDM_RECONF:
|
||||||
if (!do_reconfig(hwnd))
|
{
|
||||||
break;
|
int prev_alwaysontop = cfg.alwaysontop;
|
||||||
just_reconfigged = TRUE;
|
if (!do_reconfig(hwnd))
|
||||||
{
|
break;
|
||||||
int i;
|
just_reconfigged = TRUE;
|
||||||
for (i=0; i<8; i++)
|
{
|
||||||
if (fonts[i])
|
int i;
|
||||||
DeleteObject(fonts[i]);
|
for (i=0; i<8; i++)
|
||||||
}
|
if (fonts[i])
|
||||||
bold_mode = cfg.bold_colour ? BOLD_COLOURS : BOLD_FONT;
|
DeleteObject(fonts[i]);
|
||||||
und_mode = UND_FONT;
|
}
|
||||||
init_fonts(0);
|
bold_mode = cfg.bold_colour ? BOLD_COLOURS : BOLD_FONT;
|
||||||
sfree(logpal);
|
und_mode = UND_FONT;
|
||||||
/* Telnet will change local echo -> remote if the remote asks */
|
init_fonts(0);
|
||||||
if (cfg.protocol != PROT_TELNET)
|
sfree(logpal);
|
||||||
ldisc = (cfg.ldisc_term ? &ldisc_term : &ldisc_simple);
|
/*
|
||||||
if (pal)
|
* Telnet will change local echo -> remote if the
|
||||||
DeleteObject(pal);
|
* remote asks.
|
||||||
logpal = NULL;
|
*/
|
||||||
pal = NULL;
|
if (cfg.protocol != PROT_TELNET)
|
||||||
cfgtopalette();
|
ldisc = (cfg.ldisc_term ? &ldisc_term : &ldisc_simple);
|
||||||
init_palette();
|
if (pal)
|
||||||
|
DeleteObject(pal);
|
||||||
|
logpal = NULL;
|
||||||
|
pal = NULL;
|
||||||
|
cfgtopalette();
|
||||||
|
init_palette();
|
||||||
|
|
||||||
/* Enable or disable the scroll bar, etc */
|
/* Enable or disable the scroll bar, etc */
|
||||||
{
|
{
|
||||||
LONG nflg, flag = GetWindowLong(hwnd, GWL_STYLE);
|
LONG nflg, flag = GetWindowLong(hwnd, GWL_STYLE);
|
||||||
LONG nexflag, exflag = GetWindowLong(hwnd, GWL_EXSTYLE);
|
LONG nexflag, exflag = GetWindowLong(hwnd, GWL_EXSTYLE);
|
||||||
|
|
||||||
nexflag = exflag;
|
nexflag = exflag;
|
||||||
if (cfg.alwaysontop) {
|
if (cfg.alwaysontop != prev_alwaysontop) {
|
||||||
nexflag = WS_EX_TOPMOST;
|
if (cfg.alwaysontop) {
|
||||||
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE);
|
nexflag = WS_EX_TOPMOST;
|
||||||
} else {
|
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0,
|
||||||
nexflag = 0;
|
SWP_NOMOVE | SWP_NOSIZE);
|
||||||
SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, 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;
|
term_size(cfg.height, cfg.width, cfg.savelines);
|
||||||
if (cfg.scrollbar) nflg |= WS_VSCROLL;
|
InvalidateRect(hwnd, NULL, TRUE);
|
||||||
else nflg &= ~WS_VSCROLL;
|
SetWindowPos (hwnd, NULL, 0, 0,
|
||||||
if (cfg.locksize)
|
extra_width + font_width * cfg.width,
|
||||||
nflg &= ~(WS_THICKFRAME|WS_MAXIMIZEBOX);
|
extra_height + font_height * cfg.height,
|
||||||
else
|
SWP_NOACTIVATE | SWP_NOCOPYBITS |
|
||||||
nflg |= (WS_THICKFRAME|WS_MAXIMIZEBOX);
|
SWP_NOMOVE | SWP_NOZORDER);
|
||||||
|
if (IsIconic(hwnd)) {
|
||||||
if (nflg != flag || nexflag != exflag)
|
SetWindowText (hwnd,
|
||||||
{
|
cfg.win_name_always ? window_name : icon_name);
|
||||||
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);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case IDM_CLRSB:
|
case IDM_CLRSB:
|
||||||
term_clrsb();
|
term_clrsb();
|
||||||
break;
|
break;
|
||||||
case IDM_RESET:
|
case IDM_RESET:
|
||||||
term_pwron();
|
term_pwron();
|
||||||
break;
|
break;
|
||||||
case IDM_TEL_AYT: back->special (TS_AYT); break;
|
case IDM_TEL_AYT: back->special (TS_AYT); break;
|
||||||
case IDM_TEL_BRK: back->special (TS_BRK); break;
|
case IDM_TEL_BRK: back->special (TS_BRK); break;
|
||||||
case IDM_TEL_SYNCH: back->special (TS_SYNCH); break;
|
case IDM_TEL_SYNCH: back->special (TS_SYNCH); break;
|
||||||
case IDM_TEL_EC: back->special (TS_EC); break;
|
case IDM_TEL_EC: back->special (TS_EC); break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user