]> Dogcows Code - chaz/openbox/blobdiff - obrender/imagecache.c
Rework the code provided by Kadlcik Libor for loading/showing icons in Openbox menus.
[chaz/openbox] / obrender / imagecache.c
index fde1e7a06ce5e03805f9fdd357006ff3c29704f5..036ac121091a5b8fcf8a03031fd560f274193df3 100644 (file)
@@ -32,9 +32,9 @@ RrImageCache* RrImageCacheNew(gint max_resized_saved)
     self = g_new(RrImageCache, 1);
     self->ref = 1;
     self->max_resized_saved = max_resized_saved;
-    self->table = g_hash_table_new((GHashFunc)RrImagePicHash,
-                                   (GEqualFunc)RrImagePicEqual);
-    self->file_name_table = NULL;
+    self->pic_table = g_hash_table_new((GHashFunc)RrImagePicHash,
+                                       (GEqualFunc)RrImagePicEqual);
+    self->name_table = g_hash_table_new(g_str_hash, g_str_equal);
     return self;
 }
 
@@ -46,22 +46,31 @@ void RrImageCacheRef(RrImageCache *self)
 void RrImageCacheUnref(RrImageCache *self)
 {
     if (self && --self->ref == 0) {
-        g_assert(g_hash_table_size(self->table) == 0);
-        g_assert(self->file_name_table == NULL);
-        g_hash_table_unref(self->table);
+        g_assert(g_hash_table_size(self->pic_table) == 0);
+        g_hash_table_unref(self->pic_table);
+        self->pic_table = NULL;
+
+        g_assert(g_hash_table_size(self->name_table) == 0);
+        g_hash_table_destroy(self->name_table);
+        self->name_table = NULL;
 
         g_free(self);
     }
 }
 
+RrImage* RrImageCacheFindName(RrImageCache *self, const gchar *name)
+{
+    return g_hash_table_lookup(self->name_table, name);
+}
+
 /*! Finds an image in the cache, if it is already in there */
 RrImage* RrImageCacheFind(RrImageCache *self,
                           RrPixel32 *data, gint w, gint h)
 {
     RrImagePic pic;
 
-    RrImagePicInit(&pic, w, h, data);
-    return g_hash_table_lookup(self->table, &pic);
+    RrImagePicInit(&pic, NULL, w, h, data);
+    return g_hash_table_lookup(self->pic_table, &pic);
 }
 
 #define hashsize(n) ((RrPixel32)1<<(n))
This page took 0.023747 seconds and 4 git commands to generate.