Commit ff95eb05 authored by Owen Taylor's avatar Owen Taylor Committed by Owen Taylor

Handle reparsing any strings if the theme changes. (#69465)

Fri Feb  1 14:50:36 2002  Owen Taylor  <otaylor@redhat.com>

        * gtk/gtkrc.c (gtk_rc_parse_string): Handle reparsing
        any strings if the theme changes. (#69465)

        * tests/testgtk.c: Add a test for gtk_rc_parse_string().
parent dcd6d764
Fri Feb 1 14:50:36 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_parse_string): Handle reparsing
any strings if the theme changes. (#69465)
* tests/testgtk.c: Add a test for gtk_rc_parse_string().
Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org> Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to * gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to
......
Fri Feb 1 14:50:36 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_parse_string): Handle reparsing
any strings if the theme changes. (#69465)
* tests/testgtk.c: Add a test for gtk_rc_parse_string().
Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org> Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to * gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to
......
Fri Feb 1 14:50:36 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_parse_string): Handle reparsing
any strings if the theme changes. (#69465)
* tests/testgtk.c: Add a test for gtk_rc_parse_string().
Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org> Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to * gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to
......
Fri Feb 1 14:50:36 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_parse_string): Handle reparsing
any strings if the theme changes. (#69465)
* tests/testgtk.c: Add a test for gtk_rc_parse_string().
Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org> Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to * gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to
......
Fri Feb 1 14:50:36 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_parse_string): Handle reparsing
any strings if the theme changes. (#69465)
* tests/testgtk.c: Add a test for gtk_rc_parse_string().
Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org> Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to * gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to
......
Fri Feb 1 14:50:36 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_parse_string): Handle reparsing
any strings if the theme changes. (#69465)
* tests/testgtk.c: Add a test for gtk_rc_parse_string().
Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org> Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to * gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to
......
Fri Feb 1 14:50:36 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkrc.c (gtk_rc_parse_string): Handle reparsing
any strings if the theme changes. (#69465)
* tests/testgtk.c: Add a test for gtk_rc_parse_string().
Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org> Fri Feb 1 20:50:29 2002 Kristian Rietveld <kris@gtk.org>
* gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to * gtk/gtktreeview.c (gtk_tree_view_dy_to_top_row): set tree to
......
...@@ -74,6 +74,7 @@ struct _GtkRcSet ...@@ -74,6 +74,7 @@ struct _GtkRcSet
struct _GtkRcFile struct _GtkRcFile
{ {
gboolean is_string; /* If TRUE, name is a string to parse with gtk_rc_parse_string() */
time_t mtime; time_t mtime;
gchar *name; gchar *name;
gchar *canonical_name; gchar *canonical_name;
...@@ -784,10 +785,24 @@ _gtk_rc_init (void) ...@@ -784,10 +785,24 @@ _gtk_rc_init (void)
void void
gtk_rc_parse_string (const gchar *rc_string) gtk_rc_parse_string (const gchar *rc_string)
{ {
GtkRcFile *rc_file;
/* This is wrong; once we have meaingful RC context, we need to parse the
* string in all contexts, and in fact, in future contexts as well.
*/
GtkRcContext *context = gtk_rc_context_get (gtk_settings_get_default ());
g_return_if_fail (rc_string != NULL); g_return_if_fail (rc_string != NULL);
gtk_rc_parse_any (gtk_rc_context_get (gtk_settings_get_default ()), rc_file = g_new (GtkRcFile, 1);
"-", -1, rc_string); /* FIXME */ rc_file->is_string = TRUE;
rc_file->name = g_strdup (rc_string);
rc_file->canonical_name = NULL;
rc_file->mtime = 0;
rc_file->reload = TRUE;
context->rc_files = g_slist_append (context->rc_files, rc_file);
gtk_rc_parse_any (context, "-", -1, rc_string);
} }
static void static void
...@@ -819,6 +834,7 @@ gtk_rc_parse_file (GtkRcContext *context, ...@@ -819,6 +834,7 @@ gtk_rc_parse_file (GtkRcContext *context,
if (!tmp_list) if (!tmp_list)
{ {
rc_file = g_new (GtkRcFile, 1); rc_file = g_new (GtkRcFile, 1);
rc_file->is_string = FALSE;
rc_file->name = g_strdup (filename); rc_file->name = g_strdup (filename);
rc_file->canonical_name = NULL; rc_file->canonical_name = NULL;
rc_file->mtime = 0; rc_file->mtime = 0;
...@@ -1325,12 +1341,15 @@ gtk_rc_reparse_all_for_settings (GtkSettings *settings, ...@@ -1325,12 +1341,15 @@ gtk_rc_reparse_all_for_settings (GtkSettings *settings,
while (tmp_list) while (tmp_list)
{ {
rc_file = tmp_list->data; rc_file = tmp_list->data;
if (!lstat (rc_file->name, &statbuf) && if (!rc_file->is_string)
(statbuf.st_mtime > rc_file->mtime))
{ {
mtime_modified = TRUE; if (!lstat (rc_file->name, &statbuf) &&
break; (statbuf.st_mtime > rc_file->mtime))
{
mtime_modified = TRUE;
break;
}
} }
tmp_list = tmp_list->next; tmp_list = tmp_list->next;
...@@ -1354,7 +1373,12 @@ gtk_rc_reparse_all_for_settings (GtkSettings *settings, ...@@ -1354,7 +1373,12 @@ gtk_rc_reparse_all_for_settings (GtkSettings *settings,
{ {
rc_file = tmp_list->data; rc_file = tmp_list->data;
if (rc_file->reload) if (rc_file->reload)
gtk_rc_parse_file (context, rc_file->name, GTK_PATH_PRIO_RC, TRUE); {
if (rc_file->is_string)
gtk_rc_parse_string (rc_file->name);
else
gtk_rc_parse_file (context, rc_file->name, GTK_PATH_PRIO_RC, TRUE);
}
if (rc_file->canonical_name != rc_file->name) if (rc_file->canonical_name != rc_file->name)
g_free (rc_file->canonical_name); g_free (rc_file->canonical_name);
......
...@@ -11033,6 +11033,7 @@ create_main_window (void) ...@@ -11033,6 +11033,7 @@ create_main_window (void)
label = gtk_label_new (buffer); label = gtk_label_new (buffer);
gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);
gtk_widget_set_name (label, "testgtk-version-label");
scrolled_window = gtk_scrolled_window_new (NULL, NULL); scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10);
...@@ -11263,7 +11264,17 @@ main (int argc, char *argv[]) ...@@ -11263,7 +11264,17 @@ main (int argc, char *argv[])
"debug_msg", "debug_msg",
1, 1,
GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test"); GTK_TYPE_STRING, "GtkWidgetClass <ctrl><release>9 test");
/* We use gtk_rc_parse_string() here so we can make sure it works across theme
* changes
*/
gtk_rc_parse_string ("style \"testgtk-version-label\" { "
" fg[NORMAL] = \"#ff0000\"\n"
" font = \"Sans 18\"\n"
"}\n"
"widget \"*.testgtk-version-label\" style \"testgtk-version-label\"");
create_main_window (); create_main_window ();
gtk_main (); gtk_main ();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment