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

Reply via email to