xwayland: do not auto-lock pointer when rootful

Xwayland tries to be smart and guess the intention of the X11 clients
sometimes, like issuing a pointer lock when a client hides the pointer
when confined.

While this is a good thing when running rootless, this is problematic
when running rootful as the pointer will be automatically locked unless
the "retro" mode is used (which doesn't hide the cursor, unlike the
default).

Make sure we don't trigger the automatic pointer lock when the cursor is
hidden when running rootful.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Olivier Fourdan 2022-05-05 16:38:53 +02:00
parent d370f1e58a
commit 503e7663f8

View File

@ -3202,6 +3202,8 @@ xwl_seat_emulate_pointer_warp(struct xwl_seat *xwl_seat,
static Bool
xwl_seat_maybe_lock_on_hidden_cursor(struct xwl_seat *xwl_seat)
{
struct xwl_screen *xwl_screen = xwl_seat->xwl_screen;
/* Some clients use hidden cursor+confineTo+relative motion
* to implement infinite panning (eg. 3D views), lock the
* pointer for so the relative pointer is used.
@ -3212,6 +3214,9 @@ xwl_seat_maybe_lock_on_hidden_cursor(struct xwl_seat *xwl_seat)
if (!xwl_seat->focus_window)
return FALSE;
if (!xwl_screen->rootless)
return FALSE;
if (xwl_seat->cursor_confinement_window != xwl_seat->focus_window)
return FALSE;