diff options
author | wochap <gean.marroquin@gmail.com> | 2024-04-11 13:16:40 -0500 |
---|---|---|
committer | Squibid <me@zacharyscheiman.com> | 2025-02-12 01:10:44 -0600 |
commit | 676596030c2c525cae703c2a5d853d11bbe1dded (patch) | |
tree | c449a72f4e93977f47fe8a5994ed6b2ff1cd4f49 /dwl.c | |
parent | 3a912ae2b4e99507d8c3b1ce0add52f9043fa055 (diff) | |
download | dwl-676596030c2c525cae703c2a5d853d11bbe1dded.tar.gz dwl-676596030c2c525cae703c2a5d853d11bbe1dded.tar.bz2 dwl-676596030c2c525cae703c2a5d853d11bbe1dded.zip |
allow to add keybindings in lockscreen
Diffstat (limited to 'dwl.c')
-rw-r--r-- | dwl.c | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -338,6 +338,7 @@ static void handlenewtearinghint(struct wl_listener *listener, void *data); static void incnmaster(const Arg *arg); static void inputdevice(struct wl_listener *listener, void *data); static int keybinding(uint32_t mods, xkb_keysym_t sym); +static int lockedkeybinding(uint32_t mods, xkb_keysym_t sym); static void keypress(struct wl_listener *listener, void *data); static void keypressmod(struct wl_listener *listener, void *data); static int keyrepeat(void *data); @@ -1978,6 +1979,21 @@ keybinding(uint32_t mods, xkb_keysym_t sym) return 0; } +int +lockedkeybinding(uint32_t mods, xkb_keysym_t sym) +{ + int handled = 0; + const Key *k; + for (k = lockedkeys; k < END(lockedkeys); k++) { + if (CLEANMASK(mods) == CLEANMASK(k->mod) && + sym == k->keysym && k->func) { + k->func(&k->arg); + handled = 1; + } + } + return handled; +} + void keypress(struct wl_listener *listener, void *data) { @@ -2005,6 +2021,10 @@ keypress(struct wl_listener *listener, void *data) handled = keybinding(mods, syms[i]) || handled; } + if (locked && event->state == WL_KEYBOARD_KEY_STATE_PRESSED) + for (i = 0; i < nsyms; i++) + handled = lockedkeybinding(mods, syms[i]) || handled; + if (handled && group->wlr_group->keyboard.repeat_info.delay > 0) { group->mods = mods; group->keysyms = syms; |