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];
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits