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

Giuseppe Torelli colossus at xfce.org
Fri Sep 28 13:11:47 CEST 2007


Author: colossus
Date: 2007-09-28 11:11:47 +0000 (Fri, 28 Sep 2007)
New Revision: 26114

Modified:
   xarchiver/trunk/src/7zip.c
   xarchiver/trunk/src/archive.c
   xarchiver/trunk/src/arj.c
   xarchiver/trunk/src/bzip2.c
   xarchiver/trunk/src/deb.c
   xarchiver/trunk/src/gzip.c
   xarchiver/trunk/src/lha.c
   xarchiver/trunk/src/lzma.c
   xarchiver/trunk/src/mime.c
   xarchiver/trunk/src/mime.h
   xarchiver/trunk/src/rar.c
   xarchiver/trunk/src/rpm.c
   xarchiver/trunk/src/tar.c
   xarchiver/trunk/src/window.c
   xarchiver/trunk/src/zip.c
Log:
Completed cache for mimetype icons.


Modified: xarchiver/trunk/src/7zip.c
===================================================================
--- xarchiver/trunk/src/7zip.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/7zip.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -48,7 +48,7 @@
 	if ( archive->child_pid == 0 )
 		return;
 
-	GType types[]= {G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING};
+	GType types[]= {GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING};
 	archive->column_types = g_malloc0(sizeof(types));
 	for (i = 0; i < 7; i++)
 		archive->column_types[i] = types[i];

Modified: xarchiver/trunk/src/archive.c
===================================================================
--- xarchiver/trunk/src/archive.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/archive.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -499,7 +499,6 @@
 	GdkPixbuf *pixbuf = NULL;
 	GSList *s = NULL;
 	XEntry *entry  = NULL;
-	const char *icon_name;
 
 	GtkTreeIter iter;
 	unsigned short int i;
@@ -522,12 +521,11 @@
 				entry->filename = dummy;
 			}
 			if (entry->is_dir)
-				icon_name = "folder";
+				pixbuf = xa_get_pixbuf_icon_from_cache("folder");
 			else if (entry->is_encrypted)
-				icon_name = "gtk-dialog-authentication";
+				pixbuf = xa_get_pixbuf_icon_from_cache("lock");
 			else
 				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,pixbuf,1,entry->filename,-1);
 
@@ -603,13 +601,11 @@
 		gtk_list_store_append (archive->liststore, &iter);
 
 		if (entry->is_dir)
-			icon_name = "folder";
+			pixbuf = xa_get_pixbuf_icon_from_cache("folder");
 		else if (entry->is_encrypted)
-			icon_name = "gtk-dialog-authentication";
-		
+			pixbuf = xa_get_pixbuf_icon_from_cache("lock");
 		else
 			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,pixbuf,1,entry->filename,-1);
 

Modified: xarchiver/trunk/src/arj.c
===================================================================
--- xarchiver/trunk/src/arj.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/arj.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -41,7 +41,7 @@
 	if (archive->child_pid == 0)
 		return;
 
-	GType types[]= {G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING};
+	GType types[]= {GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING};
 	archive->column_types = g_malloc0(sizeof(types));
 	for (i = 0; i < 10; i++)
 		archive->column_types[i] = types[i];

Modified: xarchiver/trunk/src/bzip2.c
===================================================================
--- xarchiver/trunk/src/bzip2.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/bzip2.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -68,7 +68,7 @@
 		if (archive->child_pid == 0)
 			return;
 
-		GType types[]= {G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
+		GType types[]= {GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
 		archive->column_types = g_malloc0(sizeof(types));
 		for (i = 0; i < 8; i++)
 			archive->column_types[i] = types[i];

Modified: xarchiver/trunk/src/deb.c
===================================================================
--- xarchiver/trunk/src/deb.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/deb.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -89,7 +89,7 @@
 		return;
 
 	char *names[]= {(_("Points to")),(_("Permissions")),(_("Owner/Group")),(_("Size")),(_("Date")),(_("Time"))};
-	GType types[]= {G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
+	GType types[]= {GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
 	archive->column_types = g_malloc0(sizeof(types));
 	for (i = 0; i < 8; i++)
 		archive->column_types[i] = types[i];

Modified: xarchiver/trunk/src/gzip.c
===================================================================
--- xarchiver/trunk/src/gzip.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/gzip.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -53,7 +53,7 @@
 		if (archive->child_pid == 0)
 			return;
 
-		GType types[]= {G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
+		GType types[]= {GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
 		archive->column_types = g_malloc0(sizeof(types));
 		for (i = 0; i < 8; i++)
 			archive->column_types[i] = types[i];

Modified: xarchiver/trunk/src/lha.c
===================================================================
--- xarchiver/trunk/src/lha.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/lha.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -42,7 +42,7 @@
 	if ( archive->child_pid == 0 )
 		return;
 
-	GType types[]= {G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
+	GType types[]= {GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
 	archive->column_types = g_malloc0(sizeof(types));
 	for (i = 0; i < 7; i++)
 		archive->column_types[i] = types[i];

Modified: xarchiver/trunk/src/lzma.c
===================================================================
--- xarchiver/trunk/src/lzma.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/lzma.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -60,7 +60,7 @@
 		if ( archive->child_pid == 0 )
 			return;
 
-		GType types[]= {G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
+		GType types[]= {GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
 		archive->column_types = g_malloc0(sizeof(types));
 		for (i = 0; i < 8; i++)
 			archive->column_types[i] = types[i];

Modified: xarchiver/trunk/src/mime.c
===================================================================
--- xarchiver/trunk/src/mime.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/mime.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -19,7 +19,7 @@
 
 #include "mime.h"
 
-static GSList *icon_cache = NULL;
+GSList *icon_cache = NULL;
 
 const char *xa_get_stock_mime_icon(char *filename)
 {
@@ -66,25 +66,34 @@
 
 GdkPixbuf *xa_get_pixbuf_icon_from_cache(gchar *filename)
 {
-	pixbuf_cache *tie;
+	pixbuf_cache *tie = NULL;
 	const gchar *icon_name;
-	GSList *found;
-	GdkPixbuf *pixbuf;
+	GSList *found = NULL;
+	GdkPixbuf *pixbuf = NULL;
 
-	icon_name = xa_get_stock_mime_icon(filename);
-	found = g_slist_find_custom(icon_cache,icon_name,(GCompareFunc)xa_icon_name_compare_func);
+	if (strcmp(filename,"folder") == 0)
+		icon_name = filename;
+	else if (strcmp(filename,"lock") == 0)
+		icon_name = "gtk-dialog-authentication";
+	else
+		icon_name = xa_get_stock_mime_icon(filename);
 
-	if (found)
-		return found->data;
-	else
+	tie = g_new0(pixbuf_cache,1);
+	if (tie)
 	{
-		pixbuf = gtk_icon_theme_load_icon(icon_theme,"package",48,GTK_ICON_LOOKUP_FORCE_SVG,NULL);
-		if (pixbuf)
+		tie->icon_name = g_strdup(icon_name);
+		found = g_slist_find_custom(icon_cache,tie,(GCompareFunc)xa_icon_name_compare_func);
+		if (found)
 		{
-			tie = g_new0(pixbuf_cache,1);
-			if (tie)
+			g_free (tie->icon_name);
+			g_free (tie);
+			return ((pixbuf_cache *)found->data)->pixbuf;
+		}
+		else
+		{
+			pixbuf = gtk_icon_theme_load_icon(icon_theme,icon_name,16,GTK_ICON_LOOKUP_FORCE_SVG,NULL);
+			if (pixbuf)
 			{
-				tie->icon_name = icon_name;
 				tie->pixbuf = pixbuf;
 				icon_cache = g_slist_prepend(icon_cache,tie);
 			}
@@ -93,14 +102,21 @@
 	return pixbuf;
 }
 
-gint xa_icon_name_compare_func(gconstpointer a, gconstpointer b)
+gint xa_icon_name_compare_func(pixbuf_cache *a, pixbuf_cache *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);
+	return strcmp(a->icon_name, b->icon_name);
 }
 
 void xa_free_pixbuf_cache()
 {
-	g_slist_foreach(icon_cache,(GFunc) g_free,NULL);
+	GSList *x = icon_cache;
+
+	while (x)
+	{
+		pixbuf_cache *tie = x->data;
+		g_free (tie->icon_name);
+		g_object_unref (tie->pixbuf);
+		g_free(tie);
+		x = x->next;
+	}
 }

Modified: xarchiver/trunk/src/mime.h
===================================================================
--- xarchiver/trunk/src/mime.h	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/mime.h	2007-09-28 11:11:47 UTC (rev 26114)
@@ -30,12 +30,12 @@
 
 struct _pixbuf_cache
 {
-	const gchar *icon_name;
+	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);
+gint xa_icon_name_compare_func(pixbuf_cache *a, pixbuf_cache *b);
 void xa_free_pixbuf_cache();
 #endif

Modified: xarchiver/trunk/src/rar.c
===================================================================
--- xarchiver/trunk/src/rar.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/rar.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -55,7 +55,7 @@
 	if ( archive->child_pid == 0 )
 		return;
 
-	GType types[]= {G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING};
+	GType types[]= {GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING};
 	archive->column_types = g_malloc0(sizeof(types));
 	for (i = 0; i < 11; i++)
 		archive->column_types[i] = types[i];

Modified: xarchiver/trunk/src/rpm.c
===================================================================
--- xarchiver/trunk/src/rpm.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/rpm.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -55,7 +55,7 @@
 	archive->format ="RPM";
 
 	char *names[]= {(_("Points to")),(_("Size")),(_("Permission")),(_("Date")),(_("Hard Link")),(_("Owner")),(_("Group"))};
-	GType types[]= {G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING};
+	GType types[]= {GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING};
 	archive->column_types = g_malloc0(sizeof(types));
 	for (i = 0; i < 9; i++)
 		archive->column_types[i] = types[i];

Modified: xarchiver/trunk/src/tar.c
===================================================================
--- xarchiver/trunk/src/tar.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/tar.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -50,7 +50,7 @@
 	if (archive->child_pid == 0)
 		return;
 
-	GType types[]= {G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
+	GType types[]= {GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING};
 	archive->column_types = g_malloc0(sizeof(types));
 	for (i = 0; i < 8; i++)
 		archive->column_types[i] = types[i];

Modified: xarchiver/trunk/src/window.c
===================================================================
--- xarchiver/trunk/src/window.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/window.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -36,6 +36,7 @@
 extern gboolean unrar;
 extern Prefs_dialog_data *prefs_window;
 extern gchar *config_file;
+extern void xa_free_pixbuf_cache();
 
 gchar *current_open_directory = NULL;
 GtkFileFilter *open_file_filter = NULL;
@@ -508,6 +509,7 @@
 
 	xa_prefs_save_options (prefs_window,config_file);
 	g_free (config_file);
+	xa_free_pixbuf_cache();
 
 #ifdef HAVE_SOCKET
 	socket_finalize();
@@ -1131,7 +1133,7 @@
 	archive->renderer = gtk_cell_renderer_pixbuf_new();
 	g_object_set(G_OBJECT(archive->renderer), "stock-size", (3 - gtk_combo_box_get_active(GTK_COMBO_BOX(prefs_window->combo_icon_size))), NULL);
 	gtk_tree_view_column_pack_start(column, archive->renderer, FALSE);
-	gtk_tree_view_column_set_attributes(column, archive->renderer, "icon-name",0,NULL);
+	gtk_tree_view_column_set_attributes(column, archive->renderer, "pixbuf",0,NULL);
 
 	renderer = gtk_cell_renderer_text_new ();
 	gtk_tree_view_column_pack_start(column, renderer, TRUE);

Modified: xarchiver/trunk/src/zip.c
===================================================================
--- xarchiver/trunk/src/zip.c	2007-09-25 21:57:05 UTC (rev 26113)
+++ xarchiver/trunk/src/zip.c	2007-09-28 11:11:47 UTC (rev 26114)
@@ -43,7 +43,7 @@
 	if (archive->child_pid == 0)
 		return;
 
-	GType types[] = {G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING};
+	GType types[] = {GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_UINT64,G_TYPE_UINT64,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING};
 	archive->column_types = g_malloc0(sizeof(types));
 	for (i = 0; i < 10; i++)
 		archive->column_types[i] = types[i];



More information about the Xfce4-commits mailing list