summaryrefslogtreecommitdiff
path: root/source/l/gtk+/gtk+-1.2.10-themeswitch.patch
blob: 5bf8490322e0238cf074bb77f71bbc08d9f1c719 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
--- gtk+-1.2.10/gtk/gtkwindow.c.themeswitch	Mon Aug 13 13:42:05 2001
+++ gtk+-1.2.10/gtk/gtkwindow.c	Mon Aug 13 13:42:05 2001
@@ -859,13 +859,60 @@
   GTK_OBJECT_CLASS(parent_class)->finalize (object);
 }
 
+
+static void
+reread_rc_files ()
+{
+  if (gtk_rc_reparse_all ())
+    {
+      /* If the above returned true, some of our RC files are out
+       * of date, so we need to reset all our widgets. Our other
+       * toplevel windows will also get the message, but by
+       * then, the RC file will up to date, so we have to tell
+       * them now.
+       */
+      GList *toplevels;
+      
+      toplevels = gtk_container_get_toplevels();
+      while (toplevels)
+	{
+	  gtk_widget_reset_rc_styles (toplevels->data);
+	  toplevels = toplevels->next;
+	}
+    }
+}
+
 static void
 gtk_window_show (GtkWidget *widget)
 {
   GtkWindow *window = GTK_WINDOW (widget);
   GtkContainer *container = GTK_CONTAINER (window);
   gboolean need_resize;
+  GList *toplevels;
+  gboolean had_visible = FALSE;
 
+  /* If we have no windows shown at this point, then check for
+   * theme changes before showing the window. We really should
+   * be checking realized, not shown, but shown => realized,
+   * and checking in realize might cause reentrancy problems.
+   *
+   * Plus, this allows us to get the new size right before
+   * realizing.
+   */
+  toplevels = gtk_container_get_toplevels ();
+  while (toplevels)
+    {
+      if (GTK_WIDGET_VISIBLE (toplevels->data))
+	{
+	  had_visible = TRUE;
+	  break;
+	}
+      toplevels = toplevels->next;
+    }
+
+  if (!had_visible)
+    reread_rc_files ();
+  
   GTK_WIDGET_SET_FLAGS (widget, GTK_VISIBLE);
 
   need_resize = container->need_resize || !GTK_WIDGET_REALIZED (widget);
@@ -1480,23 +1527,7 @@
 	}
     }
 
-  if (gtk_rc_reparse_all ())
-    {
-      /* If the above returned true, some of our RC files are out
-       * of date, so we need to reset all our widgets. Our other
-       * toplevel windows will also get the message, but by
-       * then, the RC file will up to date, so we have to tell
-       * them now.
-       */
-      GList *toplevels;
-      
-      toplevels = gtk_container_get_toplevels();
-      while (toplevels)
-	{
-	  gtk_widget_reset_rc_styles (toplevels->data);
-	  toplevels = toplevels->next;
-	}
-    }
+  reread_rc_files ();
 }
 
 static gint