[gtk/gtk-4-2: 69/91] gdk: Avoid synthetic motion confusion




commit d26a3c28d0b59f61073bb4ef1da3bb6cea2d5722
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Apr 22 19:51:17 2021 -0400

    gdk: Avoid synthetic motion confusion
    
    Don't emit a synthetic motion event on a surface
    that is grab-shadowed by a popup. This has been
    known to confuse GTK, at times.
    
    Fixes: #3439

 gdk/gdksurface.c | 7 +++++++
 1 file changed, 7 insertions(+)
---
diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c
index ef6464c43a..589dc4e10c 100644
--- a/gdk/gdksurface.c
+++ b/gdk/gdksurface.c
@@ -2443,6 +2443,7 @@ gdk_surface_ensure_motion (GdkSurface *surface)
   GdkEvent *event;
   double x, y;
   GdkModifierType state;
+  GdkSurface *grab_surface;
 
   if (!surface->request_motion)
     return;
@@ -2459,6 +2460,12 @@ gdk_surface_ensure_motion (GdkSurface *surface)
   if (!gdk_surface_get_device_position (surface, device, &x, &y, &state))
     return;
 
+  if (gdk_device_grab_info (display, device, &grab_surface, NULL))
+    {
+      if (grab_surface != surface)
+        return;
+    }
+
   event = gdk_motion_event_new (surface,
                                 device,
                                 NULL,


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