[gtk/wip/chergert/quartz4u] macos: always use event window for entered/leave events



commit 64f0fbb2def87d328921cb2c41caf350f3f78d2a
Author: Christian Hergert <chergert redhat com>
Date:   Thu May 14 15:22:56 2020 -0700

    macos: always use event window for entered/leave events
    
    We don't seem to be able to trust the window for everything, but
    for these it seems to be okay (and preferred).

 gdk/macos/gdkmacosdisplay-translate.c | 23 ++++++++++++++++++-----
 1 file changed, 18 insertions(+), 5 deletions(-)
---
diff --git a/gdk/macos/gdkmacosdisplay-translate.c b/gdk/macos/gdkmacosdisplay-translate.c
index 658b959ef6..7bcad51003 100644
--- a/gdk/macos/gdkmacosdisplay-translate.c
+++ b/gdk/macos/gdkmacosdisplay-translate.c
@@ -684,7 +684,7 @@ _gdk_macos_display_translate (GdkMacosDisplay *self,
   GdkMacosSurface *surface;
   GdkMacosWindow *window;
   NSEventType event_type;
-  NSWindow *nswindow;
+  NSWindow *nswindow = NULL;
   GdkEvent *ret = NULL;
   NSPoint point;
   int x_tmp;
@@ -711,11 +711,24 @@ _gdk_macos_display_translate (GdkMacosDisplay *self,
       return NULL;
     }
 
-  if (!(nswindow = _gdk_macos_display_find_native_under_pointer (self, &x_tmp, &y_tmp)))
-    return NULL;
+  /* Prefer the NSEvent window for certain event types. Other events
+   * we will ignore it and resolve the destination directly.
+   */
+  if (event_type == NSEventTypeMouseEntered ||
+      event_type == NSEventTypeMouseExited)
+    {
+      nswindow = [nsevent window];
+      point = [nsevent locationInWindow];
+    }
 
-  point.x = x_tmp;
-  point.y = y_tmp;
+  if (nswindow == NULL)
+    {
+      if (!(nswindow = _gdk_macos_display_find_native_under_pointer (self, &x_tmp, &y_tmp)))
+        return NULL;
+
+      point.x = x_tmp;
+      point.y = y_tmp;
+    }
 
   /* Ignore unless it is for a GdkMacosWindow */
   if (!GDK_IS_MACOS_WINDOW (nswindow))


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