diff options
author | Konstantin Pospelov <kupospelov@gmail.com> | 2019-02-20 14:54:59 +0300 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2019-04-26 20:56:48 +0300 |
commit | ddf63ffabefd740bf2afa1addaf6e859d65aba6a (patch) | |
tree | d9bbf2dbe7ade0b7c4121a3afcaa2bfd4b5488f9 /sway/config.c | |
parent | bindsym: update the man page to include --to-code (diff) | |
download | sway-ddf63ffabefd740bf2afa1addaf6e859d65aba6a.tar.gz sway-ddf63ffabefd740bf2afa1addaf6e859d65aba6a.tar.zst sway-ddf63ffabefd740bf2afa1addaf6e859d65aba6a.zip |
bindsym: consider xkb_rule_names for --to-code
Diffstat (limited to 'sway/config.c')
-rw-r--r-- | sway/config.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/sway/config.c b/sway/config.c index 8579e865..fed01eb4 100644 --- a/sway/config.c +++ b/sway/config.c | |||
@@ -34,16 +34,14 @@ | |||
34 | struct sway_config *config = NULL; | 34 | struct sway_config *config = NULL; |
35 | 35 | ||
36 | static struct xkb_state *keysym_translation_state_create( | 36 | static struct xkb_state *keysym_translation_state_create( |
37 | const char *layout) { | 37 | struct xkb_rule_names rules) { |
38 | struct xkb_rule_names rules = { | 38 | struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); |
39 | .layout = layout, | ||
40 | }; | ||
41 | |||
42 | struct xkb_keymap *xkb_keymap = xkb_keymap_new_from_names( | 39 | struct xkb_keymap *xkb_keymap = xkb_keymap_new_from_names( |
43 | xkb_context_new(XKB_CONTEXT_NO_FLAGS), | 40 | context, |
44 | &rules, | 41 | &rules, |
45 | XKB_KEYMAP_COMPILE_NO_FLAGS); | 42 | XKB_KEYMAP_COMPILE_NO_FLAGS); |
46 | 43 | ||
44 | xkb_context_unref(context); | ||
47 | return xkb_state_new(xkb_keymap); | 45 | return xkb_state_new(xkb_keymap); |
48 | } | 46 | } |
49 | 47 | ||
@@ -339,8 +337,9 @@ static void config_defaults(struct sway_config *config) { | |||
339 | if (!(config->ipc_policies = create_list())) goto cleanup; | 337 | if (!(config->ipc_policies = create_list())) goto cleanup; |
340 | 338 | ||
341 | // The keysym to keycode translation | 339 | // The keysym to keycode translation |
340 | struct xkb_rule_names rules = {}; | ||
342 | config->keysym_translation_state = | 341 | config->keysym_translation_state = |
343 | keysym_translation_state_create(NULL); | 342 | keysym_translation_state_create(rules); |
344 | 343 | ||
345 | return; | 344 | return; |
346 | cleanup: | 345 | cleanup: |
@@ -987,9 +986,12 @@ static void translate_binding_list(list_t *bindings, list_t *bindsyms, | |||
987 | } | 986 | } |
988 | } | 987 | } |
989 | 988 | ||
990 | void translate_keysyms(const char *layout) { | 989 | void translate_keysyms(struct input_config *input_config) { |
991 | keysym_translation_state_destroy(config->keysym_translation_state); | 990 | keysym_translation_state_destroy(config->keysym_translation_state); |
992 | config->keysym_translation_state = keysym_translation_state_create(layout); | 991 | |
992 | struct xkb_rule_names rules = input_config_get_rule_names(input_config); | ||
993 | config->keysym_translation_state = | ||
994 | keysym_translation_state_create(rules); | ||
993 | 995 | ||
994 | for (int i = 0; i < config->modes->length; ++i) { | 996 | for (int i = 0; i < config->modes->length; ++i) { |
995 | struct sway_mode *mode = config->modes->items[i]; | 997 | struct sway_mode *mode = config->modes->items[i]; |
@@ -1007,5 +1009,6 @@ void translate_keysyms(const char *layout) { | |||
1007 | mode->keycode_bindings = bindcodes; | 1009 | mode->keycode_bindings = bindcodes; |
1008 | } | 1010 | } |
1009 | 1011 | ||
1010 | sway_log(SWAY_DEBUG, "Translated keysyms for layout %s", layout); | 1012 | sway_log(SWAY_DEBUG, "Translated keysyms using config for device '%s'", |
1013 | input_config->identifier); | ||
1011 | } | 1014 | } |