summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2005-08-22 16:38:46 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2005-08-22 16:38:46 +0000
commit97ec1cdf4f8d16906f43ef02c11ac13b96d22ad2 (patch)
tree3e38b4293c0f3fe5ef231e8c054689cf2f947b5c
parente337f0cf190deea7be5ef541320b1deb2f417e35 (diff)
downloadgdk-pixbuf-97ec1cdf4f8d16906f43ef02c11ac13b96d22ad2.tar.gz
Add a note regarding icon theme changes.
2005-08-22 Matthias Clasen <mclasen@redhat.com> * 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)
-rw-r--r--ChangeLog9
-rw-r--r--ChangeLog.pre-2-109
-rw-r--r--ChangeLog.pre-2-89
-rw-r--r--gtk/gtkiconcache.c18
-rw-r--r--gtk/gtkicontheme.c8
5 files changed, 52 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index cefda3d86..841ba490e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2005-08-22 Matthias Clasen <mclasen@redhat.com>
+ * 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 cefda3d86..841ba490e 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,5 +1,14 @@
2005-08-22 Matthias Clasen <mclasen@redhat.com>
+ * 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 cefda3d86..841ba490e 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,5 +1,14 @@
2005-08-22 Matthias Clasen <mclasen@redhat.com>
+ * 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 8faca64a6..2af6958de 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 accdba51a..360a5c7b4 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