X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/582c005495b54e9c107029b70a0ae9e8c892634c..37d868ecb7ff6ba8aad4b8325c016c0a045f6bb3:/window.c diff --git a/window.c b/window.c index 4c4360c4..1805088a 100644 --- a/window.c +++ b/window.c @@ -1,6 +1,7 @@ #include #include #include +#include #ifndef AUTO_WINSOCK #ifdef WINSOCK_TWO #include @@ -370,7 +371,8 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { int exwinmode = 0; if (!cfg.scrollbar) winmode &= ~(WS_VSCROLL); if (cfg.locksize) winmode &= ~(WS_THICKFRAME|WS_MAXIMIZEBOX); - if (cfg.alwaysontop) exwinmode = WS_EX_TOPMOST; + if (cfg.alwaysontop) exwinmode |= WS_EX_TOPMOST; + if (cfg.sunken_edge) exwinmode |= WS_EX_CLIENTEDGE; hwnd = CreateWindowEx (exwinmode, appname, appname, winmode, CW_USEDEFAULT, CW_USEDEFAULT, guess_width, guess_height, @@ -604,7 +606,7 @@ int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR cmdline, int show) { /* Hmm, term_update didn't want to do an update too soon ... */ timer_id = SetTimer(hwnd, 1, 50, NULL); else if (!has_focus) - timer_id = SetTimer(hwnd, 1, 59500, NULL); + timer_id = SetTimer(hwnd, 1, 2000, NULL); else timer_id = SetTimer(hwnd, 1, 100, NULL); long_timer = 1; @@ -1192,6 +1194,7 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, case IDM_RECONF: { int prev_alwaysontop = cfg.alwaysontop; + int prev_sunken_edge = cfg.sunken_edge; char oldlogfile[FILENAME_MAX]; int oldlogtype; int need_setwpos = FALSE; @@ -1245,15 +1248,19 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, nexflag = exflag; if (cfg.alwaysontop != prev_alwaysontop) { if (cfg.alwaysontop) { - nexflag = WS_EX_TOPMOST; + nexflag |= WS_EX_TOPMOST; SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } else { - nexflag = 0; + nexflag &= ~(WS_EX_TOPMOST); SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } } + if (cfg.sunken_edge) + nexflag |= WS_EX_CLIENTEDGE; + else + nexflag &= ~(WS_EX_CLIENTEDGE); nflg = flag; if (cfg.scrollbar) nflg |= WS_VSCROLL; @@ -1290,7 +1297,8 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, cfg.width != cols || old_fwidth != font_width || old_fheight != font_height || - cfg.savelines != savelines) + cfg.savelines != savelines || + cfg.sunken_edge != prev_sunken_edge) need_setwpos = TRUE; term_size(cfg.height, cfg.width, cfg.savelines); InvalidateRect(hwnd, NULL, TRUE); @@ -1664,7 +1672,8 @@ static LRESULT CALLBACK WndProc (HWND hwnd, UINT message, * have one.) */ void sys_cursor(int x, int y) { - SetCaretPos(x * font_width, y * font_height); + if (has_focus) + SetCaretPos(x * font_width, y * font_height); } /* @@ -2663,7 +2672,21 @@ void fatalbox(char *fmt, ...) { */ void beep(int mode) { if (mode == BELL_DEFAULT) { + /* + * For MessageBeep style bells, we want to be careful of + * timing, because they don't have the nice property of + * PlaySound bells that each one cancels the previous + * active one. So we limit the rate to one per 50ms or so. + */ + static long lastbeep = 0; + long now, beepdiff; + + now = GetTickCount(); + beepdiff = now - lastbeep; + if (beepdiff >= 0 && beepdiff < 50) + return; MessageBeep(MB_OK); + lastbeep = now; } else if (mode == BELL_WAVEFILE) { if (!PlaySound(cfg.bell_wavefile, NULL, SND_ASYNC | SND_FILENAME)) { char buf[sizeof(cfg.bell_wavefile)+80];