[gtk+] Send expose events on foreign windows



commit afc19eb4a7e4ec4420dc202e0da0fe2c4d1ca7c2
Author: Alexander Larsson <alexl redhat com>
Date:   Thu Sep 24 16:42:52 2009 +0200

    Send expose events on foreign windows
    
    F-Spot needs this as it draws on a foreign (screensaver) window, which
    used to work.
    
    I believe this is safe, because in all typical cases the expose
    mask will not be set, so we won't do anything, and its what we used to
    do.

 gdk/gdkwindow.c |   10 +++++++---
 1 files changed, 7 insertions(+), 3 deletions(-)
---
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 500bf65..3231dea 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -5023,12 +5023,17 @@ _gdk_window_process_updates_recurse (GdkWindow *window,
 
 	  g_object_unref (window);
 	}
-      else if (private->bg_pixmap != GDK_NO_BG)
+      else if (private->bg_pixmap != GDK_NO_BG &&
+	       private->window_type != GDK_WINDOW_FOREIGN)
 	{
 	  /* No exposure mask set, so nothing will be drawn, the
 	   * app relies on the background being what it specified
 	   * for the window. So, we need to clear this manually.
 	   *
+	   * For foreign windows if expose is not set that generally
+	   * means some other client paints them, so don't clear
+	   * there.
+	   *
 	   * We use begin/end_paint around the clear so that we can
 	   * piggyback on the implicit paint */
 
@@ -5066,8 +5071,7 @@ gdk_window_process_updates_internal (GdkWindow *window)
       GdkRegion *update_area = private->update_area;
       private->update_area = NULL;
 
-      if (_gdk_event_func && gdk_window_is_viewable (window)  &&
-	  private->window_type != GDK_WINDOW_FOREIGN)
+      if (_gdk_event_func && gdk_window_is_viewable (window))
 	{
 	  GdkRegion *expose_region;
 	  gboolean end_implicit;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]