diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index e368e89..561b969 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -1435,6 +1435,12 @@ propagate (GdkWindow  **window,
 	return TRUE;
     }
 }
+static gboolean
+doesnt_want_what_what (gint mask,
+		 MSG *msg)
+{
+    return FALSE;
+}
 
 static gboolean
 doesnt_want_key (gint mask,
@@ -2344,6 +2352,13 @@ gdk_event_translate (MSG  *msg,
       current_root_x = msg->pt.x + _gdk_offset_x;
       current_root_y = msg->pt.y + _gdk_offset_y;
 
+      if (!propagate (&window, msg,
+		      _gdk_display->keyboard_grab.window,
+		      _gdk_display->keyboard_grab.owner_events,
+		      GDK_ALL_EVENTS_MASK,
+                      doesnt_want_what_what, TRUE))
+        break;
+
       event = gdk_event_new (GDK_MOTION_NOTIFY);
       event->motion.window = window;
       event->motion.time = _gdk_win32_get_next_tick (msg->time);
