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

Reply via email to