[mutter/wip/carlosg/crossings: 4/11] wayland: Do not query seat for pointer coordinates
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/crossings: 4/11] wayland: Do not query seat for pointer coordinates
- Date: Wed, 23 Dec 2020 12:13:00 +0000 (UTC)
commit 1f17a7ffef196e198dd443f7b811b553fc58d143
Author: Carlos Garnacho <carlosg gnome org>
Date: Tue Dec 22 17:33:03 2020 +0100
wayland: Do not query seat for pointer coordinates
In the wayland code we are in synchronization with the events that
the ClutterStage is managing at the moment. Asking the ClutterSeat for
the pointer position gets ahead of the current events, and may result
in imprecise coordinates sent in wl_pointer.enter.
To be in consistence with the motion events that might be already
queued, we should ask the stage for the last known coordinates.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1654>
src/wayland/meta-wayland-pointer.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
---
diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c
index ef0923577b..1f671829fd 100644
--- a/src/wayland/meta-wayland-pointer.c
+++ b/src/wayland/meta-wayland-pointer.c
@@ -908,6 +908,7 @@ meta_wayland_pointer_set_focus (MetaWaylandPointer *pointer,
if (surface != NULL)
{
+ ClutterStage *stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
struct wl_client *client = wl_resource_get_client (surface->resource);
graphene_point_t pos;
MetaWindow *focus_window;
@@ -919,8 +920,7 @@ meta_wayland_pointer_set_focus (MetaWaylandPointer *pointer,
G_CALLBACK (focus_surface_destroyed),
pointer);
- clutter_seat_query_state (clutter_input_device_get_seat (pointer->device),
- pointer->device, NULL, &pos, NULL);
+ clutter_stage_get_device_coords (stage, pointer->device, NULL, &pos);
focus_window = meta_wayland_surface_get_window (pointer->focus_surface);
if (focus_window)
@@ -1042,11 +1042,12 @@ meta_wayland_pointer_get_relative_coordinates (MetaWaylandPointer *pointer,
wl_fixed_t *sx,
wl_fixed_t *sy)
{
+ MetaBackend *backend = meta_get_backend ();
+ ClutterStage *stage = CLUTTER_STAGE (meta_backend_get_stage (backend));
float xf = 0.0f, yf = 0.0f;
graphene_point_t pos;
- clutter_seat_query_state (clutter_input_device_get_seat (pointer->device),
- pointer->device, NULL, &pos, NULL);
+ clutter_stage_get_device_coords (stage, pointer->device, NULL, &pos);
meta_wayland_surface_get_relative_coordinates (surface, pos.x, pos.y, &xf, &yf);
*sx = wl_fixed_from_double (xf);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]