| @@ -605,15 +605,15 @@ end: |
| 605 | 605 | | redraw(); |
| 606 | 606 | | } |
| 607 | 607 | | |
| 608 | | − | static bool process_bindings(const keymap_t *keys, unsigned int len, |
| 609 | | − | KeySym ksym_or_button, unsigned int state) |
| 608 | + | static bool process_bindings(const keymap_t *keys, unsigned int len, KeySym ksym_or_button, |
| 609 | + | unsigned int state, unsigned int implicit_mod) |
| 610 | 610 | | { |
| 611 | 611 | | unsigned int i; |
| 612 | 612 | | bool dirty = false; |
| 613 | 613 | | |
| 614 | 614 | | for (i = 0; i < len; i++) { |
| 615 | 615 | | if (keys[i].ksym_or_button == ksym_or_button && |
| 616 | | − | MODMASK(keys[i].mask) == MODMASK(state) && |
| 616 | + | MODMASK(keys[i].mask | implicit_mod) == MODMASK(state) && |
| 617 | 617 | | keys[i].cmd.func && |
| 618 | 618 | | (keys[i].cmd.mode == MODE_ALL || keys[i].cmd.mode == mode)) |
| 619 | 619 | | { |
| @@ -652,7 +652,7 @@ static void on_keypress(XKeyEvent *kev) |
| 652 | 652 | | prefix = prefix * 10 + (int) (key - '0'); |
| 653 | 653 | | return; |
| 654 | 654 | | } else { |
| 655 | | − | dirty = process_bindings(keys, ARRLEN(keys), ksym, kev->state & ~sh); |
| 655 | + | dirty = process_bindings(keys, ARRLEN(keys), ksym, kev->state, sh); |
| 656 | 656 | | } |
| 657 | 657 | | if (dirty) |
| 658 | 658 | | redraw(); |
| @@ -668,7 +668,7 @@ static void on_buttonpress(XButtonEvent *bev) |
| 668 | 668 | | if (mode == MODE_IMAGE) { |
| 669 | 669 | | set_timeout(reset_cursor, TO_CURSOR_HIDE, true); |
| 670 | 670 | | reset_cursor(); |
| 671 | | − | dirty = process_bindings(buttons, ARRLEN(buttons), bev->button, bev->state); |
| 671 | + | dirty = process_bindings(buttons, ARRLEN(buttons), bev->button, bev->state, 0); |
| 672 | 672 | | if (dirty) |
| 673 | 673 | | redraw(); |
| 674 | 674 | | } else { |