aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBert Münnich <ber.t@posteo.de>2016-11-29 12:07:08 +0100
committerBert Münnich <ber.t@posteo.de>2016-11-30 20:48:32 +0100
commit9a85dd41d8551f82a5d00c8e0dd0807e23bbdc6d (patch)
tree621316ac00612f9ebc2da8d69d74e5de309c7784
parentc1ba841783db1d53f4da303e0db3b05b5eea958f (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--Makefile2
-rw-r--r--main.c9
2 files changed, 10 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 07fff5e..3db5ade 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-VERSION := git-20161128
+VERSION := git-20161129
PREFIX := /usr/local
MANPREFIX := $(PREFIX)/share/man
diff --git a/main.c b/main.c
index d1813a5..131fdec 100644
--- a/main.c
+++ b/main.c
@@ -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) {