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 cea92a3e09.

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>
This commit is contained in:
Olivier Fourdan 2025-02-10 15:38:18 +01:00
parent ffc3aa63d3
commit f04096af3c
4 changed files with 6 additions and 14 deletions

View file

@ -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);

View file

@ -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 {

View file

@ -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;
}

View file

@ -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