Backported fix from 2.8:

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

	Backported fix from 2.8:

	* 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)
This commit is contained in:
Matthias Clasen
2005-08-15 04:41:42 +00:00
committed by Matthias Clasen
parent a1ba159924
commit cd62896f35
4 changed files with 68 additions and 5 deletions

View File

@@ -1,3 +1,14 @@
2005-08-15 Matthias Clasen <mclasen@redhat.com>
Backported fix from 2.8:
* 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)
Fri Aug 5 16:54:19 2005 Søren Sandmann <sandmann@redhat.com>
* gtk/gtkmenutoolbutton.c

View File

@@ -1,3 +1,14 @@
2005-08-15 Matthias Clasen <mclasen@redhat.com>
Backported fix from 2.8:
* 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)
Fri Aug 5 16:54:19 2005 Søren Sandmann <sandmann@redhat.com>
* gtk/gtkmenutoolbutton.c

View File

@@ -1,3 +1,14 @@
2005-08-15 Matthias Clasen <mclasen@redhat.com>
Backported fix from 2.8:
* 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)
Fri Aug 5 16:54:19 2005 Søren Sandmann <sandmann@redhat.com>
* gtk/gtkmenutoolbutton.c

View File

@@ -96,6 +96,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
@@ -595,6 +597,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)
{
@@ -605,11 +631,9 @@ do_theme_change (GtkIconTheme *icon_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
@@ -643,6 +667,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);