#include <windows.h>
#include <imm.h>
#include <commctrl.h>
+#include <mmsystem.h>
#ifndef AUTO_WINSOCK
#ifdef WINSOCK_TWO
#include <winsock2.h>
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,
/* 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;
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;
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;
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);
* 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);
}
/*
*/
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];