diff --git a/svkbd.c b/svkbd.c index 88f6e3f..2076fb7 100644 --- a/svkbd.c +++ b/svkbd.c @@ -255,7 +255,6 @@ drawkeyboard(void) { if(keys[i].keysym != 0) drawkey(&keys[i]); } - XSync(dpy, False); } void @@ -456,16 +455,24 @@ run(void) { fd_set fds; struct timeval tv; + xfd = ConnectionNumber(dpy); - FD_ZERO(&fds); - FD_SET(xfd, &fds); tv.tv_usec = 0; - tv.tv_sec = 1; + tv.tv_sec = 2; + + //XSync(dpy, False); + XFlush(dpy); + while (running) { - select(xfd + 1, &fds, NULL, NULL, &tv); - XNextEvent(dpy, &ev); - if(handler[ev.type]) { - (handler[ev.type])(&ev); /* call handler */ + FD_ZERO(&fds); + FD_SET(xfd, &fds); + if (select(xfd + 1, &fds, NULL, NULL, &tv)) { + while (XPending(dpy)) { + XNextEvent(dpy, &ev); + if(handler[ev.type]) { + (handler[ev.type])(&ev); /* call handler */ + } + } } } } @@ -628,8 +635,8 @@ main(int argc, char *argv[]) { int i, xr, yr, bitm; unsigned int wr, hr; - signal(SIGTERM, sigterm); memcpy(&keys, &keys_en, sizeof(keys_en)); + signal(SIGTERM, sigterm); for (i = 1; argv[i]; i++) { if(!strcmp(argv[i], "-v")) { die("svkbd-"VERSION", © 2006-2016 svkbd engineers,"