st/texture-cache: Monitor GtkIconTheme changes

The texture cache, right now, only monitors for
complete theme changes. If the contents of the
icon theme change, however, the texture cache
isn't properly invalidated.

This manifests itself as a randomly reproducible
bug when installing an app; the app icon may be
the fallback forever, or as long as something else
updates the icon theme.

Watch for the GtkIconTheme:changed signal, and
evict the texture cache when the theme changes.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/661
This commit is contained in:
Georges Basile Stavracas Neto 2019-08-01 20:54:42 -03:00
parent 12b8fb15b1
commit 06a7ab871f
No known key found for this signature in database
GPG Key ID: 886C17EE170D1385

View File

@ -150,6 +150,14 @@ on_icon_theme_changed (StSettings *settings,
g_signal_emit (cache, signals[ICON_THEME_CHANGED], 0); g_signal_emit (cache, signals[ICON_THEME_CHANGED], 0);
} }
static void
on_gtk_icon_theme_changed (GtkIconTheme *icon_theme,
StTextureCache *self)
{
st_texture_cache_evict_icons (self);
g_signal_emit (self, signals[ICON_THEME_CHANGED], 0);
}
static void static void
st_texture_cache_init (StTextureCache *self) st_texture_cache_init (StTextureCache *self)
{ {
@ -160,6 +168,8 @@ st_texture_cache_init (StTextureCache *self)
self->priv->icon_theme = gtk_icon_theme_new (); self->priv->icon_theme = gtk_icon_theme_new ();
gtk_icon_theme_add_resource_path (self->priv->icon_theme, gtk_icon_theme_add_resource_path (self->priv->icon_theme,
"/org/gnome/shell/theme/icons"); "/org/gnome/shell/theme/icons");
g_signal_connect (self->priv->icon_theme, "changed",
G_CALLBACK (on_gtk_icon_theme_changed), self);
settings = st_settings_get (); settings = st_settings_get ();
g_signal_connect (settings, "notify::gtk-icon-theme", g_signal_connect (settings, "notify::gtk-icon-theme",