diff options
author | Tudor Brindus <me@tbrindus.ca> | 2020-05-08 13:21:15 -0400 |
---|---|---|
committer | Brian Ashworth <bosrsf04@gmail.com> | 2020-05-08 17:48:43 -0400 |
commit | 7c37e9d01e84f63604bf077bbea123d4acf0c411 (patch) | |
tree | 634a467d7b32f6eebf61435c29c298d9868c94bf | |
parent | grimshot: Skip creating a temp file when copying (diff) | |
download | sway-7c37e9d01e84f63604bf077bbea123d4acf0c411.tar.gz sway-7c37e9d01e84f63604bf077bbea123d4acf0c411.tar.zst sway-7c37e9d01e84f63604bf077bbea123d4acf0c411.zip |
input/keyboard: use wlr_keyboard_keymaps_match from wlroots
Added in swaywm/wlroots#2172, so that sway doesn't need to maintain
an independent copy of this function.
-rw-r--r-- | sway/input/keyboard.c | 23 |
1 files changed, 8 insertions, 15 deletions
diff --git a/sway/input/keyboard.c b/sway/input/keyboard.c index 0891145b..1002698e 100644 --- a/sway/input/keyboard.c +++ b/sway/input/keyboard.c | |||
@@ -5,6 +5,7 @@ | |||
5 | #include <wlr/backend/session.h> | 5 | #include <wlr/backend/session.h> |
6 | #include <wlr/interfaces/wlr_keyboard.h> | 6 | #include <wlr/interfaces/wlr_keyboard.h> |
7 | #include <wlr/types/wlr_idle.h> | 7 | #include <wlr/types/wlr_idle.h> |
8 | #include <wlr/types/wlr_keyboard.h> | ||
8 | #include <wlr/types/wlr_keyboard_group.h> | 9 | #include <wlr/types/wlr_keyboard_group.h> |
9 | #include <xkbcommon/xkbcommon-names.h> | 10 | #include <xkbcommon/xkbcommon-names.h> |
10 | #include "sway/commands.h" | 11 | #include "sway/commands.h" |
@@ -674,15 +675,6 @@ cleanup: | |||
674 | return keymap; | 675 | return keymap; |
675 | } | 676 | } |
676 | 677 | ||
677 | static bool keymaps_match(struct xkb_keymap *km1, struct xkb_keymap *km2) { | ||
678 | char *km1_str = xkb_keymap_get_as_string(km1, XKB_KEYMAP_FORMAT_TEXT_V1); | ||
679 | char *km2_str = xkb_keymap_get_as_string(km2, XKB_KEYMAP_FORMAT_TEXT_V1); | ||
680 | bool result = strcmp(km1_str, km2_str) == 0; | ||
681 | free(km1_str); | ||
682 | free(km2_str); | ||
683 | return result; | ||
684 | } | ||
685 | |||
686 | static bool repeat_info_match(struct sway_keyboard *a, struct wlr_keyboard *b) { | 678 | static bool repeat_info_match(struct sway_keyboard *a, struct wlr_keyboard *b) { |
687 | return a->repeat_rate == b->repeat_info.rate && | 679 | return a->repeat_rate == b->repeat_info.rate && |
688 | a->repeat_delay == b->repeat_info.delay; | 680 | a->repeat_delay == b->repeat_info.delay; |
@@ -742,7 +734,7 @@ static void sway_keyboard_group_remove_invalid(struct sway_keyboard *keyboard) { | |||
742 | case KEYBOARD_GROUP_DEFAULT: /* fallthrough */ | 734 | case KEYBOARD_GROUP_DEFAULT: /* fallthrough */ |
743 | case KEYBOARD_GROUP_SMART:; | 735 | case KEYBOARD_GROUP_SMART:; |
744 | struct wlr_keyboard_group *group = wlr_keyboard->group; | 736 | struct wlr_keyboard_group *group = wlr_keyboard->group; |
745 | if (!keymaps_match(keyboard->keymap, group->keyboard.keymap) || | 737 | if (!wlr_keyboard_keymaps_match(keyboard->keymap, group->keyboard.keymap) || |
746 | !repeat_info_match(keyboard, &group->keyboard)) { | 738 | !repeat_info_match(keyboard, &group->keyboard)) { |
747 | sway_keyboard_group_remove(keyboard); | 739 | sway_keyboard_group_remove(keyboard); |
748 | } | 740 | } |
@@ -779,7 +771,8 @@ static void sway_keyboard_group_add(struct sway_keyboard *keyboard) { | |||
779 | case KEYBOARD_GROUP_DEFAULT: /* fallthrough */ | 771 | case KEYBOARD_GROUP_DEFAULT: /* fallthrough */ |
780 | case KEYBOARD_GROUP_SMART:; | 772 | case KEYBOARD_GROUP_SMART:; |
781 | struct wlr_keyboard_group *wlr_group = group->wlr_group; | 773 | struct wlr_keyboard_group *wlr_group = group->wlr_group; |
782 | if (keymaps_match(keyboard->keymap, wlr_group->keyboard.keymap) && | 774 | if (wlr_keyboard_keymaps_match(keyboard->keymap, |
775 | wlr_group->keyboard.keymap) && | ||
783 | repeat_info_match(keyboard, &wlr_group->keyboard)) { | 776 | repeat_info_match(keyboard, &wlr_group->keyboard)) { |
784 | sway_log(SWAY_DEBUG, "Adding keyboard %s to group %p", | 777 | sway_log(SWAY_DEBUG, "Adding keyboard %s to group %p", |
785 | device->identifier, wlr_group); | 778 | device->identifier, wlr_group); |
@@ -871,8 +864,8 @@ void sway_keyboard_configure(struct sway_keyboard *keyboard) { | |||
871 | } | 864 | } |
872 | } | 865 | } |
873 | 866 | ||
874 | bool keymap_changed = | 867 | bool keymap_changed = keyboard->keymap ? |
875 | keyboard->keymap ? !keymaps_match(keyboard->keymap, keymap) : true; | 868 | !wlr_keyboard_keymaps_match(keyboard->keymap, keymap) : true; |
876 | bool effective_layout_changed = keyboard->effective_layout != 0; | 869 | bool effective_layout_changed = keyboard->effective_layout != 0; |
877 | 870 | ||
878 | int repeat_rate = 25; | 871 | int repeat_rate = 25; |
@@ -909,14 +902,14 @@ void sway_keyboard_configure(struct sway_keyboard *keyboard) { | |||
909 | xkb_mod_index_t mod_index = xkb_map_mod_get_index(keymap, | 902 | xkb_mod_index_t mod_index = xkb_map_mod_get_index(keymap, |
910 | XKB_MOD_NAME_NUM); | 903 | XKB_MOD_NAME_NUM); |
911 | if (mod_index != XKB_MOD_INVALID) { | 904 | if (mod_index != XKB_MOD_INVALID) { |
912 | locked_mods |= (uint32_t)1 << mod_index; | 905 | locked_mods |= (uint32_t)1 << mod_index; |
913 | } | 906 | } |
914 | } | 907 | } |
915 | if (input_config && input_config->xkb_capslock > 0) { | 908 | if (input_config && input_config->xkb_capslock > 0) { |
916 | xkb_mod_index_t mod_index = xkb_map_mod_get_index(keymap, | 909 | xkb_mod_index_t mod_index = xkb_map_mod_get_index(keymap, |
917 | XKB_MOD_NAME_CAPS); | 910 | XKB_MOD_NAME_CAPS); |
918 | if (mod_index != XKB_MOD_INVALID) { | 911 | if (mod_index != XKB_MOD_INVALID) { |
919 | locked_mods |= (uint32_t)1 << mod_index; | 912 | locked_mods |= (uint32_t)1 << mod_index; |
920 | } | 913 | } |
921 | } | 914 | } |
922 | if (locked_mods) { | 915 | if (locked_mods) { |