diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 71405f3..d07292c 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -3846,17 +3846,26 @@ _gdk_window_process_updates_recurse (GdkWindow *window,
       if (window->event_mask & GDK_EXPOSURE_MASK)
 	{
 	  GdkEvent event;
+          cairo_region_t *region_copy = cairo_region_copy (expose_region);
 
-	  event.expose.type = GDK_EXPOSE;
-	  event.expose.window = g_object_ref (window);
-	  event.expose.send_event = FALSE;
-	  event.expose.count = 0;
-	  event.expose.region = expose_region;
-	  cairo_region_get_extents (expose_region, &event.expose.area);
+          cairo_region_intersect (region_copy,
+                                  window->clip_region_with_children);
 
-          _gdk_event_emit (&event);
+          if (!cairo_region_is_empty (region_copy))
+            {
+              event.expose.type = GDK_EXPOSE;
+              event.expose.window = g_object_ref (window);
+              event.expose.send_event = FALSE;
+              event.expose.count = 0;
+              event.expose.region = expose_region;
+              cairo_region_get_extents (expose_region, &event.expose.area);
+
+              _gdk_event_emit (&event);
+
+              g_object_unref (window);
+            }
 
-	  g_object_unref (window);
+          cairo_region_destroy (region_copy);
 	}
       else if (window->window_type != GDK_WINDOW_FOREIGN)
 	{
