Change variable name; add key_remove

This commit is contained in:
Simon Long 2024-06-05 09:41:14 +01:00
parent fe5704d403
commit 7ec472cd22
3 changed files with 9 additions and 8 deletions

View file

@ -20,7 +20,7 @@ struct keybind {
int keycodes_layout; int keycodes_layout;
struct wl_list actions; /* struct action.link */ struct wl_list actions; /* struct action.link */
struct wl_list link; /* struct rcxml.keybinds */ struct wl_list link; /* struct rcxml.keybinds */
bool mod_only; /* set if only modifier keys used */ bool on_release; /* set if only modifier keys used */
}; };
/** /**

View file

@ -122,7 +122,7 @@ keybind_create(const char *keybind)
xkb_keysym_t sym; xkb_keysym_t sym;
struct keybind *k = znew(*k); struct keybind *k = znew(*k);
xkb_keysym_t keysyms[MAX_KEYSYMS]; xkb_keysym_t keysyms[MAX_KEYSYMS];
bool mod_only = TRUE; bool on_release = true;
gchar **symnames = g_strsplit(keybind, "-", -1); gchar **symnames = g_strsplit(keybind, "-", -1);
for (size_t i = 0; symnames[i]; i++) { for (size_t i = 0; symnames[i]; i++) {
char *symname = symnames[i]; char *symname = symnames[i];
@ -132,7 +132,7 @@ keybind_create(const char *keybind)
} else { } else {
sym = xkb_keysym_from_name(symname, XKB_KEYSYM_CASE_INSENSITIVE); sym = xkb_keysym_from_name(symname, XKB_KEYSYM_CASE_INSENSITIVE);
if (!keyboard_is_modifier_key(sym)) { if (!keyboard_is_modifier_key(sym)) {
mod_only = FALSE; on_release = false;
} }
if (sym == XKB_KEY_NoSymbol && g_utf8_strlen(symname, -1) == 1) { if (sym == XKB_KEY_NoSymbol && g_utf8_strlen(symname, -1) == 1) {
/* /*
@ -168,7 +168,7 @@ keybind_create(const char *keybind)
if (!k) { if (!k) {
return NULL; return NULL;
} }
k->mod_only = mod_only; k->on_release = on_release;
wl_list_append(&rc.keybinds, &k->link); wl_list_append(&rc.keybinds, &k->link);
k->keysyms = xmalloc(k->keysyms_len * sizeof(xkb_keysym_t)); k->keysyms = xmalloc(k->keysyms_len * sizeof(xkb_keysym_t));
memcpy(k->keysyms, keysyms, k->keysyms_len * sizeof(xkb_keysym_t)); memcpy(k->keysyms, keysyms, k->keysyms_len * sizeof(xkb_keysym_t));

View file

@ -38,7 +38,7 @@ struct keyinfo {
static bool should_cancel_cycling_on_next_key_release; static bool should_cancel_cycling_on_next_key_release;
struct keybind *cur_keybind; static struct keybind *cur_keybind;
static void static void
change_vt(struct server *server, unsigned int vt) change_vt(struct server *server, unsigned int vt)
@ -409,11 +409,12 @@ handle_compositor_keybindings(struct keyboard *keyboard,
keyinfo.is_modifier); keyinfo.is_modifier);
if (event->state == WL_KEYBOARD_KEY_STATE_RELEASED) { if (event->state == WL_KEYBOARD_KEY_STATE_RELEASED) {
if (cur_keybind && cur_keybind->mod_only) { if (cur_keybind && cur_keybind->on_release) {
key_state_bound_key_remove(event->keycode);
if (seat->active_client_while_inhibited if (seat->active_client_while_inhibited
|| seat->server->session_lock) { || seat->server->session_lock) {
cur_keybind = NULL; cur_keybind = NULL;
return false; return true;
} }
actions_run(NULL, server, &cur_keybind->actions, 0); actions_run(NULL, server, &cur_keybind->actions, 0);
cur_keybind = NULL; cur_keybind = NULL;
@ -465,7 +466,7 @@ handle_compositor_keybindings(struct keyboard *keyboard,
* 'pressed-sent' keys to the new surface. * 'pressed-sent' keys to the new surface.
*/ */
key_state_store_pressed_key_as_bound(event->keycode); key_state_store_pressed_key_as_bound(event->keycode);
if (!cur_keybind->mod_only) { if (!cur_keybind->on_release) {
actions_run(NULL, server, &cur_keybind->actions, 0); actions_run(NULL, server, &cur_keybind->actions, 0);
cur_keybind = NULL; cur_keybind = NULL;
} }