aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Tudor Brindus <me@tbrindus.ca>2020-05-08 13:21:15 -0400
committerLibravatar Brian Ashworth <bosrsf04@gmail.com>2020-05-08 17:48:43 -0400
commit7c37e9d01e84f63604bf077bbea123d4acf0c411 (patch)
tree634a467d7b32f6eebf61435c29c298d9868c94bf
parentgrimshot: Skip creating a temp file when copying (diff)
downloadsway-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.c23
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
677static 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
686static bool repeat_info_match(struct sway_keyboard *a, struct wlr_keyboard *b) { 678static 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) {