- don't cache icon pixbufs in recentmanager code, Patch by Emmanuele Bassi
<ebassi@gnome.org>, gnome bug 426987
This commit is contained in:
parent
c080cadd3b
commit
e1d840ffa9
148
gtk+-2.10.13-dont-cache-icon-pixbufs.patch
Normal file
148
gtk+-2.10.13-dont-cache-icon-pixbufs.patch
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
--- gtk-2.10.13/gtk/gtkrecentmanager.c (revision 18287)
|
||||||
|
+++ gtk-2.10.13/gtk/gtkrecentmanager.c (revision 18288)
|
||||||
|
@@ -1847,106 +1847,56 @@
|
||||||
|
return g_strdup (name);
|
||||||
|
}
|
||||||
|
|
||||||
|
-typedef struct
|
||||||
|
-{
|
||||||
|
- gint size;
|
||||||
|
- GdkPixbuf *pixbuf;
|
||||||
|
-} IconCacheElement;
|
||||||
|
-
|
||||||
|
-static void
|
||||||
|
-icon_cache_element_free (IconCacheElement *element)
|
||||||
|
-{
|
||||||
|
- if (element->pixbuf)
|
||||||
|
- g_object_unref (element->pixbuf);
|
||||||
|
- g_free (element);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-static void
|
||||||
|
-icon_theme_changed (GtkIconTheme *icon_theme)
|
||||||
|
-{
|
||||||
|
- GHashTable *cache;
|
||||||
|
-
|
||||||
|
- /* Difference from the initial creation is that we don't
|
||||||
|
- * reconnect the signal
|
||||||
|
- */
|
||||||
|
- cache = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||||
|
- (GDestroyNotify)g_free,
|
||||||
|
- (GDestroyNotify)icon_cache_element_free);
|
||||||
|
- g_object_set_data_full (G_OBJECT (icon_theme), "gtk-recent-icon-cache",
|
||||||
|
- cache, (GDestroyNotify)g_hash_table_destroy);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-/* TODO: use the GtkFileChooser's icon cache instead of our own to reduce
|
||||||
|
- * the memory footprint
|
||||||
|
- */
|
||||||
|
static GdkPixbuf *
|
||||||
|
-get_cached_icon (const gchar *name,
|
||||||
|
- gint pixel_size)
|
||||||
|
-{
|
||||||
|
- GtkIconTheme *icon_theme;
|
||||||
|
- GHashTable *cache;
|
||||||
|
- IconCacheElement *element;
|
||||||
|
-
|
||||||
|
- icon_theme = gtk_icon_theme_get_default ();
|
||||||
|
- cache = g_object_get_data (G_OBJECT (icon_theme), "gtk-recent-icon-cache");
|
||||||
|
-
|
||||||
|
- if (!cache)
|
||||||
|
- {
|
||||||
|
- cache = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||||
|
- (GDestroyNotify)g_free,
|
||||||
|
- (GDestroyNotify)icon_cache_element_free);
|
||||||
|
-
|
||||||
|
- g_object_set_data_full (G_OBJECT (icon_theme), "gtk-recent-icon-cache",
|
||||||
|
- cache, (GDestroyNotify)g_hash_table_destroy);
|
||||||
|
- g_signal_connect (icon_theme, "changed",
|
||||||
|
- G_CALLBACK (icon_theme_changed), NULL);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- element = g_hash_table_lookup (cache, name);
|
||||||
|
- if (!element)
|
||||||
|
- {
|
||||||
|
- element = g_new0 (IconCacheElement, 1);
|
||||||
|
- g_hash_table_insert (cache, g_strdup (name), element);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (element->size != pixel_size)
|
||||||
|
- {
|
||||||
|
- if (element->pixbuf)
|
||||||
|
- g_object_unref (element->pixbuf);
|
||||||
|
-
|
||||||
|
- element->size = pixel_size;
|
||||||
|
- element->pixbuf = gtk_icon_theme_load_icon (icon_theme, name,
|
||||||
|
- pixel_size, 0, NULL);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- return element->pixbuf ? g_object_ref (element->pixbuf) : NULL;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-static GdkPixbuf *
|
||||||
|
get_icon_for_mime_type (const char *mime_type,
|
||||||
|
gint pixel_size)
|
||||||
|
{
|
||||||
|
+ GtkIconTheme *icon_theme;
|
||||||
|
const char *separator;
|
||||||
|
GString *icon_name;
|
||||||
|
GdkPixbuf *pixbuf;
|
||||||
|
|
||||||
|
separator = strchr (mime_type, '/');
|
||||||
|
if (!separator)
|
||||||
|
- return NULL; /* maybe we should return a GError with "invalid MIME-type" */
|
||||||
|
+ return NULL;
|
||||||
|
|
||||||
|
+ icon_theme = gtk_icon_theme_get_default ();
|
||||||
|
+
|
||||||
|
+ /* try with the three icon name variants for MIME types */
|
||||||
|
+
|
||||||
|
+ /* canonicalize MIME type: foo/x-bar -> foo-x-bar */
|
||||||
|
+ icon_name = g_string_new (NULL);
|
||||||
|
+ g_string_append_len (icon_name, mime_type, separator - mime_type);
|
||||||
|
+ g_string_append_c (icon_name, '-');
|
||||||
|
+ g_string_append (icon_name, separator + 1);
|
||||||
|
+ pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name->str,
|
||||||
|
+ pixel_size,
|
||||||
|
+ 0,
|
||||||
|
+ NULL);
|
||||||
|
+ g_string_free (icon_name, TRUE);
|
||||||
|
+ if (pixbuf)
|
||||||
|
+ return pixbuf;
|
||||||
|
+
|
||||||
|
+ /* canonicalize MIME type, and prepend "gnome-mime-" */
|
||||||
|
icon_name = g_string_new ("gnome-mime-");
|
||||||
|
g_string_append_len (icon_name, mime_type, separator - mime_type);
|
||||||
|
g_string_append_c (icon_name, '-');
|
||||||
|
g_string_append (icon_name, separator + 1);
|
||||||
|
- pixbuf = get_cached_icon (icon_name->str, pixel_size);
|
||||||
|
+ pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name->str,
|
||||||
|
+ pixel_size,
|
||||||
|
+ 0,
|
||||||
|
+ NULL);
|
||||||
|
g_string_free (icon_name, TRUE);
|
||||||
|
if (pixbuf)
|
||||||
|
return pixbuf;
|
||||||
|
|
||||||
|
+ /* try the MIME family icon */
|
||||||
|
icon_name = g_string_new ("gnome-mime-");
|
||||||
|
g_string_append_len (icon_name, mime_type, separator - mime_type);
|
||||||
|
- pixbuf = get_cached_icon (icon_name->str, pixel_size);
|
||||||
|
+ pixbuf = gtk_icon_theme_load_icon (icon_theme, icon_name->str,
|
||||||
|
+ pixel_size,
|
||||||
|
+ 0,
|
||||||
|
+ NULL);
|
||||||
|
g_string_free (icon_name, TRUE);
|
||||||
|
|
||||||
|
return pixbuf;
|
||||||
|
@@ -1995,7 +1945,8 @@
|
||||||
|
/* this function should never fail */
|
||||||
|
if (!retval)
|
||||||
|
{
|
||||||
|
- if (info->mime_type && strcmp (info->mime_type, "x-directory/normal") == 0)
|
||||||
|
+ if (info->mime_type &&
|
||||||
|
+ strcmp (info->mime_type, "x-directory/normal") == 0)
|
||||||
|
retval = get_icon_fallback (GTK_STOCK_DIRECTORY, size);
|
||||||
|
else
|
||||||
|
retval = get_icon_fallback (GTK_STOCK_FILE, size);
|
12
gtk2.spec
12
gtk2.spec
@ -16,7 +16,7 @@
|
|||||||
Summary: The GIMP ToolKit (GTK+), a library for creating GUIs for X
|
Summary: The GIMP ToolKit (GTK+), a library for creating GUIs for X
|
||||||
Name: gtk2
|
Name: gtk2
|
||||||
Version: %{base_version}
|
Version: %{base_version}
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
License: LGPL
|
License: LGPL
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
Source: http://download.gnome.org/sources/gtk+/2.11/gtk+-%{version}.tar.bz2
|
Source: http://download.gnome.org/sources/gtk+/2.11/gtk+-%{version}.tar.bz2
|
||||||
@ -30,6 +30,10 @@ Patch1: gtk+-2.11.1-set-invisible-char-to-bullet.patch
|
|||||||
# use fam for recent-files
|
# use fam for recent-files
|
||||||
#Patch2: gtk+-2.10.3-fam.patch
|
#Patch2: gtk+-2.10.3-fam.patch
|
||||||
|
|
||||||
|
# http://bugzilla.gnome.org/show_bug.cgi?id=426987
|
||||||
|
# http://bugzilla.gnome.org/show_bug.cgi?id=446183
|
||||||
|
Patch3: gtk+-2.10.13-dont-cache-icon-pixbufs.patch
|
||||||
|
|
||||||
BuildRequires: atk-devel >= %{atk_version}
|
BuildRequires: atk-devel >= %{atk_version}
|
||||||
BuildRequires: pango-devel >= %{pango_version}
|
BuildRequires: pango-devel >= %{pango_version}
|
||||||
BuildRequires: glib2-devel >= %{glib2_version}
|
BuildRequires: glib2-devel >= %{glib2_version}
|
||||||
@ -115,6 +119,7 @@ docs for the GTK+ widget toolkit.
|
|||||||
%patch0 -p1 -b .lib64
|
%patch0 -p1 -b .lib64
|
||||||
%patch1 -p1 -b .set-invisible-char-to-bullet
|
%patch1 -p1 -b .set-invisible-char-to-bullet
|
||||||
#%patch2 -p1 -b .fam
|
#%patch2 -p1 -b .fam
|
||||||
|
%patch3 -p1 -b .dont-cache-icon-pixbufs
|
||||||
|
|
||||||
for i in config.guess config.sub ; do
|
for i in config.guess config.sub ; do
|
||||||
test -f %{_datadir}/libtool/$i && cp %{_datadir}/libtool/$i .
|
test -f %{_datadir}/libtool/$i && cp %{_datadir}/libtool/$i .
|
||||||
@ -282,6 +287,11 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%doc tmpdocs/examples
|
%doc tmpdocs/examples
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sun Jul 8 2007 Ray Strode <rstrode@redhat.com> - 2.11.5-2
|
||||||
|
- don't cache icon pixbufs in recentmanager code,
|
||||||
|
Patch by Emmanuele Bassi <ebassi@gnome.org>,
|
||||||
|
gnome bug 426987
|
||||||
|
|
||||||
* Mon Jul 2 2007 Matthias Clasen <mclasen@redhat.com> - 2.11.5-1
|
* Mon Jul 2 2007 Matthias Clasen <mclasen@redhat.com> - 2.11.5-1
|
||||||
- Update to 2.11.5
|
- Update to 2.11.5
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user