diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 7a000aa..ec36191 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -5049,7 +5049,7 @@ gdk_window_invalidate_rect (GdkWindow          *window,
   if (GDK_WINDOW_DESTROYED (window))
     return;
 
-  if (private->input_only || !private->viewable)
+  if (private->input_only || !private->viewable || !GDK_WINDOW_IS_MAPPED (window))
     return;
 
   if (!rect)
@@ -5135,6 +5135,7 @@ gdk_window_invalidate_maybe_recurse (GdkWindow       *window,
 
   if (private->input_only ||
       !private->viewable ||
+      !GDK_WINDOW_IS_MAPPED (window) ||
       gdk_region_empty (region))
     return;
 
@@ -7929,7 +7930,7 @@ _gdk_window_calculate_full_clip_region (GdkWindow *window,
   if (base_y_offset)
     *base_y_offset = 0;
 
-  if (!private->viewable || private->input_only)
+  if (!private->viewable || !GDK_WINDOW_IS_MAPPED (window) || private->input_only)
     return gdk_region_new ();
 
   window_get_size_rectangle (window, &visible_rect);
