Run XFlush instead of XSync before starting main loop; fixes bug where rending of keys fails when used in conjunction w/ dwm dock patch

This commit is contained in:
Miles Alan 2020-08-02 15:46:10 +02:00 committed by Hiltjo Posthuma
parent 819f92950e
commit edfd50cdcb
1 changed files with 16 additions and 9 deletions

25
svkbd.c
View File

@ -258,7 +258,6 @@ drawkeyboard(void) {
if(keys[i].keysym != 0)
drawkey(&keys[i]);
}
XSync(dpy, False);
}
void
@ -459,16 +458,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 */
}
}
}
}
}
@ -631,8 +638,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,"