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
|