From 55fd05ea588a34564128f9f657084c82eae1cb0b Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Wed, 24 Jun 2015 10:30:10 -0700 Subject: [PATCH] backend-x11: Fix our awful hack for crossing events, too For enter / leave events, which we use in the UI code, we need to make sure that these coordinates are root-relative as well, otherwise the cursor when entering frames might be incorrect. --- src/backends/x11/meta-backend-x11.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/backends/x11/meta-backend-x11.c b/src/backends/x11/meta-backend-x11.c index 6e52a5a55..29fcb8509 100644 --- a/src/backends/x11/meta-backend-x11.c +++ b/src/backends/x11/meta-backend-x11.c @@ -133,6 +133,8 @@ static void translate_crossing_event (MetaBackendX11 *x11, XIEnterEvent *enter_event) { + MetaBackendX11Private *priv = meta_backend_x11_get_instance_private (x11); + /* Throw out weird events generated by grabs. */ if (enter_event->mode == XINotifyGrab || enter_event->mode == XINotifyUngrab) @@ -141,7 +143,15 @@ translate_crossing_event (MetaBackendX11 *x11, return; } - enter_event->event = meta_backend_x11_get_xwindow (x11); + Window stage_window = meta_backend_x11_get_xwindow (x11); + if (enter_event->event != stage_window) + { + /* See above for the rationale for this... */ + g_assert (priv->mode == META_BACKEND_X11_MODE_COMPOSITOR); + enter_event->event = meta_backend_x11_get_xwindow (x11); + enter_event->event_x = enter_event->root_x; + enter_event->event_y = enter_event->root_y; + } } static void