summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--clutter/clutter/evdev/clutter-device-manager-evdev.c14
-rw-r--r--clutter/clutter/evdev/clutter-seat-evdev.h1
-rw-r--r--src/wayland/meta-wayland-keyboard.c6
3 files changed, 14 insertions, 7 deletions
diff --git a/clutter/clutter/evdev/clutter-device-manager-evdev.c b/clutter/clutter/evdev/clutter-device-manager-evdev.c
index c1c933e9c..44e3dddbb 100644
--- a/clutter/clutter/evdev/clutter-device-manager-evdev.c
+++ b/clutter/clutter/evdev/clutter-device-manager-evdev.c
@@ -2317,7 +2317,7 @@ clutter_evdev_update_xkb_state (ClutterDeviceManagerEvdev *manager_evdev)
0, /* depressed */
latched_mods,
locked_mods,
- 0, 0, 0);
+ 0, 0, seat->layout_idx);
seat->caps_lock_led = xkb_keymap_led_get_index (priv->keymap, XKB_LED_NAME_CAPS);
seat->num_lock_led = xkb_keymap_led_get_index (priv->keymap, XKB_LED_NAME_NUM);
@@ -2465,6 +2465,7 @@ clutter_evdev_set_keyboard_layout_index (ClutterDeviceManager *evdev,
xkb_mod_mask_t latched_mods;
xkb_mod_mask_t locked_mods;
struct xkb_state *state;
+ GSList *l;
g_return_if_fail (CLUTTER_IS_DEVICE_MANAGER_EVDEV (evdev));
@@ -2476,6 +2477,12 @@ clutter_evdev_set_keyboard_layout_index (ClutterDeviceManager *evdev,
locked_mods = xkb_state_serialize_mods (state, XKB_STATE_MODS_LOCKED);
xkb_state_update_mask (state, depressed_mods, latched_mods, locked_mods, 0, 0, idx);
+ for (l = manager_evdev->priv->seats; l; l = l->next)
+ {
+ ClutterSeatEvdev *seat = l->data;
+
+ seat->layout_idx = idx;
+ }
}
/**
@@ -2485,12 +2492,9 @@ xkb_layout_index_t
clutter_evdev_get_keyboard_layout_index (ClutterDeviceManager *evdev)
{
ClutterDeviceManagerEvdev *manager_evdev;
- struct xkb_state *state;
manager_evdev = CLUTTER_DEVICE_MANAGER_EVDEV (evdev);
- state = manager_evdev->priv->main_seat->xkb;
-
- return xkb_state_serialize_layout (state, XKB_STATE_LAYOUT_LOCKED);
+ return manager_evdev->priv->main_seat->layout_idx;
}
/**
diff --git a/clutter/clutter/evdev/clutter-seat-evdev.h b/clutter/clutter/evdev/clutter-seat-evdev.h
index 38c9c7a30..61a2acd2f 100644
--- a/clutter/clutter/evdev/clutter-seat-evdev.h
+++ b/clutter/clutter/evdev/clutter-seat-evdev.h
@@ -58,6 +58,7 @@ struct _ClutterSeatEvdev
xkb_led_index_t caps_lock_led;
xkb_led_index_t num_lock_led;
xkb_led_index_t scroll_lock_led;
+ xkb_layout_index_t layout_idx;
uint32_t button_state;
int button_count[KEY_CNT];
diff --git a/src/wayland/meta-wayland-keyboard.c b/src/wayland/meta-wayland-keyboard.c
index c069df887..5b90b2a7a 100644
--- a/src/wayland/meta-wayland-keyboard.c
+++ b/src/wayland/meta-wayland-keyboard.c
@@ -508,6 +508,8 @@ meta_wayland_keyboard_update_xkb_state (MetaWaylandKeyboard *keyboard)
{
MetaWaylandXkbInfo *xkb_info = &keyboard->xkb_info;
xkb_mod_mask_t latched, locked;
+ MetaBackend *backend = meta_get_backend ();
+ xkb_layout_index_t layout_idx;
/* Preserve latched/locked modifiers state */
if (xkb_info->state)
@@ -523,8 +525,8 @@ meta_wayland_keyboard_update_xkb_state (MetaWaylandKeyboard *keyboard)
xkb_info->state = xkb_state_new (xkb_info->keymap);
- if (latched || locked)
- xkb_state_update_mask (xkb_info->state, 0, latched, locked, 0, 0, 0);
+ layout_idx = meta_backend_get_keymap_layout_group (backend);
+ xkb_state_update_mask (xkb_info->state, 0, latched, locked, 0, 0, layout_idx);
kbd_a11y_apply_mask (keyboard);
}