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
This commit is contained in:
N-R-K 2021-12-01 05:41:22 +06:00 committed by GitHub
parent 68ddbe28d8
commit 3bc7082f4e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 7 deletions

10
main.c
View file

@ -605,15 +605,15 @@ end:
redraw(); redraw();
} }
static bool process_bindings(const keymap_t *keys, unsigned int len, static bool process_bindings(const keymap_t *keys, unsigned int len, KeySym ksym_or_button,
KeySym ksym_or_button, unsigned int state) unsigned int state, unsigned int implicit_mod)
{ {
unsigned int i; unsigned int i;
bool dirty = false; bool dirty = false;
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
if (keys[i].ksym_or_button == ksym_or_button && 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.func &&
(keys[i].cmd.mode == MODE_ALL || keys[i].cmd.mode == mode)) (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'); prefix = prefix * 10 + (int) (key - '0');
return; return;
} else { } else {
dirty = process_bindings(keys, ARRLEN(keys), ksym, kev->state & ~sh); dirty = process_bindings(keys, ARRLEN(keys), ksym, kev->state, sh);
} }
if (dirty) if (dirty)
redraw(); redraw();
@ -668,7 +668,7 @@ static void on_buttonpress(XButtonEvent *bev)
if (mode == MODE_IMAGE) { if (mode == MODE_IMAGE) {
set_timeout(reset_cursor, TO_CURSOR_HIDE, true); set_timeout(reset_cursor, TO_CURSOR_HIDE, true);
reset_cursor(); 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) if (dirty)
redraw(); redraw();
} else { } else {

View file

@ -466,7 +466,10 @@ static void win_draw_bar(win_t *win)
XftDrawDestroy(d); XftDrawDestroy(d);
} }
#else #else
static void win_draw_bar(win_t *win){} static void win_draw_bar(win_t *win)
{
(void) win;
}
#endif /* HAVE_LIBFONTS */ #endif /* HAVE_LIBFONTS */
void win_draw(win_t *win) void win_draw(win_t *win)