linput

Listen to input events
git clone git://git.akobets.xyz/linput
Log | Files | Refs | README | LICENSE

commit 6bd91356baf4f8edee0d0e0a33609b45eb8129ef
parent b33ea547edc095d60274ebd4223d839763f73cc6
Author: Artem Kobets <artem@akobets.xyz>
Date:   Sun, 19 Apr 2020 15:58:57 +0300

fix hotkey mod match

Diffstat:
Mlinput.c | 100+++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
1 file changed, 60 insertions(+), 40 deletions(-)

diff --git a/linput.c b/linput.c @@ -116,46 +116,66 @@ is_match_hotkey_mod(const struct HotkeyRule *hotkey) if (mod_mask & MOD_ANY) return 1; - if ((mod_mask & MOD_LEFTSHIFT) && - key_state[KEY_LEFTSHIFT] == 0) - return 0; - if ((mod_mask & MOD_RIGHTSHIFT) && - key_state[KEY_RIGHTSHIFT] == 0) - return 0; - if ((mod_mask & MOD_SHIFT) && - (key_state[KEY_LEFTSHIFT] == 0 && - key_state[KEY_RIGHTSHIFT] == 0)) - return 0; - if ((mod_mask & MOD_LEFTCTRL) && - key_state[KEY_LEFTCTRL] == 0) - return 0; - if ((mod_mask & MOD_RIGHTCTRL) && - key_state[KEY_RIGHTCTRL] == 0) - return 0; - if ((mod_mask & MOD_CTRL) && - (key_state[KEY_LEFTCTRL] == 0 && - key_state[KEY_RIGHTCTRL] == 0)) - return 0; - if ((mod_mask & MOD_LEFTSUPER) && - key_state[KEY_LEFTMETA] == 0) - return 0; - if ((mod_mask & MOD_RIGHTSUPER) && - key_state[KEY_RIGHTMETA] == 0) - return 0; - if ((mod_mask & MOD_SUPER) && - (key_state[KEY_LEFTMETA] == 0 && - key_state[KEY_RIGHTMETA] == 0)) - return 0; - if ((mod_mask & MOD_LEFTALT) && - key_state[KEY_LEFTALT] == 0) - return 0; - if ((mod_mask & MOD_RIGHTALT) && - key_state[KEY_RIGHTALT] == 0) - return 0; - if ((mod_mask & MOD_ALT) && - (key_state[KEY_LEFTALT] == 0 && - key_state[KEY_RIGHTALT] == 0)) - return 0; + + if (mod_mask & MOD_SHIFT) { + if (key_state[KEY_LEFTSHIFT] == 0 && + key_state[KEY_RIGHTSHIFT] == 0) + return 0; + } else { + if ((mod_mask & MOD_LEFTSHIFT) + ? key_state[KEY_LEFTSHIFT] == 0 + : key_state[KEY_LEFTSHIFT] != 0) + return 0; + if ((mod_mask & MOD_RIGHTSHIFT) + ? key_state[KEY_RIGHTSHIFT] == 0 + : key_state[KEY_RIGHTSHIFT] != 0) + return 0; + } + + if (mod_mask & MOD_CTRL) { + if (key_state[KEY_LEFTCTRL] == 0 && + key_state[KEY_RIGHTCTRL] == 0) + return 0; + } else { + if ((mod_mask & MOD_LEFTCTRL) + ? key_state[KEY_LEFTCTRL] == 0 + : key_state[KEY_LEFTCTRL] != 0) + return 0; + if ((mod_mask & MOD_RIGHTCTRL) + ? key_state[KEY_RIGHTCTRL] == 0 + : key_state[KEY_RIGHTCTRL] != 0) + return 0; + } + + if (mod_mask & MOD_SUPER) { + if (key_state[KEY_LEFTMETA] == 0 && + key_state[KEY_RIGHTMETA] == 0) + return 0; + } else { + if ((mod_mask & MOD_LEFTSUPER) + ? key_state[KEY_LEFTMETA] == 0 + : key_state[KEY_LEFTMETA] != 0) + return 0; + if ((mod_mask & MOD_RIGHTSUPER) + ? key_state[KEY_RIGHTMETA] == 0 + : key_state[KEY_RIGHTMETA] != 0) + return 0; + } + + if (mod_mask & MOD_ALT) { + if (key_state[KEY_LEFTALT] == 0 && + key_state[KEY_RIGHTALT] == 0) + return 0; + } else { + if ((mod_mask & MOD_LEFTALT) + ? key_state[KEY_LEFTALT] == 0 + : key_state[KEY_LEFTALT] != 0) + return 0; + if ((mod_mask & MOD_RIGHTALT) + ? key_state[KEY_RIGHTALT] == 0 + : key_state[KEY_RIGHTALT] != 0) + return 0; + } return 1; }