[mutter] backend-x11: Fix cursor position under nested



commit 9607513e62601fa7c706d72189bee7de0f9a022b
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Mon Apr 28 13:27:02 2014 -0400

    backend-x11: Fix cursor position under nested

 src/backends/x11/meta-backend-x11.c |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)
---
diff --git a/src/backends/x11/meta-backend-x11.c b/src/backends/x11/meta-backend-x11.c
index 3a7c77a..5ce37c0 100644
--- a/src/backends/x11/meta-backend-x11.c
+++ b/src/backends/x11/meta-backend-x11.c
@@ -82,9 +82,23 @@ static void
 translate_device_event (MetaBackendX11 *x11,
                         XIDeviceEvent  *device_event)
 {
-  device_event->event = get_stage_window (x11);
-  device_event->event_x = device_event->root_x;
-  device_event->event_y = device_event->root_y;
+  Window stage_window = get_stage_window (x11);
+
+  if (device_event->event != stage_window)
+    {
+      /* This codepath should only ever trigger as an X11 compositor,
+       * and never under nested, as under nested all backend events
+       * should be reported with respect to the stage window. */
+      g_assert (!meta_is_wayland_compositor ());
+
+      device_event->event = stage_window;
+
+      /* As an X11 compositor, the stage window is always at 0,0, so
+       * using root coordinates will give us correct stage coordinates
+       * as well... */
+      device_event->event_x = device_event->root_x;
+      device_event->event_y = device_event->root_y;
+    }
 }
 
 /* Clutter makes the assumption that there is only one X window


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]