[gtk+] reftests: Add a hack to make toplevels work in various WMs



commit 3f4f900242f7d8c3e1f4e1722e0f211f3347b41d
Author: Benjamin Otte <otte redhat com>
Date:   Thu May 5 04:29:56 2011 +0200

    reftests: Add a hack to make toplevels work in various WMs
    
    If we have a toplevel, and not a popup window, do wait an additional
    0.5s to give the WM/server enough time to actually create the window.
    
    This is a hack and there should be a better solution. But it works.
    
    Please use POPUP windows for tests unless the test must use toplevel
    windows.

 tests/reftests/gtk-reftest.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)
---
diff --git a/tests/reftests/gtk-reftest.c b/tests/reftests/gtk-reftest.c
index 492031b..111a4c9 100644
--- a/tests/reftests/gtk-reftest.c
+++ b/tests/reftests/gtk-reftest.c
@@ -225,8 +225,21 @@ snapshot_widget (GtkWidget *widget, SnapshotMode mode)
   switch (mode)
     {
     case SNAPSHOT_WINDOW:
-      gdk_cairo_set_source_window (cr, gtk_widget_get_window (widget), 0, 0);
-      cairo_paint (cr);
+      {
+        GdkWindow *window = gtk_widget_get_window (widget);
+        if (gdk_window_get_window_type (window) == GDK_WINDOW_TOPLEVEL ||
+            gdk_window_get_window_type (window) == GDK_WINDOW_FOREIGN)
+          {
+            /* give the WM/server some time to sync. They need it.
+             * Also, do use popups instead of toplevls in your tests
+             * whenever you can. */
+            gdk_display_sync (gdk_window_get_display (window));
+            g_timeout_add (500, quit_when_idle, loop);
+            g_main_loop_run (loop);
+          }
+        gdk_cairo_set_source_window (cr, window, 0, 0);
+        cairo_paint (cr);
+      }
       break;
     case SNAPSHOT_DRAW:
       bg = gdk_window_get_background_pattern (gtk_widget_get_window (widget));



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