nsxivfd519ff
Disregard obsolete events, fixed issue #64
+12 −4
2 files changed
| @@ -1,4 +1,4 @@ | |||
| 1 | − | VERSION = git-20120816 | |
| 1 | + | VERSION = git-20120817 | |
| 2 | 2 | ||
| 3 | 3 | PREFIX = /usr/local | |
| 4 | 4 | MANPREFIX = $(PREFIX)/share/man | |
| @@ -419,7 +419,8 @@ void run(void) { | |||
| 419 | 419 | int xfd; | |
| 420 | 420 | fd_set fds; | |
| 421 | 421 | struct timeval timeout; | |
| 422 | − | XEvent ev; | |
| 422 | + | XEvent ev, nextev; | |
| 423 | + | unsigned int qlen; | |
| 423 | 424 | ||
| 424 | 425 | redraw(); | |
| 425 | 426 | ||
| @@ -450,7 +451,13 @@ void run(void) { | |||
| 450 | 451 | select(xfd + 1, &fds, 0, 0, &timeout); | |
| 451 | 452 | } | |
| 452 | 453 | ||
| 453 | − | XNextEvent(win.env.dpy, &ev); | |
| 454 | + | do { | |
| 455 | + | XNextEvent(win.env.dpy, &ev); | |
| 456 | + | qlen = XEventsQueued(win.env.dpy, QueuedAlready); | |
| 457 | + | if (qlen > 0) | |
| 458 | + | XPeekEvent(win.env.dpy, &nextev); | |
| 459 | + | } while (qlen > 0 && ev.type == nextev.type); | |
| 460 | + | ||
| 454 | 461 | switch (ev.type) { | |
| 455 | 462 | /* handle events */ | |
| 456 | 463 | case ButtonPress: | |
| @@ -476,7 +483,8 @@ void run(void) { | |||
| 476 | 483 | } | |
| 477 | 484 | break; | |
| 478 | 485 | case KeyPress: | |
| 479 | − | on_keypress(&ev.xkey); | |
| 486 | + | if (qlen == 0 || ev.xkey.keycode != nextev.xkey.keycode) | |
| 487 | + | on_keypress(&ev.xkey); | |
| 480 | 488 | break; | |
| 481 | 489 | case MotionNotify: | |
| 482 | 490 | if (mode == MODE_IMAGE) { | |