Commit 1f61c614 authored by Matthias Clasen's avatar Matthias Clasen Committed by Matthias Clasen

When changing the icon theme, defer the resetting of rc styles to an idle,

2005-08-12  Matthias Clasen  <mclasen@redhat.com>

        * gtk/gtkicontheme.c: When changing the icon theme, defer
        the resetting of rc styles to an idle, so that it does
        not happen e.g during expose handling (which is problematic,
        since some widgets, like the toolbar, are changing the
        hierarchy in response to style changes).  (#300539, reported
        by many people, analyzed by Owen Taylor)
parent e44a9c0c
2005-08-12 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkicontheme.c: When changing the icon theme, defer
the resetting of rc styles to an idle, so that it does
not happen e.g during expose handling (which is problematic,
since some widgets, like the toolbar, are changing the
hierarchy in response to style changes). (#300539, reported
by many people, analyzed by Owen Taylor)
2005-08-12 Owen Taylor <otaylor@redhat.com>
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_set_back_pixmap)
......
2005-08-12 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkicontheme.c: When changing the icon theme, defer
the resetting of rc styles to an idle, so that it does
not happen e.g during expose handling (which is problematic,
since some widgets, like the toolbar, are changing the
hierarchy in response to style changes). (#300539, reported
by many people, analyzed by Owen Taylor)
2005-08-12 Owen Taylor <otaylor@redhat.com>
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_set_back_pixmap)
......
2005-08-12 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkicontheme.c: When changing the icon theme, defer
the resetting of rc styles to an idle, so that it does
not happen e.g during expose handling (which is problematic,
since some widgets, like the toolbar, are changing the
hierarchy in response to style changes). (#300539, reported
by many people, analyzed by Owen Taylor)
2005-08-12 Owen Taylor <otaylor@redhat.com>
* gdk/linux-fb/gdkwindow-fb.c (gdk_window_set_back_pixmap)
......
......@@ -94,6 +94,8 @@ struct _GtkIconThemePrivate
/* time when we last stat:ed for theme changes */
long last_stat_time;
GList *dir_mtimes;
gulong reset_styles_idle;
};
struct _GtkIconInfo
......@@ -585,6 +587,30 @@ free_dir_mtime (IconThemeDirMtime *dir_mtime)
}
static gboolean
reset_styles_idle (gpointer user_data)
{
GtkIconTheme *icon_theme;
GtkIconThemePrivate *priv;
GDK_THREADS_ENTER ();
icon_theme = GTK_ICON_THEME (user_data);
priv = icon_theme->priv;
if (priv->screen && priv->is_screen_singleton)
{
GtkSettings *settings = gtk_settings_get_for_screen (priv->screen);
gtk_rc_reset_styles (settings);
}
priv->reset_styles_idle = 0;
GDK_THREADS_LEAVE ();
return FALSE;
}
static void
do_theme_change (GtkIconTheme *icon_theme)
{
......@@ -594,12 +620,10 @@ do_theme_change (GtkIconTheme *icon_theme)
g_print ("change to icon theme \"%s\"\n", priv->current_theme));
blow_themes (icon_theme);
g_signal_emit (icon_theme, signal_changed, 0);
if (priv->screen && priv->is_screen_singleton)
{
GtkSettings *settings = gtk_settings_get_for_screen (priv->screen);
gtk_rc_reset_styles (settings);
}
if (!priv->reset_styles_idle)
priv->reset_styles_idle =
g_idle_add (reset_styles_idle, icon_theme);
}
static void
......@@ -633,6 +657,12 @@ gtk_icon_theme_finalize (GObject *object)
icon_theme = GTK_ICON_THEME (object);
priv = icon_theme->priv;
if (priv->reset_styles_idle)
{
g_source_remove (priv->reset_styles_idle);
priv->reset_styles_idle = 0;
}
unset_screen (icon_theme);
g_free (priv->current_theme);
......
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