nsxiv9a85dd4
Ignore button and key events while key-handler is running
Related to issue #253, which originally asked for a non-blocking key-handler.
+10 −1
2 files changed
| @@ -1,4 +1,4 @@ | |||
| 1 | − | VERSION := git-20161128 | |
| 1 | + | VERSION := git-20161129 | |
| 2 | 2 | ||
| 3 | 3 | PREFIX := /usr/local | |
| 4 | 4 | MANPREFIX := $(PREFIX)/share/man | |
| @@ -458,6 +458,11 @@ void clear_resize(void) | |||
| 458 | 458 | resized = false; | |
| 459 | 459 | } | |
| 460 | 460 | ||
| 461 | + | Bool is_input_ev(Display *dpy, XEvent *ev, XPointer arg) | |
| 462 | + | { | |
| 463 | + | return ev->type == ButtonPress || ev->type == KeyPress; | |
| 464 | + | } | |
| 465 | + | ||
| 461 | 466 | void run_key_handler(const char *key, unsigned int mask) | |
| 462 | 467 | { | |
| 463 | 468 | pid_t pid; | |
| @@ -468,6 +473,7 @@ void run_key_handler(const char *key, unsigned int mask) | |||
| 468 | 473 | int fcnt = marked ? markcnt : 1; | |
| 469 | 474 | char kstr[32]; | |
| 470 | 475 | struct stat *oldst, st; | |
| 476 | + | XEvent dump; | |
| 471 | 477 | ||
| 472 | 478 | if (keyhandler.f.err != 0) { | |
| 473 | 479 | if (!keyhandler.warned) { | |
| @@ -538,6 +544,9 @@ void run_key_handler(const char *key, unsigned int mask) | |||
| 538 | 544 | f++; | |
| 539 | 545 | } | |
| 540 | 546 | } | |
| 547 | + | /* drop user input events that occured while running the key handler */ | |
| 548 | + | while (XCheckIfEvent(win.env.dpy, &dump, is_input_ev, NULL)); | |
| 549 | + | ||
| 541 | 550 | end: | |
| 542 | 551 | if (mode == MODE_IMAGE) { | |
| 543 | 552 | if (changed) { | |