+Fri May 1 12:06:43 1998 Owen Taylor <otaylor@gtk.org>
+
+ * gtk/gtkwindow.[ch] (gtk_widget_reset_rc_styles): New
+ function to reset the RC styles for a heirarchy
+
+ Clear the window background if necessary in
+ gtk_window_style_set.
+
+ * gtk/gtkrc.[ch]: New function gtk_rc_reparse_all() which
+ rereads all previously read RC files.
+
+ * gdk/gdkwindow.c gdk/gdk.h: New function gdk_window_get_toplevels().
+ (Should it just be called gdk_get_toplevels?)
+
+ * gtk/testgtk.c: New test to reload RC files.
+
Fri May 1 13:57:36 1998 Tim Janik <timj@gtk.org>
* gtk/gtkclist.h:
+Fri May 1 12:06:43 1998 Owen Taylor <otaylor@gtk.org>
+
+ * gtk/gtkwindow.[ch] (gtk_widget_reset_rc_styles): New
+ function to reset the RC styles for a heirarchy
+
+ Clear the window background if necessary in
+ gtk_window_style_set.
+
+ * gtk/gtkrc.[ch]: New function gtk_rc_reparse_all() which
+ rereads all previously read RC files.
+
+ * gdk/gdkwindow.c gdk/gdk.h: New function gdk_window_get_toplevels().
+ (Should it just be called gdk_get_toplevels?)
+
+ * gtk/testgtk.c: New test to reload RC files.
+
Fri May 1 13:57:36 1998 Tim Janik <timj@gtk.org>
* gtk/gtkclist.h:
+Fri May 1 12:06:43 1998 Owen Taylor <otaylor@gtk.org>
+
+ * gtk/gtkwindow.[ch] (gtk_widget_reset_rc_styles): New
+ function to reset the RC styles for a heirarchy
+
+ Clear the window background if necessary in
+ gtk_window_style_set.
+
+ * gtk/gtkrc.[ch]: New function gtk_rc_reparse_all() which
+ rereads all previously read RC files.
+
+ * gdk/gdkwindow.c gdk/gdk.h: New function gdk_window_get_toplevels().
+ (Should it just be called gdk_get_toplevels?)
+
+ * gtk/testgtk.c: New test to reload RC files.
+
Fri May 1 13:57:36 1998 Tim Janik <timj@gtk.org>
* gtk/gtkclist.h:
+Fri May 1 12:06:43 1998 Owen Taylor <otaylor@gtk.org>
+
+ * gtk/gtkwindow.[ch] (gtk_widget_reset_rc_styles): New
+ function to reset the RC styles for a heirarchy
+
+ Clear the window background if necessary in
+ gtk_window_style_set.
+
+ * gtk/gtkrc.[ch]: New function gtk_rc_reparse_all() which
+ rereads all previously read RC files.
+
+ * gdk/gdkwindow.c gdk/gdk.h: New function gdk_window_get_toplevels().
+ (Should it just be called gdk_get_toplevels?)
+
+ * gtk/testgtk.c: New test to reload RC files.
+
Fri May 1 13:57:36 1998 Tim Janik <timj@gtk.org>
* gtk/gtkclist.h:
+Fri May 1 12:06:43 1998 Owen Taylor <otaylor@gtk.org>
+
+ * gtk/gtkwindow.[ch] (gtk_widget_reset_rc_styles): New
+ function to reset the RC styles for a heirarchy
+
+ Clear the window background if necessary in
+ gtk_window_style_set.
+
+ * gtk/gtkrc.[ch]: New function gtk_rc_reparse_all() which
+ rereads all previously read RC files.
+
+ * gdk/gdkwindow.c gdk/gdk.h: New function gdk_window_get_toplevels().
+ (Should it just be called gdk_get_toplevels?)
+
+ * gtk/testgtk.c: New test to reload RC files.
+
Fri May 1 13:57:36 1998 Tim Janik <timj@gtk.org>
* gtk/gtkclist.h:
+Fri May 1 12:06:43 1998 Owen Taylor <otaylor@gtk.org>
+
+ * gtk/gtkwindow.[ch] (gtk_widget_reset_rc_styles): New
+ function to reset the RC styles for a heirarchy
+
+ Clear the window background if necessary in
+ gtk_window_style_set.
+
+ * gtk/gtkrc.[ch]: New function gtk_rc_reparse_all() which
+ rereads all previously read RC files.
+
+ * gdk/gdkwindow.c gdk/gdk.h: New function gdk_window_get_toplevels().
+ (Should it just be called gdk_get_toplevels?)
+
+ * gtk/testgtk.c: New test to reload RC files.
+
Fri May 1 13:57:36 1998 Tim Janik <timj@gtk.org>
* gtk/gtkclist.h:
+Fri May 1 12:06:43 1998 Owen Taylor <otaylor@gtk.org>
+
+ * gtk/gtkwindow.[ch] (gtk_widget_reset_rc_styles): New
+ function to reset the RC styles for a heirarchy
+
+ Clear the window background if necessary in
+ gtk_window_style_set.
+
+ * gtk/gtkrc.[ch]: New function gtk_rc_reparse_all() which
+ rereads all previously read RC files.
+
+ * gdk/gdkwindow.c gdk/gdk.h: New function gdk_window_get_toplevels().
+ (Should it just be called gdk_get_toplevels?)
+
+ * gtk/testgtk.c: New test to reload RC files.
+
Fri May 1 13:57:36 1998 Tim Janik <timj@gtk.org>
* gtk/gtkclist.h:
restore the default style otherwise.
This will override a previously set user style or rc style.
+gtk_widget_reset_rc_styles ()
+ Descends through a widget heirarchy and sets the rc style
+ on all widgets that don't have a user style set.
+
gtk_widget_restore_default_style ()
Reset the widget's style to the default style, this is only usefull if
the widgets default style had been saved by previous calls to
gtk_widget_set_style() or gtk_widget_set_rc_style().
gtk_widget_ensure_style ()
- Ensure taht the widget either has a user style set, or an rc lookup
+ Ensure that the widget either has a user style set, or an rc lookup
has been performed.
gtk_rc_get_style ()
that do not have a user style set.
gtk_style_copy ()
- This function can be used to copy a widgets style.
+ This function can be used to copy a widget's style.
The style can subsequntly be changed (e.g., by modifications to the
red/green/blue values of a certain color) and then be applied to the
widget via gtk_widget_set_style().
GdkWMDecoration decorations);
void gdk_window_set_functions (GdkWindow *window,
GdkWMFunction functions);
+GList * gdk_window_get_toplevels (void);
+
/* Cursors
*/
private->parent = parent;
- if (parent_private != &gdk_root_parent)
+ if (parent_private)
parent_private->children = g_list_prepend (parent_private->children, window);
private->xdisplay = parent_display;
gdk_window_set_mwm_hints (window, &hints);
}
+
+GList *
+gdk_window_get_toplevels (void)
+{
+ GList *new_list = NULL;
+ GList *tmp_list;
+
+ tmp_list = gdk_root_parent.children;
+ while (tmp_list)
+ {
+ new_list = g_list_prepend (new_list, tmp_list->data);
+ tmp_list = tmp_list->next;
+ }
+
+ return new_list;
+}
+
private->parent = parent;
- if (parent_private != &gdk_root_parent)
+ if (parent_private)
parent_private->children = g_list_prepend (parent_private->children, window);
private->xdisplay = parent_display;
gdk_window_set_mwm_hints (window, &hints);
}
+
+GList *
+gdk_window_get_toplevels (void)
+{
+ GList *new_list = NULL;
+ GList *tmp_list;
+
+ tmp_list = gdk_root_parent.children;
+ while (tmp_list)
+ {
+ new_list = g_list_prepend (new_list, tmp_list->data);
+ tmp_list = tmp_list->next;
+ }
+
+ return new_list;
+}
+
#define GTK_RC_MAX_PIXMAP_PATHS 128
static gchar *pixmap_path[GTK_RC_MAX_PIXMAP_PATHS];
+/* The files we have parsed, to reread later if necessary */
+GSList *rc_files;
void
gtk_rc_init ()
g_return_if_fail (filename != NULL);
+ rc_files = g_slist_append (rc_files, g_strdup (filename));
+
fd = open (filename, O_RDONLY);
if (fd < 0)
return;
close (fd);
}
+void
+gtk_rc_clear_hash_node (gpointer key,
+ gpointer data,
+ gpointer user_data)
+{
+ int i;
+ GtkRcStyle *rc_style = data;
+ GList *tmp_list;
+
+ g_free (rc_style->name);
+ g_free (rc_style->font_name);
+ g_free (rc_style->fontset_name);
+
+ for (i=0 ; i<5 ; i++)
+ g_free (rc_style->bg_pixmap_name[i]);
+
+ gtk_style_unref (rc_style->proto_style);
+
+ tmp_list = rc_style->styles;
+ while (tmp_list)
+ {
+ GtkRcNode *node = tmp_list->data;
+
+ gdk_colormap_unref (node->cmap);
+ gtk_style_unref (node->style);
+
+ g_free (node);
+ tmp_list = tmp_list->next;
+ }
+
+ g_free (rc_style);
+}
+
+void
+gtk_rc_reparse_all (void)
+{
+ GSList *tmp_list, *tmp_files;
+ GtkRcSet *rc_set;
+
+ /* Clear out all old rc_styles */
+
+ g_hash_table_foreach (rc_style_ht, gtk_rc_clear_hash_node, NULL);
+ g_hash_table_destroy (rc_style_ht);
+ rc_style_ht = NULL;
+
+ tmp_list = widget_sets;
+ while (tmp_list)
+ {
+ rc_set = (GtkRcSet *)tmp_list->data;
+ g_free (rc_set->set);
+ g_free (rc_set);
+
+ tmp_list = tmp_list->next;
+ }
+ g_slist_free (widget_sets);
+ widget_sets = NULL;
+
+ tmp_list = widget_class_sets;
+ while (tmp_list)
+ {
+ rc_set = (GtkRcSet *)tmp_list->data;
+ g_free (rc_set->set);
+ g_free (rc_set);
+
+ tmp_list = tmp_list->next;
+ }
+ g_slist_free (widget_class_sets);
+ widget_class_sets = NULL;
+
+ /* Now read the RC's again */
+
+ gtk_rc_init ();
+
+ tmp_files = rc_files;
+ rc_files = NULL;
+
+ tmp_list = tmp_files;
+ while (tmp_list)
+ {
+ gtk_rc_parse ((gchar *)tmp_list->data);
+ g_free (tmp_list->data);
+
+ tmp_list = tmp_list->next;
+ }
+ g_slist_free (tmp_files);
+}
+
GtkStyle*
gtk_rc_get_style (GtkWidget *widget)
{
void gtk_rc_init (void);
void gtk_rc_parse (const gchar *filename);
void gtk_rc_parse_string (const gchar *rc_string);
+void gtk_rc_reparse_all (void);
GtkStyle* gtk_rc_get_style (GtkWidget *widget);
void gtk_rc_add_widget_name_style (GtkStyle *style,
const gchar *pattern);
{
if (GTK_WIDGET_REALIZED (widget) &&
!GTK_WIDGET_NO_WINDOW (widget))
- gtk_style_set_background (widget->style, widget->window, widget->state);
+ {
+ gtk_style_set_background (widget->style, widget->window, widget->state);
+ if (GTK_WIDGET_DRAWABLE (widget))
+ gdk_window_clear (widget->window);
+ }
}
static void
NULL);
}
+void
+gtk_widget_reset_rc_styles (GtkWidget *widget)
+{
+ gtk_widget_set_style_recurse (widget, NULL);
+}
+
void
gtk_widget_set_default_style (GtkStyle *style)
{
GtkStyle* gtk_widget_get_style (GtkWidget *widget);
void gtk_widget_restore_default_style (GtkWidget *widget);
+/* Descend recursively and set rc-style on all widgets without user styles */
+void gtk_widget_reset_rc_styles (GtkWidget *widget);
+
/* Tell other Gtk applications to use the same default colors.
*/
void gtk_widget_propagate_default_style (void);
gtk_widget_destroy (window);
}
+void
+reload_rc_file (void)
+{
+ GList *toplevels;
+
+ gtk_rc_reparse_all ();
+
+ toplevels = gdk_window_get_toplevels();
+ while (toplevels)
+ {
+ GtkWidget *widget;
+ gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
+
+ if (widget)
+ gtk_widget_reset_rc_styles (widget);
+
+ toplevels = toplevels->next;
+ }
+
+ g_list_free (toplevels);
+}
+
+void
+create_rc_file ()
+{
+ static GtkWidget *window = NULL;
+ GtkWidget *button;
+
+ if (!window)
+ {
+ window = gtk_dialog_new ();
+
+ gtk_signal_connect (GTK_OBJECT (window), "destroy",
+ GTK_SIGNAL_FUNC(destroy_idle_test),
+ &window);
+
+ gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
+ gtk_container_border_width (GTK_CONTAINER (window), 0);
+
+ button = gtk_button_new_with_label ("Reload");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC(reload_rc_file), NULL);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
+ button, TRUE, TRUE, 0);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label ("Close");
+ gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC(gtk_widget_destroy),
+ GTK_OBJECT (window));
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
+ button, TRUE, TRUE, 0);
+ gtk_widget_show (button);
+
+ }
+
+ if (!GTK_WIDGET_VISIBLE (window))
+ gtk_widget_show (window);
+ else
+ gtk_widget_destroy (window);
+}
+
/*
* Test of recursive mainloop
*/
{ "progress bar", create_progress_bar },
{ "radio buttons", create_radio_buttons },
{ "range controls", create_range_controls },
+ { "rc file", create_rc_file },
{ "reparent", create_reparent },
{ "rulers", create_rulers },
{ "scrolled windows", create_scrolled_windows },
gtk_widget_destroy (window);
}
+void
+reload_rc_file (void)
+{
+ GList *toplevels;
+
+ gtk_rc_reparse_all ();
+
+ toplevels = gdk_window_get_toplevels();
+ while (toplevels)
+ {
+ GtkWidget *widget;
+ gdk_window_get_user_data (toplevels->data, (gpointer *)&widget);
+
+ if (widget)
+ gtk_widget_reset_rc_styles (widget);
+
+ toplevels = toplevels->next;
+ }
+
+ g_list_free (toplevels);
+}
+
+void
+create_rc_file ()
+{
+ static GtkWidget *window = NULL;
+ GtkWidget *button;
+
+ if (!window)
+ {
+ window = gtk_dialog_new ();
+
+ gtk_signal_connect (GTK_OBJECT (window), "destroy",
+ GTK_SIGNAL_FUNC(destroy_idle_test),
+ &window);
+
+ gtk_window_set_title (GTK_WINDOW (window), "Reload Rc file");
+ gtk_container_border_width (GTK_CONTAINER (window), 0);
+
+ button = gtk_button_new_with_label ("Reload");
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC(reload_rc_file), NULL);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
+ button, TRUE, TRUE, 0);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label ("Close");
+ gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC(gtk_widget_destroy),
+ GTK_OBJECT (window));
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area),
+ button, TRUE, TRUE, 0);
+ gtk_widget_show (button);
+
+ }
+
+ if (!GTK_WIDGET_VISIBLE (window))
+ gtk_widget_show (window);
+ else
+ gtk_widget_destroy (window);
+}
+
/*
* Test of recursive mainloop
*/
{ "progress bar", create_progress_bar },
{ "radio buttons", create_radio_buttons },
{ "range controls", create_range_controls },
+ { "rc file", create_rc_file },
{ "reparent", create_reparent },
{ "rulers", create_rulers },
{ "scrolled windows", create_scrolled_windows },