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.
This commit is contained in:
Tudor Brindus 2020-05-08 13:21:15 -04:00 committed by Brian Ashworth
parent 9cda5a5bd6
commit 7c37e9d01e

View file

@ -5,6 +5,7 @@
#include <wlr/backend/session.h>
#include <wlr/interfaces/wlr_keyboard.h>
#include <wlr/types/wlr_idle.h>
#include <wlr/types/wlr_keyboard.h>
#include <wlr/types/wlr_keyboard_group.h>
#include <xkbcommon/xkbcommon-names.h>
#include "sway/commands.h"
@ -674,15 +675,6 @@ cleanup:
return keymap;
}
static bool keymaps_match(struct xkb_keymap *km1, struct xkb_keymap *km2) {
char *km1_str = xkb_keymap_get_as_string(km1, XKB_KEYMAP_FORMAT_TEXT_V1);
char *km2_str = xkb_keymap_get_as_string(km2, XKB_KEYMAP_FORMAT_TEXT_V1);
bool result = strcmp(km1_str, km2_str) == 0;
free(km1_str);
free(km2_str);
return result;
}
static bool repeat_info_match(struct sway_keyboard *a, struct wlr_keyboard *b) {
return a->repeat_rate == b->repeat_info.rate &&
a->repeat_delay == b->repeat_info.delay;
@ -742,7 +734,7 @@ static void sway_keyboard_group_remove_invalid(struct sway_keyboard *keyboard) {
case KEYBOARD_GROUP_DEFAULT: /* fallthrough */
case KEYBOARD_GROUP_SMART:;
struct wlr_keyboard_group *group = wlr_keyboard->group;
if (!keymaps_match(keyboard->keymap, group->keyboard.keymap) ||
if (!wlr_keyboard_keymaps_match(keyboard->keymap, group->keyboard.keymap) ||
!repeat_info_match(keyboard, &group->keyboard)) {
sway_keyboard_group_remove(keyboard);
}
@ -779,7 +771,8 @@ static void sway_keyboard_group_add(struct sway_keyboard *keyboard) {
case KEYBOARD_GROUP_DEFAULT: /* fallthrough */
case KEYBOARD_GROUP_SMART:;
struct wlr_keyboard_group *wlr_group = group->wlr_group;
if (keymaps_match(keyboard->keymap, wlr_group->keyboard.keymap) &&
if (wlr_keyboard_keymaps_match(keyboard->keymap,
wlr_group->keyboard.keymap) &&
repeat_info_match(keyboard, &wlr_group->keyboard)) {
sway_log(SWAY_DEBUG, "Adding keyboard %s to group %p",
device->identifier, wlr_group);
@ -871,8 +864,8 @@ void sway_keyboard_configure(struct sway_keyboard *keyboard) {
}
}
bool keymap_changed =
keyboard->keymap ? !keymaps_match(keyboard->keymap, keymap) : true;
bool keymap_changed = keyboard->keymap ?
!wlr_keyboard_keymaps_match(keyboard->keymap, keymap) : true;
bool effective_layout_changed = keyboard->effective_layout != 0;
int repeat_rate = 25;
@ -909,14 +902,14 @@ void sway_keyboard_configure(struct sway_keyboard *keyboard) {
xkb_mod_index_t mod_index = xkb_map_mod_get_index(keymap,
XKB_MOD_NAME_NUM);
if (mod_index != XKB_MOD_INVALID) {
locked_mods |= (uint32_t)1 << mod_index;
locked_mods |= (uint32_t)1 << mod_index;
}
}
if (input_config && input_config->xkb_capslock > 0) {
xkb_mod_index_t mod_index = xkb_map_mod_get_index(keymap,
XKB_MOD_NAME_CAPS);
if (mod_index != XKB_MOD_INVALID) {
locked_mods |= (uint32_t)1 << mod_index;
locked_mods |= (uint32_t)1 << mod_index;
}
}
if (locked_mods) {