summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Natterer <mitch@gimp.org>2012-11-09 17:12:30 +0100
committerMichael Natterer <mitch@gimp.org>2012-11-20 10:35:40 +0100
commit455a0ecc1cf690018ea8d0223f8f37fd17271cef (patch)
treedf02885e5f9304f1badb544821299ec856620580
parent2d5ad5f54e7e78fd35ef09b4ce055af9f6d9aa0a (diff)
downloadgtk+-455a0ecc1cf690018ea8d0223f8f37fd17271cef.tar.gz
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)
-rw-r--r--gdk/quartz/gdkevents-quartz.c14
1 files 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: