summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorBert Münnich <ber.t@posteo.de>2014-01-08 22:58:27 +0100
committerBert Münnich <ber.t@posteo.de>2014-01-08 22:58:34 +0100
commite82397db1507d06db25f952a6b5c470b8cd66e5a (patch)
treea0c1c38034cd696ce60a882fe1a74f2d1229782d /main.c
parent9632dd88b97c0051ba43c82a3eb26bc2694489a0 (diff)
downloadnsxiv-e82397db1507d06db25f952a6b5c470b8cd66e5a.tar.zst
Fixed handling of overloaded key mappings
Issue described here: https://bbs.archlinux.org/viewtopic.php?pid=1117294#p1117294
Diffstat (limited to 'main.c')
-rw-r--r--main.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/main.c b/main.c
index 06b4a90..2b4a632 100644
--- a/main.c
+++ b/main.c
@@ -542,15 +542,21 @@ void on_keypress(XKeyEvent *kev)
for (i = 0; i < ARRLEN(keys); i++) {
if (keys[i].ksym == ksym &&
- MODMASK(keys[i].mask | sh) == MODMASK(kev->state))
+ MODMASK(keys[i].mask | sh) == MODMASK(kev->state) &&
+ keys[i].cmd != NULL)
{
- if (keys[i].cmd != NULL && keys[i].cmd(keys[i].arg))
+ cmdreturn_t ret = keys[i].cmd(keys[i].arg);
+
+ if (ret == CMD_INVALID)
+ continue;
+ if (ret == CMD_DIRTY)
redraw();
- prefix = 0;
- return;
+ break;
}
}
- key_handler(XKeysymToString(ksym), kev->state & ~sh);
+ if (i == ARRLEN(keys))
+ key_handler(XKeysymToString(ksym), kev->state & ~sh);
+ prefix = 0;
}
void on_buttonpress(XButtonEvent *bev)
@@ -566,11 +572,16 @@ void on_buttonpress(XButtonEvent *bev)
for (i = 0; i < ARRLEN(buttons); i++) {
if (buttons[i].button == bev->button &&
- MODMASK(buttons[i].mask) == MODMASK(bev->state))
+ MODMASK(buttons[i].mask) == MODMASK(bev->state) &&
+ buttons[i].cmd != NULL)
{
- if (buttons[i].cmd != NULL && buttons[i].cmd(buttons[i].arg))
+ cmdreturn_t ret = buttons[i].cmd(buttons[i].arg);
+
+ if (ret == CMD_INVALID)
+ continue;
+ if (ret == CMD_DIRTY)
redraw();
- return;
+ break;
}
}
} else {
@@ -606,6 +617,7 @@ void on_buttonpress(XButtonEvent *bev)
break;
}
}
+ prefix = 0;
}
void run(void)