xserver: Branch 'xwayland-24.1'

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Feb 11 08:28:16 UTC 2025


 hw/xwayland/xwayland-input.c |    7 ++-----
 include/inputstr.h           |    2 --
 xkb/xkbActions.c             |    9 +++------
 xkb/xkbPrKeyEv.c             |    2 +-
 4 files changed, 6 insertions(+), 14 deletions(-)

New commits:
commit f04096af3cb7fe28914a1248498da3dc757fd73d
Author: Olivier Fourdan <ofourdan at redhat.com>
Date:   Mon Feb 10 15:38:18 2025 +0100

    Revert "xwayland: Don't run key behaviors and actions"
    
    Due to a bug in gamescope who does not send the Wayland modifiers
    events, this is causing a regression in X11 clients running on Xwayland
    in gamescope, where the modifiers are not applied anymore.
    
    This reverts commit cea92a3e0900eb611b2e683edf11272d4e306a77.
    
    Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1790
    See-also: https://github.com/ValveSoftware/gamescope/issues/1740
    Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1781>

diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
index 41434a89a..53cc5144b 100644
--- a/hw/xwayland/xwayland-input.c
+++ b/hw/xwayland/xwayland-input.c
@@ -1284,12 +1284,11 @@ keyboard_handle_modifiers(void *data, struct wl_keyboard *keyboard,
         old_state = dev->key->xkbInfo->state;
         new_state = &dev->key->xkbInfo->state;
 
-        new_state->base_group = 0;
-        new_state->latched_group = 0;
         new_state->locked_group = group & XkbAllGroupsMask;
         new_state->base_mods = mods_depressed & XkbAllModifiersMask;
-        new_state->latched_mods = mods_latched & XkbAllModifiersMask;
         new_state->locked_mods = mods_locked & XkbAllModifiersMask;
+        XkbLatchModifiers(dev, XkbAllModifiersMask,
+                          mods_latched & XkbAllModifiersMask);
 
         XkbComputeDerivedState(dev->key->xkbInfo);
 
@@ -1677,7 +1676,6 @@ add_device(struct xwl_seat *xwl_seat,
     dev->public.devicePrivate = xwl_seat;
     dev->type = SLAVE;
     dev->spriteInfo->spriteOwner = FALSE;
-    dev->ignoreXkbActionsBehaviors = TRUE;
 
     return dev;
 }
@@ -3599,7 +3597,6 @@ InitInput(int argc, char *argv[])
 
     mieqInit();
 
-    inputInfo.keyboard->ignoreXkbActionsBehaviors = TRUE;
     xwl_screen->input_registry = wl_display_get_registry(xwl_screen->display);
     wl_registry_add_listener(xwl_screen->input_registry, &input_listener,
                              xwl_screen);
diff --git a/include/inputstr.h b/include/inputstr.h
index 269399e1d..24dd48841 100644
--- a/include/inputstr.h
+++ b/include/inputstr.h
@@ -631,8 +631,6 @@ typedef struct _DeviceIntRec {
     DeviceSendEventsProc sendEventsProc;
 
     struct _SyncCounter *idle_counter;
-
-    Bool ignoreXkbActionsBehaviors; /* TRUE if keys don't trigger behaviors and actions */
 } DeviceIntRec;
 
 typedef struct {
diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
index 8dd9d7da0..5e9a6b6d6 100644
--- a/xkb/xkbActions.c
+++ b/xkb/xkbActions.c
@@ -1368,12 +1368,9 @@ XkbHandleActions(DeviceIntPtr dev, DeviceIntPtr kbd, DeviceEvent *event)
                   (event->type == ET_ButtonPress));
 
     if (pressEvent) {
-        if (keyEvent) {
-            if (kbd->ignoreXkbActionsBehaviors)
-                act.type = XkbSA_NoAction;
-            else
-                act = XkbGetKeyAction(xkbi, &xkbi->state, key);
-        } else {
+        if (keyEvent)
+            act = XkbGetKeyAction(xkbi, &xkbi->state, key);
+        else {
             act = XkbGetButtonAction(kbd, dev, key);
             key |= BTN_ACT_FLAG;
         }
diff --git a/xkb/xkbPrKeyEv.c b/xkb/xkbPrKeyEv.c
index 53a31b727..d2c7e33f4 100644
--- a/xkb/xkbPrKeyEv.c
+++ b/xkb/xkbPrKeyEv.c
@@ -68,7 +68,7 @@ XkbProcessKeyboardEvent(DeviceEvent *event, DeviceIntPtr keybd)
     /* do anything to implement the behavior, but it *does* report that */
     /* key is hardwired */
 
-    if (!keybd->ignoreXkbActionsBehaviors && !(behavior.type & XkbKB_Permanent)) {
+    if (!(behavior.type & XkbKB_Permanent)) {
         switch (behavior.type) {
         case XkbKB_Default:
             /* Neither of these should happen in practice, but ignore them


More information about the xorg-commit mailing list