diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
index 1a0b678..60801e1 100644
--- a/gdk/quartz/gdkevents-quartz.c
+++ b/gdk/quartz/gdkevents-quartz.c
@@ -706,6 +708,20 @@ find_window_for_ns_event (NSEvent *nsevent,
                         return NULL;
                       }
                   }
+               {
+                       unsigned int subviews = [[toplevel_impl->view subviews] count];
+                       unsigned int si;
+
+                       for (si = 0; si < subviews; ++si) {
+                               NSView* sv = [[toplevel_impl->view subviews] objectAtIndex:si];
+                               NSRect r = [sv frame];
+                               if (r.origin.x <= *x && r.origin.x + r.size.width >= *x &&
+                                   r.origin.y <= *y && r.origin.y + r.size.height >= *y) {
+                                       /* event is within subview, forward back to Cocoa */
+                                       return NULL;
+                               }
+                       }
+               }
 
                 *x = x_tmp;
                 *y = y_tmp;
@@ -1140,6 +1156,7 @@ gdk_event_translate (GdkEvent *event,
    * event masks into consideration.
    */
   window = find_window_for_ns_event (nsevent, &x, &y, &x_root, &y_root);
+
   if (!window)
     return FALSE;
 
