[gtk/fix-wayland-keyboard-layout] wayland: Pass layout information in key events




commit 1ce5494ffdd76c8ece9b894ee91e984cb31d8522
Author: Matthias Clasen <mclasen redhat com>
Date:   Mon Mar 15 14:48:05 2021 -0400

    wayland: Pass layout information in key events
    
    We were always setting group to 0, causing accelerator
    interpretation to always go off the first configured
    layout, not the active one.
    
    Fixes: #1825

 gdk/wayland/gdkdevice-wayland.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
---
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 3d5ca60a8d..67bd322340 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -2195,6 +2195,7 @@ deliver_key_event (GdkWaylandSeat *seat,
   struct xkb_keymap *xkb_keymap;
   GdkKeymap *keymap;
   xkb_keysym_t sym;
+  int layout;
   guint delay, interval, timeout;
   gint64 begin_time, now;
 
@@ -2207,6 +2208,7 @@ deliver_key_event (GdkWaylandSeat *seat,
   xkb_keymap = _gdk_wayland_keymap_get_xkb_keymap (keymap);
 
   sym = xkb_state_key_get_one_sym (xkb_state, key);
+  layout = xkb_state_key_get_layout (xkb_state, key);
   if (sym == XKB_KEY_NoSymbol)
     return;
 
@@ -2220,7 +2222,7 @@ deliver_key_event (GdkWaylandSeat *seat,
   gdk_event_set_seat (event, GDK_SEAT (seat));
   event->key.time = time_;
   event->key.state = device_get_modifiers (seat->master_pointer);
-  event->key.group = 0;
+  event->key.group = layout;
   event->key.hardware_keycode = key;
   gdk_event_set_scancode (event, key);
   event->key.keyval = sym;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]