diff --git a/ChangeLog b/ChangeLog index cefda3d868..841ba490e0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2005-08-22 Matthias Clasen + * gtk/gtkicontheme.c (gtk_icon_theme_load_icon): Add a note + regarding icon theme changes. + + * gtk/gtkiconcache.c (_gtk_icon_cache_get_icon): When returning + pixbufs which are backed by the mmapped memory of an icon cache, + increase the refcount of the icon cache, so that the memory is not + munmapped away underneath the pixbuf upon icon theme changes. + (#314170, Kjartan Maraas) + * docs/tools/Makefile.am (LDADDS): Add GTK_DEP_LIBS, in order to link against Xext. (#314062) diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index cefda3d868..841ba490e0 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,14 @@ 2005-08-22 Matthias Clasen + * gtk/gtkicontheme.c (gtk_icon_theme_load_icon): Add a note + regarding icon theme changes. + + * gtk/gtkiconcache.c (_gtk_icon_cache_get_icon): When returning + pixbufs which are backed by the mmapped memory of an icon cache, + increase the refcount of the icon cache, so that the memory is not + munmapped away underneath the pixbuf upon icon theme changes. + (#314170, Kjartan Maraas) + * docs/tools/Makefile.am (LDADDS): Add GTK_DEP_LIBS, in order to link against Xext. (#314062) diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index cefda3d868..841ba490e0 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,5 +1,14 @@ 2005-08-22 Matthias Clasen + * gtk/gtkicontheme.c (gtk_icon_theme_load_icon): Add a note + regarding icon theme changes. + + * gtk/gtkiconcache.c (_gtk_icon_cache_get_icon): When returning + pixbufs which are backed by the mmapped memory of an icon cache, + increase the refcount of the icon cache, so that the memory is not + munmapped away underneath the pixbuf upon icon theme changes. + (#314170, Kjartan Maraas) + * docs/tools/Makefile.am (LDADDS): Add GTK_DEP_LIBS, in order to link against Xext. (#314062) diff --git a/gtk/gtkiconcache.c b/gtk/gtkiconcache.c index 8faca64a64..2af6958de7 100644 --- a/gtk/gtkiconcache.c +++ b/gtk/gtkiconcache.c @@ -326,7 +326,16 @@ _gtk_icon_cache_has_icon (GtkIconCache *cache, return FALSE; } - + +static void +pixbuf_destroy_cb (guchar *pixels, + gpointer data) +{ + GtkIconCache *cache = data; + + _gtk_icon_cache_unref (cache); +} + GdkPixbuf * _gtk_icon_cache_get_icon (GtkIconCache *cache, const gchar *icon_name, @@ -371,6 +380,11 @@ _gtk_icon_cache_get_icon (GtkIconCache *cache, pixbuf = gdk_pixbuf_from_pixdata (&pixdata, FALSE, &error); + pixbuf = gdk_pixbuf_new_from_data (pixdata.pixel_data, GDK_COLORSPACE_RGB, + (pixdata.pixdata_type & GDK_PIXDATA_COLOR_TYPE_MASK) == GDK_PIXDATA_COLOR_TYPE_RGBA, + 8, pixdata.width, pixdata.height, pixdata.rowstride, + (GdkPixbufDestroyNotify)pixbuf_destroy_cb, + cache); if (!pixbuf) { GTK_NOTE (ICONTHEME, @@ -380,6 +394,8 @@ _gtk_icon_cache_get_icon (GtkIconCache *cache, return NULL; } + _gtk_icon_cache_ref (cache); + return pixbuf; } diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c index accdba51a3..360a5c7b44 100644 --- a/gtk/gtkicontheme.c +++ b/gtk/gtkicontheme.c @@ -1304,6 +1304,14 @@ gtk_icon_theme_error_quark (void) * and renders it into a pixbuf. This is a convenience function; * if more details about the icon are needed, use * gtk_icon_theme_lookup_icon() followed by gtk_icon_info_load_icon(). + * + * Note that you probably want to listen for icon theme changes and + * update the icon. This is usually done by connecting to the + * GtkWidget::style-set signal. If for some reason you do not want to + * update the icon when the icon theme changes, you should consider + * using gdk_pixbuf_copy() to make a private copy of the pixbuf + * returned by this function. Otherwise GTK+ may need to keep the old + * icon theme loaded, which would be a waste of memory. * * Return value: the rendered icon; this may be a newly created icon * or a new reference to an internal icon, so you must not modify