From 3bc7082f4e08e71fb40944bb085fafbb65f6c8cf Mon Sep 17 00:00:00 2001 From: N-R-K <79544946+N-R-K@users.noreply.github.com> Date: Wed, 1 Dec 2021 05:41:22 +0600 Subject: [PATCH] fix: send implicit_mod to process_bindings (#176) * fix: send implicit_mod to process_bindings this solves the edge case where someone might have `ShiftMask + A` in their keybindings compared to a plain `A`. Closes: https://github.com/nsxiv/nsxiv/pull/166#issuecomment-978853136 * code-style: smuggle small style fix in win_draw_bar now mimics autoreload_nop.c functions --- autoreload_nop.c | 2 +- main.c | 10 +++++----- window.c | 5 ++++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/autoreload_nop.c b/autoreload_nop.c index 431566d..4d17f54 100644 --- a/autoreload_nop.c +++ b/autoreload_nop.c @@ -35,7 +35,7 @@ void arl_setup(arl_t *arl, const char *filepath) } bool arl_handle(arl_t *arl) -{ +{ (void) arl; return false; } diff --git a/main.c b/main.c index 5bcc90e..713e880 100644 --- a/main.c +++ b/main.c @@ -605,15 +605,15 @@ end: redraw(); } -static bool process_bindings(const keymap_t *keys, unsigned int len, - KeySym ksym_or_button, unsigned int state) +static bool process_bindings(const keymap_t *keys, unsigned int len, KeySym ksym_or_button, + unsigned int state, unsigned int implicit_mod) { unsigned int i; bool dirty = false; for (i = 0; i < len; i++) { if (keys[i].ksym_or_button == ksym_or_button && - MODMASK(keys[i].mask) == MODMASK(state) && + MODMASK(keys[i].mask | implicit_mod) == MODMASK(state) && keys[i].cmd.func && (keys[i].cmd.mode == MODE_ALL || keys[i].cmd.mode == mode)) { @@ -652,7 +652,7 @@ static void on_keypress(XKeyEvent *kev) prefix = prefix * 10 + (int) (key - '0'); return; } else { - dirty = process_bindings(keys, ARRLEN(keys), ksym, kev->state & ~sh); + dirty = process_bindings(keys, ARRLEN(keys), ksym, kev->state, sh); } if (dirty) redraw(); @@ -668,7 +668,7 @@ static void on_buttonpress(XButtonEvent *bev) if (mode == MODE_IMAGE) { set_timeout(reset_cursor, TO_CURSOR_HIDE, true); reset_cursor(); - dirty = process_bindings(buttons, ARRLEN(buttons), bev->button, bev->state); + dirty = process_bindings(buttons, ARRLEN(buttons), bev->button, bev->state, 0); if (dirty) redraw(); } else { diff --git a/window.c b/window.c index 7a04270..8b45501 100644 --- a/window.c +++ b/window.c @@ -466,7 +466,10 @@ static void win_draw_bar(win_t *win) XftDrawDestroy(d); } #else -static void win_draw_bar(win_t *win){} +static void win_draw_bar(win_t *win) +{ + (void) win; +} #endif /* HAVE_LIBFONTS */ void win_draw(win_t *win)