[Xfce4-commits] r26110 - xarchiver/trunk/src

Giuseppe Torelli colossus at xfce.org
Tue Sep 25 15:25:56 CEST 2007


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 - <colossus73 at gmail.com>
+ *  Copyright (C) 2007 Giuseppe Torelli - <colossus73 at gmail.com>
  *  Copyright (C) 2006 Lukasz 'Sil2100' Zemczak - <sil2100 at vexillium.org>
  *
  *  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.



More information about the Xfce4-commits mailing list