Krolyxon
Commit 4a282da

Branches

Refs →

nsxiv4a282da

use dedicated function to process key/button bindings (#166)

Author
N-R-K
Date
2021-11-19 11:49 +0600
Committer
GitHub · 2021-11-19 05:49 +0000
Parent
8f6ba7b
Commit
4a282da692fa7b8471c1399b30010de80448bda9

+24 −29

2 files changed

  1. M main.c +22 −22
  2. M nsxiv.h +2 −7
M main.c View
@@ -596,9 +596,27 @@ end:
596596 redraw();
597597 }
598598
599−void on_keypress(XKeyEvent *kev)
599+bool process_bindings(const keymap_t *keys, unsigned int len,
600+ KeySym ksym_or_button, unsigned int state)
600601 {
601602 unsigned int i;
603+ bool dirty = false;
604+
605+ for (i = 0; i < len; i++) {
606+ if (keys[i].ksym_or_button == ksym_or_button &&
607+ MODMASK(keys[i].mask) == MODMASK(state) &&
608+ keys[i].cmd.func &&
609+ (keys[i].cmd.mode == MODE_ALL || keys[i].cmd.mode == mode))
610+ {
611+ if (keys[i].cmd.func(keys[i].arg))
612+ dirty = true;
613+ }
614+ }
615+ return dirty;
616+}
617+
618+void on_keypress(XKeyEvent *kev)
619+{
602620 unsigned int sh = 0;
603621 KeySym ksym, shksym;
604622 char dummy, key;
@@ -624,15 +642,8 @@ void on_keypress(XKeyEvent *kev)
624642 /* number prefix for commands */
625643 prefix = prefix * 10 + (int) (key - '0');
626644 return;
627− } else for (i = 0; i < ARRLEN(keys); i++) {
628− if (keys[i].ksym == ksym &&
629− MODMASK(keys[i].mask | sh) == MODMASK(kev->state) &&
630− keys[i].cmd.func &&
631− (keys[i].cmd.mode == MODE_ALL || keys[i].cmd.mode == mode))
632− {
633− if (keys[i].cmd.func(keys[i].arg))
634− dirty = true;
635− }
645+ } else {
646+ dirty = process_bindings(keys, ARRLEN(keys), ksym, kev->state & ~sh);
636647 }
637648 if (dirty)
638649 redraw();
@@ -642,24 +653,13 @@ void on_keypress(XKeyEvent *kev)
642653 void on_buttonpress(XButtonEvent *bev)
643654 {
644655 int sel;
645− unsigned int i;
646656 bool dirty = false;
647657 static Time firstclick;
648658
649659 if (mode == MODE_IMAGE) {
650660 set_timeout(reset_cursor, TO_CURSOR_HIDE, true);
651661 reset_cursor();
652−
653− for (i = 0; i < ARRLEN(buttons); i++) {
654− if (buttons[i].button == bev->button &&
655− MODMASK(buttons[i].mask) == MODMASK(bev->state) &&
656− buttons[i].cmd.func &&
657− (buttons[i].cmd.mode == MODE_ALL || buttons[i].cmd.mode == mode))
658− {
659− if (buttons[i].cmd.func(buttons[i].arg))
660− dirty = true;
661− }
662− }
662+ dirty = process_bindings(buttons, ARRLEN(buttons), bev->button, bev->state);
663663 if (dirty)
664664 redraw();
665665 } else {
M nsxiv.h View
@@ -172,17 +172,12 @@ typedef struct {
172172
173173 typedef struct {
174174 unsigned int mask;
175− KeySym ksym;
175+ KeySym ksym_or_button;
176176 cmd_t cmd;
177177 arg_t arg;
178178 } keymap_t;
179179
180−typedef struct {
181− unsigned int mask;
182− unsigned int button;
183− cmd_t cmd;
184− arg_t arg;
185−} button_t;
180+typedef keymap_t button_t;
186181
187182
188183 /* image.c */