From 455a0ecc1cf690018ea8d0223f8f37fd17271cef Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Fri, 9 Nov 2012 17:12:30 +0100 Subject: [PATCH] quartz: always send GDK_NOTIFY_NONLINEAR crossing events so GtkMenu works properly. This is not right, but not more wrong than always sending GDK_NOTIFY_ANCESTOR either. (cherry picked from commit 35a9322e45bb403d34c9e4da036d9d8d559419fb) --- gdk/quartz/gdkevents-quartz.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c index cd05882a05..fcda072441 100644 --- a/gdk/quartz/gdkevents-quartz.c +++ b/gdk/quartz/gdkevents-quartz.c @@ -1121,8 +1121,9 @@ synthesize_crossing_event (GdkWindow *window, switch ([nsevent type]) { case NSMouseEntered: - /* Enter events are considered always to be from the root window as we - * can't know for sure from what window we enter. + /* Enter events are considered always to be from another toplevel + * window, this shouldn't negatively affect any app or gtk code, + * and is the only way to make GtkMenu work. EEK EEK EEK. */ if (!(window->event_mask & GDK_ENTER_NOTIFY_MASK)) return FALSE; @@ -1132,14 +1133,11 @@ synthesize_crossing_event (GdkWindow *window, x_root, y_root, GDK_ENTER_NOTIFY, GDK_CROSSING_NORMAL, - GDK_NOTIFY_ANCESTOR); + GDK_NOTIFY_NONLINEAR); return TRUE; case NSMouseExited: - /* Exited always is to the root window as far as we are concerned, - * since there is no way to reliably get information about what new - * window is entered when exiting one. - */ + /* See above */ if (!(window->event_mask & GDK_LEAVE_NOTIFY_MASK)) return FALSE; @@ -1148,7 +1146,7 @@ synthesize_crossing_event (GdkWindow *window, x_root, y_root, GDK_LEAVE_NOTIFY, GDK_CROSSING_NORMAL, - GDK_NOTIFY_ANCESTOR); + GDK_NOTIFY_NONLINEAR); return TRUE; default: