Author: colossus
Date: 2007-09-25 13:25:56 +0000 (Tue, 25 Sep 2007)
New Revision: 26110
Modified:
xarchiver/trunk/src/archive.c
xarchiver/trunk/src/deb.c
xarchiver/trunk/src/interface.c
xarchiver/trunk/src/mime.c
xarchiver/trunk/src/mime.h
xarchiver/trunk/src/support.h
Log:
Partially coded icon cache for speeding up when loading big archives.
Modified: xarchiver/trunk/src/archive.c
===================================================================
--- xarchiver/trunk/src/archive.c 2007-09-25 09:51:34 UTC (rev 26109)
+++ xarchiver/trunk/src/archive.c 2007-09-25 13:25:56 UTC (rev 26110)
@@ -496,6 +496,7 @@
void xa_update_window_with_archive_entries (XArchive *archive,gchar *path)
{
+ GdkPixbuf *pixbuf = NULL;
GSList *s = NULL;
XEntry *entry = NULL;
const char *icon_name;
@@ -525,9 +526,10 @@
else if (entry->is_encrypted)
icon_name = "gtk-dialog-authentication";
else
- icon_name =
xa_get_stock_mime_icon(entry->filename);
+ pixbuf =
xa_get_pixbuf_icon_from_cache(entry->filename);
+ //icon_name =
xa_get_stock_mime_icon(entry->filename);
- gtk_list_store_set
(archive->liststore,&iter,0,icon_name,1,entry->filename,-1);
+ gtk_list_store_set
(archive->liststore,&iter,0,pixbuf,1,entry->filename,-1);
for (i = 0; i < archive->nc; i++)
{
@@ -606,9 +608,10 @@
icon_name = "gtk-dialog-authentication";
else
- icon_name = xa_get_stock_mime_icon(entry->filename);
+ pixbuf = xa_get_pixbuf_icon_from_cache(entry->filename);
+ //icon_name = xa_get_stock_mime_icon(entry->filename);
- gtk_list_store_set
(archive->liststore,&iter,0,icon_name,1,entry->filename,-1);
+ gtk_list_store_set
(archive->liststore,&iter,0,pixbuf,1,entry->filename,-1);
for (i = 0; i < archive->nc; i++)
{
Modified: xarchiver/trunk/src/deb.c
===================================================================
--- xarchiver/trunk/src/deb.c 2007-09-25 09:51:34 UTC (rev 26109)
+++ xarchiver/trunk/src/deb.c 2007-09-25 13:25:56 UTC (rev 26110)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006 Giuseppe Torelli - <[EMAIL PROTECTED]>
+ * Copyright (C) 2007 Giuseppe Torelli - <[EMAIL PROTECTED]>
* Copyright (C) 2006 Lukasz 'Sil2100' Zemczak - <[EMAIL PROTECTED]>
*
* This program is free software; you can redistribute it and/or modify
Modified: xarchiver/trunk/src/interface.c
===================================================================
--- xarchiver/trunk/src/interface.c 2007-09-25 09:51:34 UTC (rev 26109)
+++ xarchiver/trunk/src/interface.c 2007-09-25 13:25:56 UTC (rev 26110)
@@ -50,7 +50,6 @@
void xa_create_mainwindow (GtkWidget *MainWindow,gboolean show_location)
{
GdkPixbuf *icon;
- GtkIconTheme *icon_theme;
tooltips = gtk_tooltips_new ();
accel_group = gtk_accel_group_new ();
Modified: xarchiver/trunk/src/mime.c
===================================================================
--- xarchiver/trunk/src/mime.c 2007-09-25 09:51:34 UTC (rev 26109)
+++ xarchiver/trunk/src/mime.c 2007-09-25 13:25:56 UTC (rev 26110)
@@ -18,8 +18,9 @@
*/
#include "mime.h"
-#include <string.h>
+static GSList *icon_cache = NULL;
+
const char *xa_get_stock_mime_icon(char *filename)
{
const char *mime;
@@ -63,3 +64,43 @@
return icon_name;
}
+GdkPixbuf *xa_get_pixbuf_icon_from_cache(gchar *filename)
+{
+ pixbuf_cache *tie;
+ const gchar *icon_name;
+ GSList *found;
+ GdkPixbuf *pixbuf;
+
+ icon_name = xa_get_stock_mime_icon(filename);
+ found =
g_slist_find_custom(icon_cache,icon_name,(GCompareFunc)xa_icon_name_compare_func);
+
+ if (found)
+ return found->data;
+ else
+ {
+ pixbuf =
gtk_icon_theme_load_icon(icon_theme,"package",48,GTK_ICON_LOOKUP_FORCE_SVG,NULL);
+ if (pixbuf)
+ {
+ tie = g_new0(pixbuf_cache,1);
+ if (tie)
+ {
+ tie->icon_name = icon_name;
+ tie->pixbuf = pixbuf;
+ icon_cache = g_slist_prepend(icon_cache,tie);
+ }
+ }
+ }
+ return pixbuf;
+}
+
+gint xa_icon_name_compare_func(gconstpointer a, gconstpointer b)
+{
+ struct _pixbuf_cache *_a = (struct _pixbuf_cache *)a;
+ struct _pixbuf_cache *_b = (struct _pixbuf_cache *)b;
+ return strcmp(_a->icon_name, _b->icon_name);
+}
+
+void xa_free_pixbuf_cache()
+{
+ g_slist_foreach(icon_cache,(GFunc) g_free,NULL);
+}
Modified: xarchiver/trunk/src/mime.h
===================================================================
--- xarchiver/trunk/src/mime.h 2007-09-25 09:51:34 UTC (rev 26109)
+++ xarchiver/trunk/src/mime.h 2007-09-25 13:25:56 UTC (rev 26110)
@@ -21,6 +21,21 @@
#define __XARCHIVER_MIME_H__
#include "xdgmime/xdgmime.h"
+#include "support.h"
+#include <gtk/gtk.h>
+#include <gdk/gdk.h>
+#include <string.h>
+typedef struct _pixbuf_cache pixbuf_cache;
+
+struct _pixbuf_cache
+{
+ const gchar *icon_name;
+ GdkPixbuf *pixbuf;
+};
+
const char *xa_get_stock_mime_icon(char *filename);
+GdkPixbuf *xa_get_pixbuf_icon_from_cache(gchar *filename);
+gint xa_icon_name_compare_func(gconstpointer a, gconstpointer b);
+void xa_free_pixbuf_cache();
#endif
Modified: xarchiver/trunk/src/support.h
===================================================================
--- xarchiver/trunk/src/support.h 2007-09-25 09:51:34 UTC (rev 26109)
+++ xarchiver/trunk/src/support.h 2007-09-25 13:25:56 UTC (rev 26110)
@@ -24,6 +24,7 @@
#endif
#include <gtk/gtk.h>
+GtkIconTheme *icon_theme;
/*
* Standard gettext macros.
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits