diff options
author | Konstantin Pospelov <kupospelov@gmail.com> | 2019-02-19 16:35:35 +0300 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2019-04-26 20:56:48 +0300 |
commit | f1609abe4c20a04b0b57f797b0e864b29840eda8 (patch) | |
tree | be675820914ecad26516e7deb49d7bea9dc79d89 /sway/config.c | |
parent | Implement bindsym --to-code (diff) | |
download | sway-f1609abe4c20a04b0b57f797b0e864b29840eda8.tar.gz sway-f1609abe4c20a04b0b57f797b0e864b29840eda8.tar.zst sway-f1609abe4c20a04b0b57f797b0e864b29840eda8.zip |
config: simplify keysym translation fields
Do not store `xkb_keymap` since it can be retrieved from `xkb_state`.
Diffstat (limited to 'sway/config.c')
-rw-r--r-- | sway/config.c | 26 |
1 files changed, 11 insertions, 15 deletions
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 @@ | |||
33 | 33 | ||
34 | struct sway_config *config = NULL; | 34 | struct sway_config *config = NULL; |
35 | 35 | ||
36 | static struct keysym_translation_data new_keysym_translation_data( | 36 | static struct xkb_state *keysym_translation_state_create( |
37 | const char *layout) { | 37 | const char *layout) { |
38 | struct xkb_rule_names rules = { | 38 | struct xkb_rule_names rules = { |
39 | .layout = layout, | 39 | .layout = layout, |
@@ -44,18 +44,13 @@ static struct keysym_translation_data new_keysym_translation_data( | |||
44 | &rules, | 44 | &rules, |
45 | XKB_KEYMAP_COMPILE_NO_FLAGS); | 45 | XKB_KEYMAP_COMPILE_NO_FLAGS); |
46 | 46 | ||
47 | struct keysym_translation_data result = { | 47 | return xkb_state_new(xkb_keymap); |
48 | .xkb_keymap = xkb_keymap, | ||
49 | .xkb_state = xkb_state_new(xkb_keymap), | ||
50 | }; | ||
51 | |||
52 | return result; | ||
53 | } | 48 | } |
54 | 49 | ||
55 | static void free_keysym_translation_data( | 50 | static void keysym_translation_state_destroy( |
56 | struct keysym_translation_data config) { | 51 | struct xkb_state *state) { |
57 | xkb_state_unref(config.xkb_state); | 52 | xkb_keymap_unref(xkb_state_get_keymap(state)); |
58 | xkb_keymap_unref(config.xkb_keymap); | 53 | xkb_state_unref(state); |
59 | } | 54 | } |
60 | 55 | ||
61 | static void free_mode(struct sway_mode *mode) { | 56 | static void free_mode(struct sway_mode *mode) { |
@@ -171,7 +166,7 @@ void free_config(struct sway_config *config) { | |||
171 | free(config->swaynag_command); | 166 | free(config->swaynag_command); |
172 | free((char *)config->current_config_path); | 167 | free((char *)config->current_config_path); |
173 | free((char *)config->current_config); | 168 | free((char *)config->current_config); |
174 | free_keysym_translation_data(config->keysym_translation); | 169 | keysym_translation_state_destroy(config->keysym_translation_state); |
175 | free(config); | 170 | free(config); |
176 | } | 171 | } |
177 | 172 | ||
@@ -344,7 +339,8 @@ static void config_defaults(struct sway_config *config) { | |||
344 | if (!(config->ipc_policies = create_list())) goto cleanup; | 339 | if (!(config->ipc_policies = create_list())) goto cleanup; |
345 | 340 | ||
346 | // The keysym to keycode translation | 341 | // The keysym to keycode translation |
347 | config->keysym_translation = new_keysym_translation_data(getenv("XKB_DEFAULT_LAYOUT")); | 342 | config->keysym_translation_state = |
343 | keysym_translation_state_create(getenv("XKB_DEFAULT_LAYOUT")); | ||
348 | 344 | ||
349 | return; | 345 | return; |
350 | cleanup: | 346 | cleanup: |
@@ -992,8 +988,8 @@ static void translate_binding_list(list_t *bindings, list_t *bindsyms, | |||
992 | } | 988 | } |
993 | 989 | ||
994 | void translate_keysyms(const char *layout) { | 990 | void translate_keysyms(const char *layout) { |
995 | free_keysym_translation_data(config->keysym_translation); | 991 | keysym_translation_state_destroy(config->keysym_translation_state); |
996 | config->keysym_translation = new_keysym_translation_data(layout); | 992 | config->keysym_translation_state = keysym_translation_state_create(layout); |
997 | 993 | ||
998 | for (int i = 0; i < config->modes->length; ++i) { | 994 | for (int i = 0; i < config->modes->length; ++i) { |
999 | struct sway_mode *mode = config->modes->items[i]; | 995 | struct sway_mode *mode = config->modes->items[i]; |