diff options
-rw-r--r-- | include/sway/config.h | 10 | ||||
-rw-r--r-- | sway/commands/bind.c | 5 | ||||
-rw-r--r-- | sway/config.c | 26 |
3 files changed, 15 insertions, 26 deletions
diff --git a/include/sway/config.h b/include/sway/config.h index 392f6538..db507296 100644 --- a/include/sway/config.h +++ b/include/sway/config.h @@ -408,14 +408,6 @@ enum alignment { }; /** - * The keysym to keycode translation. - */ -struct keysym_translation_data { - struct xkb_keymap *xkb_keymap; - struct xkb_state *xkb_state; -}; - -/** * The configuration struct. The result of loading a config file. */ struct sway_config { @@ -518,7 +510,7 @@ struct sway_config { list_t *ipc_policies; // The keysym to keycode translation - struct keysym_translation_data keysym_translation; + struct xkb_state *keysym_translation_state; // Context for command handlers struct { diff --git a/sway/commands/bind.c b/sway/commands/bind.c index e5fd4433..ea8179bb 100644 --- a/sway/commands/bind.c +++ b/sway/commands/bind.c @@ -604,7 +604,7 @@ struct keycode_matches { static void find_keycode(struct xkb_keymap *keymap, xkb_keycode_t keycode, void *data) { xkb_keysym_t keysym = xkb_state_key_get_one_sym( - config->keysym_translation.xkb_state, keycode); + config->keysym_translation_state, keycode); if (keysym == XKB_KEY_NoSymbol) { return; @@ -627,7 +627,8 @@ static struct keycode_matches get_keycode_for_keysym(xkb_keysym_t keysym) { .count = 0, }; - xkb_keymap_key_for_each(config->keysym_translation.xkb_keymap, + xkb_keymap_key_for_each( + xkb_state_get_keymap(config->keysym_translation_state), find_keycode, &matches); return matches; } diff --git a/sway/config.c b/sway/config.c index 45d16758..c5d892f3 100644 --- a/sway/config.c +++ b/sway/config.c @@ -33,7 +33,7 @@ struct sway_config *config = NULL; -static struct keysym_translation_data new_keysym_translation_data( +static struct xkb_state *keysym_translation_state_create( const char *layout) { struct xkb_rule_names rules = { .layout = layout, @@ -44,18 +44,13 @@ static struct keysym_translation_data new_keysym_translation_data( &rules, XKB_KEYMAP_COMPILE_NO_FLAGS); - struct keysym_translation_data result = { - .xkb_keymap = xkb_keymap, - .xkb_state = xkb_state_new(xkb_keymap), - }; - - return result; + return xkb_state_new(xkb_keymap); } -static void free_keysym_translation_data( - struct keysym_translation_data config) { - xkb_state_unref(config.xkb_state); - xkb_keymap_unref(config.xkb_keymap); +static void keysym_translation_state_destroy( + struct xkb_state *state) { + xkb_keymap_unref(xkb_state_get_keymap(state)); + xkb_state_unref(state); } static void free_mode(struct sway_mode *mode) { @@ -171,7 +166,7 @@ void free_config(struct sway_config *config) { free(config->swaynag_command); free((char *)config->current_config_path); free((char *)config->current_config); - free_keysym_translation_data(config->keysym_translation); + keysym_translation_state_destroy(config->keysym_translation_state); free(config); } @@ -344,7 +339,8 @@ static void config_defaults(struct sway_config *config) { if (!(config->ipc_policies = create_list())) goto cleanup; // The keysym to keycode translation - config->keysym_translation = new_keysym_translation_data(getenv("XKB_DEFAULT_LAYOUT")); + config->keysym_translation_state = + keysym_translation_state_create(getenv("XKB_DEFAULT_LAYOUT")); return; cleanup: @@ -992,8 +988,8 @@ static void translate_binding_list(list_t *bindings, list_t *bindsyms, } void translate_keysyms(const char *layout) { - free_keysym_translation_data(config->keysym_translation); - config->keysym_translation = new_keysym_translation_data(layout); + keysym_translation_state_destroy(config->keysym_translation_state); + config->keysym_translation_state = keysym_translation_state_create(layout); for (int i = 0; i < config->modes->length; ++i) { struct sway_mode *mode = config->modes->items[i]; |