diff --git a/thunar/thunar-icon-renderer.c b/thunar/thunar-icon-renderer.c index 42b62f7fd5c69d1edb05537d549e8a71c048d32b..5338ef46cdc191394c579d3a64e7108e2b73e6d0 100644 --- a/thunar/thunar-icon-renderer.c +++ b/thunar/thunar-icon-renderer.c @@ -298,6 +298,30 @@ thunar_icon_renderer_get_preferred_height (GtkCellRenderer *renderer, +static void +thunar_icon_renderer_color_insensitive (cairo_t *cr, + GtkWidget *widget) +{ + cairo_pattern_t *source; + GdkRGBA *color; + GtkStyleContext *context = gtk_widget_get_style_context (widget); + + cairo_save (cr); + + source = cairo_pattern_reference (cairo_get_source (cr)); + gtk_style_context_get (context, GTK_STATE_FLAG_INSENSITIVE, GTK_STYLE_PROPERTY_COLOR, &color, NULL); + gdk_cairo_set_source_rgba (cr, color); + gdk_rgba_free (color); + cairo_set_operator (cr, CAIRO_OPERATOR_MULTIPLY); + + cairo_mask (cr, source); + + cairo_pattern_destroy (source); + cairo_restore (cr); +} + + + static void thunar_icon_renderer_color_selected (cairo_t *cr, GtkWidget *widget) @@ -356,7 +380,6 @@ thunar_icon_renderer_render (GtkCellRenderer *renderer, ThunarFileIconState icon_state; ThunarIconRenderer *icon_renderer = THUNAR_ICON_RENDERER (renderer); ThunarIconFactory *icon_factory; - GtkIconSource *icon_source; GtkIconTheme *icon_theme; GdkRectangle emblem_area; GdkRectangle icon_area; @@ -449,23 +472,8 @@ thunar_icon_renderer_render (GtkCellRenderer *renderer, g_object_unref (G_OBJECT (clipboard)); /* check if we should render an insensitive icon */ - if (G_UNLIKELY (gtk_widget_get_state (widget) == GTK_STATE_INSENSITIVE || !gtk_cell_renderer_get_sensitive (renderer))) - { - /* allocate an icon source */ - icon_source = gtk_icon_source_new (); - gtk_icon_source_set_pixbuf (icon_source, icon); - gtk_icon_source_set_size_wildcarded (icon_source, FALSE); - gtk_icon_source_set_size (icon_source, GTK_ICON_SIZE_SMALL_TOOLBAR); - - /* render the insensitive icon */ - temp = gtk_style_render_icon (gtk_widget_get_style (widget), icon_source, gtk_widget_get_direction (widget), - GTK_STATE_INSENSITIVE, -1, widget, "gtkcellrendererpixbuf"); - g_object_unref (G_OBJECT (icon)); - icon = temp; - - /* release the icon source */ - gtk_icon_source_free (icon_source); - } + if (G_UNLIKELY (gtk_widget_get_state_flags (widget) == GTK_STATE_FLAG_INSENSITIVE || !gtk_cell_renderer_get_sensitive (renderer))) + thunar_icon_renderer_color_insensitive(cr,widget); /* render the invalid parts of the icon */ thunar_gdk_cairo_set_source_pixbuf (cr, icon, icon_area.x, icon_area.y);