summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2016-01-04 21:22:11 -0500
committerMatthias Clasen <mclasen@redhat.com>2016-01-04 21:32:19 -0500
commitf63e8edec68a158910f5f971b5f47cb9b51825cb (patch)
tree1cfd1704203bd8af8fd4879db749af94e8a0bc45 /gtk
parentb387a966ce0dd7e1815735e75494c73be0ea92de (diff)
downloadgtk+-f63e8edec68a158910f5f971b5f47cb9b51825cb.tar.gz
Make sure icons update on theme change
Gadgets don't connect to style-changed for widget nodes, and GtkImage uses its widget node for the icon helper. The visible effect of this is that symbolic icons don't change color when switching to the dark variant of Adwaita. Fix this by manually invalidating the icon helper.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkiconhelper.c2
-rw-r--r--gtk/gtkiconhelperprivate.h1
-rw-r--r--gtk/gtkimage.c10
3 files changed, 12 insertions, 1 deletions
diff --git a/gtk/gtkiconhelper.c b/gtk/gtkiconhelper.c
index 3671c5fc8c..73f105f130 100644
--- a/gtk/gtkiconhelper.c
+++ b/gtk/gtkiconhelper.c
@@ -48,7 +48,7 @@ struct _GtkIconHelperPrivate {
G_DEFINE_TYPE_WITH_PRIVATE (GtkIconHelper, gtk_icon_helper, GTK_TYPE_CSS_GADGET)
-static void
+void
gtk_icon_helper_invalidate (GtkIconHelper *self)
{
if (self->priv->rendered_surface != NULL)
diff --git a/gtk/gtkiconhelperprivate.h b/gtk/gtkiconhelperprivate.h
index 291fb40e16..f4bdcd4817 100644
--- a/gtk/gtkiconhelperprivate.h
+++ b/gtk/gtkiconhelperprivate.h
@@ -138,6 +138,7 @@ gboolean _gtk_icon_helper_get_force_scale_pixbuf (GtkIconHelper *self);
void _gtk_icon_helper_set_force_scale_pixbuf (GtkIconHelper *self,
gboolean force_scale);
+void gtk_icon_helper_invalidate (GtkIconHelper *self);
G_END_DECLS
diff --git a/gtk/gtkimage.c b/gtk/gtkimage.c
index 82f7d7cae9..703515b38c 100644
--- a/gtk/gtkimage.c
+++ b/gtk/gtkimage.c
@@ -1915,6 +1915,16 @@ gtk_image_style_updated (GtkWidget *widget)
{
GtkImage *image = GTK_IMAGE (widget);
GtkImagePrivate *priv = image->priv;
+ GtkStyleContext *context;
+
+ context = gtk_widget_get_style_context (widget);
+ if (context)
+ {
+ GtkCssStyleChange *change = gtk_style_context_get_change (context);
+
+ if (change && gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_ICON))
+ gtk_icon_helper_invalidate (priv->icon_helper);
+ }
GTK_WIDGET_CLASS (gtk_image_parent_class)->style_updated (widget);