xwayland: Ensure pointer for gestures has buttons
X11 clients tend to assume that pointers have buttons. This assumption means they often fail to handle the X error that is generated when querying the button mapping of a pointer device that lacks buttons. This failure to handle the X error leads to those client applications to abruptly exit. This commit assigns vestigial buttons to the gesture pointer device for the sole purpose of backward compatibility with legacy X11 clients. That technique is already employed for a different pointer, the relative pointer device, for similar reasons, so this just makes the legacy client compatibility more complete. See https://gitlab.gnome.org/GNOME/mutter/-/issues/2353
This commit is contained in:
parent
073b90ea56
commit
456b0e86bb
|
@ -313,6 +313,13 @@ xwl_pointer_proc_pointer_gestures(DeviceIntPtr device, int what)
|
||||||
axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
|
axes_labels[0] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_X);
|
||||||
axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
|
axes_labels[1] = XIGetKnownProperty(AXIS_LABEL_PROP_REL_Y);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We'll never send buttons, but XGetPointerMapping might in certain
|
||||||
|
* situations make the client think we have no buttons.
|
||||||
|
*/
|
||||||
|
if (!init_pointer_buttons(device))
|
||||||
|
return BadValue;
|
||||||
|
|
||||||
if (!InitValuatorClassDeviceStruct(device, NAXES, axes_labels,
|
if (!InitValuatorClassDeviceStruct(device, NAXES, axes_labels,
|
||||||
GetMotionHistorySize(), Relative))
|
GetMotionHistorySize(), Relative))
|
||||||
return BadValue;
|
return BadValue;
|
||||||
|
|
Loading…
Reference in New Issue