--- 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