Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

marlin_icon_info_lookup

By: junrrein on Feb 20th, 2013  |  syntax: C  |  size: 1.73 KB  |  views: 4  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. struct _MarlinIconInfo
  2. {
  3.     GObject         parent;
  4.  
  5.     guint64         last_use_time;
  6.     gboolean        is_first_ref;
  7.     GdkPixbuf       *pixbuf;
  8.     char            *display_name;
  9.     char            *icon_name;
  10. };
  11.  
  12. typedef struct _MarlinIconInfo  MarlinIconInfo;
  13.  
  14. MarlinIconInfo *
  15. marlin_icon_info_lookup (GIcon *icon, int size)
  16. {
  17.     MarlinIconInfo *icon_info;
  18.     GdkPixbuf *pixbuf = NULL;
  19.  
  20.     g_return_val_if_fail (icon && G_IS_ICON (icon), NULL);
  21.     if (G_IS_LOADABLE_ICON (icon)) {
  22.         LoadableIconKey lookup_key;
  23.         LoadableIconKey *key;
  24.  
  25.         if (loadable_icon_cache == NULL) {
  26.             loadable_icon_cache =
  27.                 g_hash_table_new_full ((GHashFunc)loadable_icon_key_hash,
  28.                                        (GEqualFunc)loadable_icon_key_equal,
  29.                                        (GDestroyNotify) loadable_icon_key_free,
  30.                                        (GDestroyNotify) destroy_cache_entry);
  31.         }
  32.  
  33.         lookup_key.icon = icon;
  34.         lookup_key.size = size;
  35.         icon_info = g_hash_table_lookup (loadable_icon_cache, &lookup_key);
  36.         if (icon_info != NULL) {
  37.             //g_message ("CACHED %s stream %s\n", G_STRFUNC, g_icon_to_string (icon));
  38.             return g_object_ref (icon_info);
  39.         }
  40.  
  41.         char *str_icon = g_icon_to_string (icon);
  42.         pixbuf = gdk_pixbuf_new_from_file_at_size (str_icon, size, size, NULL);
  43.         icon_info = marlin_icon_info_new_for_pixbuf (pixbuf);
  44.         if (pixbuf != NULL) {
  45.             key = loadable_icon_key_new (icon, size);
  46.             g_hash_table_insert (loadable_icon_cache, key, g_object_ref (icon_info));
  47.             g_free (str_icon);
  48.         }
  49.  
  50.         return icon_info;
  51. //snip
  52. }
clone this paste RAW Paste Data