diff options
author | Bert Münnich <ber.t@posteo.de> | 2016-11-29 12:07:08 +0100 |
---|---|---|
committer | Bert Münnich <ber.t@posteo.de> | 2016-11-30 20:48:32 +0100 |
commit | 9a85dd41d8551f82a5d00c8e0dd0807e23bbdc6d (patch) | |
tree | 621316ac00612f9ebc2da8d69d74e5de309c7784 | |
parent | c1ba841783db1d53f4da303e0db3b05b5eea958f (diff) |
Ignore button and key events while key-handler is running
Related to issue #253, which originally asked for a non-blocking key-handler.
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | main.c | 9 |
2 files changed, 10 insertions, 1 deletions
@@ -1,4 +1,4 @@ -VERSION := git-20161128 +VERSION := git-20161129 PREFIX := /usr/local MANPREFIX := $(PREFIX)/share/man @@ -458,6 +458,11 @@ void clear_resize(void) resized = false; } +Bool is_input_ev(Display *dpy, XEvent *ev, XPointer arg) +{ + return ev->type == ButtonPress || ev->type == KeyPress; +} + void run_key_handler(const char *key, unsigned int mask) { pid_t pid; @@ -468,6 +473,7 @@ void run_key_handler(const char *key, unsigned int mask) int fcnt = marked ? markcnt : 1; char kstr[32]; struct stat *oldst, st; + XEvent dump; if (keyhandler.f.err != 0) { if (!keyhandler.warned) { @@ -538,6 +544,9 @@ void run_key_handler(const char *key, unsigned int mask) f++; } } + /* drop user input events that occured while running the key handler */ + while (XCheckIfEvent(win.env.dpy, &dump, is_input_ev, NULL)); + end: if (mode == MODE_IMAGE) { if (changed) { |