From 308d434b579f95204a215615f00a802c9c7d9dba Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Mon, 3 Feb 2020 11:01:48 +0100 Subject: [PATCH] GtkIconCache: Remove unused code We're not really using the icon theme cache much anymore, as the individual per-directory hashes are no longer used, so delete all the unused code. --- gtk/gtkiconcache.c | 357 ++------------------------------------ gtk/gtkiconcacheprivate.h | 20 --- 2 files changed, 10 insertions(+), 367 deletions(-) diff --git a/gtk/gtkiconcache.c b/gtk/gtkiconcache.c index bc238e0028..8e4b86d6eb 100644 --- a/gtk/gtkiconcache.c +++ b/gtk/gtkiconcache.c @@ -82,7 +82,7 @@ gtk_icon_cache_unref (GtkIconCache *cache) GTK_NOTE (ICONTHEME, g_message ("unmapping icon cache")); if (cache->map) - g_mapped_file_unref (cache->map); + g_mapped_file_unref (cache->map); g_free (cache); } } @@ -119,7 +119,7 @@ gtk_icon_cache_new_for_path (const gchar *path) /* (will need to check on the Windows DDK part later) */ #if ((defined (_MSC_VER) && (_MSC_VER >= 1400 || __MSVCRT_VERSION__ >= 0x0800)) || defined (__MINGW64_VERSION_MAJOR)) && !defined(_WIN64) #undef fstat /* Just in case */ -#define fstat _fstat32 +#define fstat _fstat32 #endif #endif @@ -130,7 +130,7 @@ gtk_icon_cache_new_for_path (const gchar *path) if (st.st_mtime < path_st.st_mtime) { GTK_NOTE (ICONTHEME, g_message ("icon cache outdated")); - goto done; + goto done; } map = g_mapped_file_new (cache_filename, FALSE, NULL); @@ -156,7 +156,7 @@ gtk_icon_cache_new_for_path (const gchar *path) goto done; } } -#endif +#endif GTK_NOTE (ICONTHEME, g_message ("found icon cache for %s", path)); @@ -166,7 +166,7 @@ gtk_icon_cache_new_for_path (const gchar *path) cache->buffer = g_mapped_file_get_contents (map); done: - g_free (cache_filename); + g_free (cache_filename); if (fd >= 0) close (fd); @@ -182,18 +182,18 @@ gtk_icon_cache_new (const gchar *data) cache->ref_count = 1; cache->map = NULL; cache->buffer = (gchar *)data; - + return cache; } static gint get_directory_index (GtkIconCache *cache, - const gchar *directory) + const gchar *directory) { guint32 dir_list_offset; gint n_dirs; gint i; - + dir_list_offset = GET_UINT32 (cache->buffer, 8); n_dirs = GET_UINT32 (cache->buffer, dir_list_offset); @@ -203,147 +203,10 @@ get_directory_index (GtkIconCache *cache, guint32 name_offset = GET_UINT32 (cache->buffer, dir_list_offset + 4 + 4 * i); gchar *name = cache->buffer + name_offset; if (strcmp (name, directory) == 0) - return i; - } - - return -1; -} - -gint -gtk_icon_cache_get_directory_index (GtkIconCache *cache, - const gchar *directory) -{ - return get_directory_index (cache, directory); -} - -static guint -icon_name_hash (gconstpointer key) -{ - const signed char *p = key; - guint32 h = *p; - - if (h) - for (p += 1; *p != '\0'; p++) - h = (h << 5) - h + *p; - - return h; -} - -static gint -find_image_offset (GtkIconCache *cache, - const gchar *icon_name, - gint directory_index) -{ - guint32 hash_offset; - guint32 n_buckets; - guint32 chain_offset; - int hash; - guint32 image_list_offset, n_images; - int i; - - if (!icon_name) - return 0; - - chain_offset = cache->last_chain_offset; - if (chain_offset) - { - guint32 name_offset = GET_UINT32 (cache->buffer, chain_offset + 4); - gchar *name = cache->buffer + name_offset; - - if (strcmp (name, icon_name) == 0) - goto find_dir; - } - - hash_offset = GET_UINT32 (cache->buffer, 4); - n_buckets = GET_UINT32 (cache->buffer, hash_offset); - hash = icon_name_hash (icon_name) % n_buckets; - - chain_offset = GET_UINT32 (cache->buffer, hash_offset + 4 + 4 * hash); - while (chain_offset != 0xffffffff) - { - guint32 name_offset = GET_UINT32 (cache->buffer, chain_offset + 4); - gchar *name = cache->buffer + name_offset; - - if (strcmp (name, icon_name) == 0) - { - cache->last_chain_offset = chain_offset; - goto find_dir; - } - - chain_offset = GET_UINT32 (cache->buffer, chain_offset); + return i; } - cache->last_chain_offset = 0; - return 0; - -find_dir: - /* We've found an icon list, now check if we have the right icon in it */ - image_list_offset = GET_UINT32 (cache->buffer, chain_offset + 8); - n_images = GET_UINT32 (cache->buffer, image_list_offset); - - for (i = 0; i < n_images; i++) - { - if (GET_UINT16 (cache->buffer, image_list_offset + 4 + 8 * i) == - directory_index) - return image_list_offset + 4 + 8 * i; - } - - return 0; -} - -gint -gtk_icon_cache_get_icon_flags (GtkIconCache *cache, - const gchar *icon_name, - gint directory_index) -{ - guint32 image_offset; - - image_offset = find_image_offset (cache, icon_name, directory_index); - - if (!image_offset) - return 0; - - return GET_UINT16 (cache->buffer, image_offset + 2); -} - -gboolean -gtk_icon_cache_has_icons (GtkIconCache *cache, - const gchar *directory) -{ - int directory_index; - guint32 hash_offset, n_buckets; - guint32 chain_offset; - guint32 image_list_offset, n_images; - int i, j; - - directory_index = get_directory_index (cache, directory); - - if (directory_index == -1) - return FALSE; - - hash_offset = GET_UINT32 (cache->buffer, 4); - n_buckets = GET_UINT32 (cache->buffer, hash_offset); - - for (i = 0; i < n_buckets; i++) - { - chain_offset = GET_UINT32 (cache->buffer, hash_offset + 4 + 4 * i); - while (chain_offset != 0xffffffff) - { - image_list_offset = GET_UINT32 (cache->buffer, chain_offset + 8); - n_images = GET_UINT32 (cache->buffer, image_list_offset); - - for (j = 0; j < n_images; j++) - { - if (GET_UINT16 (cache->buffer, image_list_offset + 4 + 8 * j) == - directory_index) - return TRUE; - } - - chain_offset = GET_UINT32 (cache->buffer, chain_offset); - } - } - - return FALSE; + return -1; } GHashTable * @@ -417,203 +280,3 @@ gtk_icon_cache_list_icons_in_directory (GtkIconCache *cache, return icons; } - -void -gtk_icon_cache_add_icons (GtkIconCache *cache, - const gchar *directory, - GHashTable *hash_table) -{ - int directory_index; - guint32 hash_offset, n_buckets; - guint32 chain_offset; - guint32 image_list_offset, n_images; - int i, j; - - directory_index = get_directory_index (cache, directory); - - if (directory_index == -1) - return; - - hash_offset = GET_UINT32 (cache->buffer, 4); - n_buckets = GET_UINT32 (cache->buffer, hash_offset); - - for (i = 0; i < n_buckets; i++) - { - chain_offset = GET_UINT32 (cache->buffer, hash_offset + 4 + 4 * i); - while (chain_offset != 0xffffffff) - { - guint32 name_offset = GET_UINT32 (cache->buffer, chain_offset + 4); - gchar *name = cache->buffer + name_offset; - - image_list_offset = GET_UINT32 (cache->buffer, chain_offset + 8); - n_images = GET_UINT32 (cache->buffer, image_list_offset); - - for (j = 0; j < n_images; j++) - { - if (GET_UINT16 (cache->buffer, image_list_offset + 4 + 8 * j) == - directory_index) - g_hash_table_insert (hash_table, name, NULL); - } - - chain_offset = GET_UINT32 (cache->buffer, chain_offset); - } - } -} - -gboolean -gtk_icon_cache_has_icon (GtkIconCache *cache, - const gchar *icon_name) -{ - guint32 hash_offset; - guint32 n_buckets; - guint32 chain_offset; - gint hash; - - hash_offset = GET_UINT32 (cache->buffer, 4); - n_buckets = GET_UINT32 (cache->buffer, hash_offset); - - hash = icon_name_hash (icon_name) % n_buckets; - - chain_offset = GET_UINT32 (cache->buffer, hash_offset + 4 + 4 * hash); - while (chain_offset != 0xffffffff) - { - guint32 name_offset = GET_UINT32 (cache->buffer, chain_offset + 4); - gchar *name = cache->buffer + name_offset; - - if (strcmp (name, icon_name) == 0) - return TRUE; - - chain_offset = GET_UINT32 (cache->buffer, chain_offset); - } - - return FALSE; -} - -gboolean -gtk_icon_cache_has_icon_in_directory (GtkIconCache *cache, - const gchar *icon_name, - const gchar *directory) -{ - guint32 hash_offset; - guint32 n_buckets; - guint32 chain_offset; - gint hash; - gboolean found_icon = FALSE; - gint directory_index; - - directory_index = get_directory_index (cache, directory); - - if (directory_index == -1) - return FALSE; - - hash_offset = GET_UINT32 (cache->buffer, 4); - n_buckets = GET_UINT32 (cache->buffer, hash_offset); - - hash = icon_name_hash (icon_name) % n_buckets; - - chain_offset = GET_UINT32 (cache->buffer, hash_offset + 4 + 4 * hash); - while (chain_offset != 0xffffffff) - { - guint32 name_offset = GET_UINT32 (cache->buffer, chain_offset + 4); - gchar *name = cache->buffer + name_offset; - - if (strcmp (name, icon_name) == 0) - { - found_icon = TRUE; - break; - } - - chain_offset = GET_UINT32 (cache->buffer, chain_offset); - } - - if (found_icon) - { - guint32 image_list_offset = GET_UINT32 (cache->buffer, chain_offset + 8); - guint32 n_images = GET_UINT32 (cache->buffer, image_list_offset); - guint32 image_offset = image_list_offset + 4; - gint i; - for (i = 0; i < n_images; i++) - { - guint16 index = GET_UINT16 (cache->buffer, image_offset); - - if (index == directory_index) - return TRUE; - image_offset += 8; - } - } - - return FALSE; -} - -static void -pixbuf_destroy_cb (guchar *pixels, - gpointer data) -{ - GtkIconCache *cache = data; - - gtk_icon_cache_unref (cache); -} - -GdkPixbuf * -gtk_icon_cache_get_icon (GtkIconCache *cache, - const gchar *icon_name, - gint directory_index) -{ - guint32 offset, image_data_offset, pixel_data_offset; - guint32 length, type; - GdkPixbuf *pixbuf; - GdkPixdata pixdata; - GError *error = NULL; - - offset = find_image_offset (cache, icon_name, directory_index); - - if (!offset) - return NULL; - - image_data_offset = GET_UINT32 (cache->buffer, offset + 4); - - if (!image_data_offset) - return NULL; - - pixel_data_offset = GET_UINT32 (cache->buffer, image_data_offset); - - type = GET_UINT32 (cache->buffer, pixel_data_offset); - - if (type != 0) - { - GTK_NOTE (ICONTHEME, g_message ("invalid pixel data type %u", type)); - return NULL; - } - - length = GET_UINT32 (cache->buffer, pixel_data_offset + 4); - -G_GNUC_BEGIN_IGNORE_DEPRECATIONS - if (!gdk_pixdata_deserialize (&pixdata, length, - (guchar *)(cache->buffer + pixel_data_offset + 8), - &error)) - { - GTK_NOTE (ICONTHEME, g_message ("could not deserialize data: %s", error->message)); - g_error_free (error); - - return NULL; - } -G_GNUC_END_IGNORE_DEPRECATIONS - - pixbuf = gdk_pixbuf_new_from_data (pixdata.pixel_data, GDK_COLORSPACE_RGB, - (pixdata.pixdata_type & GDK_PIXDATA_COLOR_TYPE_MASK) == GDK_PIXDATA_COLOR_TYPE_RGBA, - 8, pixdata.width, pixdata.height, pixdata.rowstride, - (GdkPixbufDestroyNotify)pixbuf_destroy_cb, - cache); - if (!pixbuf) - { - GTK_NOTE (ICONTHEME, g_message ("could not convert pixdata to pixbuf: %s", error->message)); - g_error_free (error); - - return NULL; - } - - gtk_icon_cache_ref (cache); - - return pixbuf; -} - diff --git a/gtk/gtkiconcacheprivate.h b/gtk/gtkiconcacheprivate.h index 2f73891e6b..4925e9c870 100644 --- a/gtk/gtkiconcacheprivate.h +++ b/gtk/gtkiconcacheprivate.h @@ -25,28 +25,8 @@ typedef struct _GtkIconCache GtkIconCache; GtkIconCache *gtk_icon_cache_new (const gchar *data); GtkIconCache *gtk_icon_cache_new_for_path (const gchar *path); -gint gtk_icon_cache_get_directory_index (GtkIconCache *cache, - const gchar *directory); -gboolean gtk_icon_cache_has_icon (GtkIconCache *cache, - const gchar *icon_name); -gboolean gtk_icon_cache_has_icon_in_directory (GtkIconCache *cache, - const gchar *icon_name, - const gchar *directory); GHashTable *gtk_icon_cache_list_icons_in_directory (GtkIconCache *cache, const gchar *directory); -gboolean gtk_icon_cache_has_icons (GtkIconCache *cache, - const gchar *directory); -void gtk_icon_cache_add_icons (GtkIconCache *cache, - const gchar *directory, - GHashTable *hash_table); - -gint gtk_icon_cache_get_icon_flags (GtkIconCache *cache, - const gchar *icon_name, - gint directory_index); -GdkPixbuf *gtk_icon_cache_get_icon (GtkIconCache *cache, - const gchar *icon_name, - gint directory_index); - GtkIconCache *gtk_icon_cache_ref (GtkIconCache *cache); void gtk_icon_cache_unref (GtkIconCache *cache); -- 2.30.2