[gtk: 4/5] icon-theme: Only have one copy of the icon flags enum



commit 046de4ccbf5cb1e8e4d5b4d854106968d8203d52
Author: Alexander Larsson <alexl redhat com>
Date:   Tue Feb 4 09:35:20 2020 +0100

    icon-theme: Only have one copy of the icon flags enum
    
    It turns out with the icon cache now using the virtual SYMBOLIC_PNG_SUFFIX
    flag the two enums are now identical, so lets just use one of them, the
    one GtkIconCache (so we move it to the header).

 gtk/gtkiconcache.c        |  23 ++-----
 gtk/gtkiconcacheprivate.h |  14 ++++
 gtk/gtkicontheme.c        | 163 +++++++++++++++++++++-------------------------
 3 files changed, 95 insertions(+), 105 deletions(-)
---
diff --git a/gtk/gtkiconcache.c b/gtk/gtkiconcache.c
index 8e4b86d6eb..7c6e6dd247 100644
--- a/gtk/gtkiconcache.c
+++ b/gtk/gtkiconcache.c
@@ -43,19 +43,6 @@
 #define GET_UINT16(cache, offset) (GUINT16_FROM_BE (*(guint16 *)((cache) + (offset))))
 #define GET_UINT32(cache, offset) (GUINT32_FROM_BE (*(guint32 *)((cache) + (offset))))
 
-/* Keep in sync with gtkicontheme.c */
-typedef enum
-{
-  /* These are used in the file format: */
-  ICON_SUFFIX_NONE = 0,
-  ICON_SUFFIX_XPM = 1 << 0,
-  ICON_SUFFIX_SVG = 1 << 1,
-  ICON_SUFFIX_PNG = 1 << 2,
-  HAS_ICON_FILE = 1 << 3,
-  /* This is just used by Gtk, so we convert internally to this: */
-  ICON_SUFFIX_SYMBOLIC_PNG = 1 << 4
-} IconSuffix;
-
 struct _GtkIconCache {
   gint ref_count;
 
@@ -255,13 +242,13 @@ gtk_icon_cache_list_icons_in_directory (GtkIconCache *cache,
               char *converted_name;
               guint32 hash_flags = 0;
 
-              /* Icons named foo.symbolic.png are stored in the cache as "foo.symbolic" with ICON_SUFFIX_PNG,
-               * but we convert it internally to ICON_SUFFIX_SYMBOLIC_PNG.
+              /* Icons named foo.symbolic.png are stored in the cache as "foo.symbolic" with 
ICON_CACHE_FLAG_PNG,
+               * but we convert it internally to ICON_CACHE_FLAG_SYMBOLIC_PNG.
                * Otherwise we use the same enum values and names as on disk. */
-              if (g_str_has_suffix (name, ".symbolic") && (flags & ICON_SUFFIX_PNG) != 0)
+              if (g_str_has_suffix (name, ".symbolic") && (flags & ICON_CACHE_FLAG_PNG_SUFFIX) != 0)
                 {
-                  flags |= ICON_SUFFIX_SYMBOLIC_PNG;
-                  flags &= ~ICON_SUFFIX_PNG;
+                  flags |= ICON_CACHE_FLAG_SYMBOLIC_PNG_SUFFIX;
+                  flags &= ~ICON_CACHE_FLAG_PNG_SUFFIX;
                   converted_name = g_strndup (name, strlen(name) - 9);
                 }
               else
diff --git a/gtk/gtkiconcacheprivate.h b/gtk/gtkiconcacheprivate.h
index 4925e9c870..3f0b7c4747 100644
--- a/gtk/gtkiconcacheprivate.h
+++ b/gtk/gtkiconcacheprivate.h
@@ -21,6 +21,20 @@
 
 G_BEGIN_DECLS
 
+/* These are (mostly, see below) the on disk flags for each icon file, don't change */
+typedef enum
+{
+  ICON_CACHE_FLAG_NONE = 0,
+  ICON_CACHE_FLAG_XPM_SUFFIX = 1 << 0,
+  ICON_CACHE_FLAG_SVG_SUFFIX = 1 << 1,
+  ICON_CACHE_FLAG_PNG_SUFFIX = 1 << 2,
+  ICON_CACHE_FLAG_HAS_ICON_FILE = 1 << 3,
+
+  /* This is a virtual flag we recreate in memory as the file format actually stores .symbolic.png as png */
+  ICON_CACHE_FLAG_SYMBOLIC_PNG_SUFFIX = 1 << 4,
+} IconCacheFlag;
+
+
 typedef struct _GtkIconCache GtkIconCache;
 
 GtkIconCache *gtk_icon_cache_new                        (const gchar  *data);
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
index 1ec6715a75..4ebca15dff 100644
--- a/gtk/gtkicontheme.c
+++ b/gtk/gtkicontheme.c
@@ -166,18 +166,6 @@ typedef enum
   ICON_THEME_DIR_UNTHEMED
 } IconThemeDirType;
 
-/* In reverse search order: */
-/* Keep in sync with gtkiconcache.c */
-typedef enum
-{
-  ICON_SUFFIX_NONE = 0,
-  ICON_SUFFIX_XPM = 1 << 0,
-  ICON_SUFFIX_SVG = 1 << 1,
-  ICON_SUFFIX_PNG = 1 << 2,
-  HAS_ICON_FILE = 1 << 3,
-  ICON_SUFFIX_SYMBOLIC_PNG = 1 << 4
-} IconSuffix;
-
 #if 0
 #define DEBUG_CACHE(args) g_print args
 #else
@@ -373,41 +361,42 @@ typedef struct
   gboolean exists;
 } IconThemeDirMtime;
 
-static void       gtk_icon_theme_finalize               (GObject          *object);
-static void       gtk_icon_theme_dispose                (GObject          *object);
-static IconTheme *theme_new                             (const char       *theme_name,
-                                                         GKeyFile         *theme_file);
-static void       theme_dir_size_destroy                (IconThemeDirSize *dir_size);
-static void       theme_dir_destroy                     (IconThemeDir     *dir);
-static void       theme_destroy                         (IconTheme        *theme);
-static GtkIcon *  theme_lookup_icon                     (IconTheme        *theme,
-                                                         const gchar      *icon_name,
-                                                         gint              size,
-                                                         gint              scale,
-                                                         gboolean          allow_svg);
-static void       theme_list_icons                      (IconTheme        *theme,
-                                                         GHashTable       *icons,
-                                                         GQuark            context);
-static gboolean   theme_has_icon                        (IconTheme        *theme,
-                                                         const gchar      *icon_name);
-static void       theme_subdir_load                     (GtkIconTheme     *self,
-                                                         IconTheme        *theme,
-                                                         GKeyFile         *theme_file,
-                                                         gchar            *subdir);
-static void       do_theme_change                       (GtkIconTheme     *self);
-static void       blow_themes                           (GtkIconTheme     *self);
-static gboolean   rescan_themes                         (GtkIconTheme     *self);
-static GtkIcon *  icon_new                              (IconThemeDirType  type,
-                                                         gint              dir_size,
-                                                         gint              dir_scale);
-static void       icon_compute_rendered_size            (GtkIcon          *icon);
-static IconSuffix suffix_from_name                      (const gchar      *name);
-static gboolean   icon_ensure_scale_and_texture__locked (GtkIcon          *icon,
-                                                         gboolean          in_thread);
-static void       unset_display                         (GtkIconTheme     *self);
-static void       update_current_theme__mainthread      (GtkIconTheme     *self);
-static gboolean   ensure_valid_themes                   (GtkIconTheme     *self,
-                                                         gboolean          non_blocking);
+static void          gtk_icon_theme_finalize               (GObject          *object);
+static void          gtk_icon_theme_dispose                (GObject          *object);
+static IconTheme *   theme_new                             (const char       *theme_name,
+                                                            GKeyFile         *theme_file);
+static void          theme_dir_size_destroy                (IconThemeDirSize *dir_size);
+static void          theme_dir_destroy                     (IconThemeDir     *dir);
+static void          theme_destroy                         (IconTheme        *theme);
+static GtkIcon *     theme_lookup_icon                     (IconTheme        *theme,
+                                                            const gchar      *icon_name,
+                                                            gint              size,
+                                                            gint              scale,
+                                                            gboolean          allow_svg);
+static void          theme_list_icons                      (IconTheme        *theme,
+                                                            GHashTable       *icons,
+                                                            GQuark            context);
+static gboolean      theme_has_icon                        (IconTheme        *theme,
+                                                            const gchar      *icon_name);
+static void          theme_subdir_load                     (GtkIconTheme     *self,
+                                                            IconTheme        *theme,
+                                                            GKeyFile         *theme_file,
+                                                            gchar            *subdir);
+static void          do_theme_change                       (GtkIconTheme     *self);
+static void          blow_themes                           (GtkIconTheme     *self);
+static gboolean      rescan_themes                         (GtkIconTheme     *self);
+static GtkIcon *     icon_new                              (IconThemeDirType  type,
+                                                            gint              dir_size,
+                                                            gint              dir_scale);
+static void          icon_compute_rendered_size            (GtkIcon          *icon);
+static IconCacheFlag suffix_from_name                      (const gchar      *name);
+static gboolean      icon_ensure_scale_and_texture__locked (GtkIcon          *icon,
+                                                            gboolean          in_thread);
+static void          unset_display                         (GtkIconTheme     *self);
+static void          update_current_theme__mainthread      (GtkIconTheme     *self);
+static gboolean      ensure_valid_themes                   (GtkIconTheme     *self,
+                                                            gboolean          non_blocking);
+
 
 
 static guint signal_changed = 0;
@@ -1599,14 +1588,14 @@ add_unthemed_icon (GtkIconTheme *self,
                    const gchar  *file,
                    gboolean      is_resource)
 {
-  IconSuffix new_suffix, old_suffix;
+  IconCacheFlag new_suffix, old_suffix;
   gchar *abs_file;
   gchar *base_name;
   UnthemedIcon *unthemed_icon;
 
   new_suffix = suffix_from_name (file);
 
-  if (new_suffix == ICON_SUFFIX_NONE)
+  if (new_suffix == ICON_CACHE_FLAG_NONE)
     return;
 
   abs_file = g_build_filename (dir, file, NULL);
@@ -1616,7 +1605,7 @@ add_unthemed_icon (GtkIconTheme *self,
 
   if (unthemed_icon)
     {
-      if (new_suffix == ICON_SUFFIX_SVG)
+      if (new_suffix == ICON_CACHE_FLAG_SVG_SUFFIX)
         {
           if (unthemed_icon->svg_filename)
             g_free (abs_file);
@@ -1648,7 +1637,7 @@ add_unthemed_icon (GtkIconTheme *self,
 
       unthemed_icon->is_resource = is_resource;
 
-      if (new_suffix == ICON_SUFFIX_SVG)
+      if (new_suffix == ICON_CACHE_FLAG_SVG_SUFFIX)
         unthemed_icon->svg_filename = abs_file;
       else
         unthemed_icon->no_svg_filename = abs_file;
@@ -1969,7 +1958,7 @@ real_choose_icon (GtkIconTheme      *self,
       if (allow_svg &&
           unthemed_icon->svg_filename &&
           (!unthemed_icon->no_svg_filename ||
-           suffix_from_name (unthemed_icon->no_svg_filename) < ICON_SUFFIX_PNG))
+           suffix_from_name (unthemed_icon->no_svg_filename) < ICON_CACHE_FLAG_PNG_SUFFIX))
         icon->filename = g_strdup (unthemed_icon->svg_filename);
       else if (unthemed_icon->no_svg_filename)
         icon->filename = g_strdup (unthemed_icon->no_svg_filename);
@@ -1988,7 +1977,7 @@ real_choose_icon (GtkIconTheme      *self,
           goto out;
         }
 
-      icon->is_svg = suffix_from_name (icon->filename) == ICON_SUFFIX_SVG;
+      icon->is_svg = suffix_from_name (icon->filename) == ICON_CACHE_FLAG_SVG_SUFFIX;
       icon->is_resource = unthemed_icon->is_resource;
     }
 
@@ -2974,27 +2963,27 @@ theme_dir_size_difference (IconThemeDirSize *dir_size,
 }
 
 static const gchar *
-string_from_suffix (IconSuffix suffix)
+string_from_suffix (IconCacheFlag suffix)
 {
   switch (suffix)
     {
-    case ICON_SUFFIX_XPM:
+    case ICON_CACHE_FLAG_XPM_SUFFIX:
       return ".xpm";
-    case ICON_SUFFIX_SVG:
+    case ICON_CACHE_FLAG_SVG_SUFFIX:
       return ".svg";
-    case ICON_SUFFIX_PNG:
+    case ICON_CACHE_FLAG_PNG_SUFFIX:
       return ".png";
-    case ICON_SUFFIX_SYMBOLIC_PNG:
+    case ICON_CACHE_FLAG_SYMBOLIC_PNG_SUFFIX:
       return ".symbolic.png";
-    case ICON_SUFFIX_NONE:
-    case HAS_ICON_FILE:
+    case ICON_CACHE_FLAG_NONE:
+    case ICON_CACHE_FLAG_HAS_ICON_FILE:
     default:
       g_assert_not_reached();
       return NULL;
     }
 }
 
-static inline IconSuffix
+static inline IconCacheFlag
 suffix_from_name (const gchar *name)
 {
   const gsize name_len = strlen (name);
@@ -3004,36 +2993,36 @@ suffix_from_name (const gchar *name)
       if (name_len > strlen (".symbolic.png"))
         {
           if (strcmp (name + name_len - strlen (".symbolic.png"), ".symbolic.png") == 0)
-            return ICON_SUFFIX_SYMBOLIC_PNG;
+            return ICON_CACHE_FLAG_SYMBOLIC_PNG_SUFFIX;
         }
 
       if (strcmp (name + name_len - strlen (".png"), ".png") == 0)
-        return ICON_SUFFIX_PNG;
+        return ICON_CACHE_FLAG_PNG_SUFFIX;
 
       if (strcmp (name + name_len - strlen (".svg"), ".svg") == 0)
-        return ICON_SUFFIX_SVG;
+        return ICON_CACHE_FLAG_SVG_SUFFIX;
 
       if (strcmp (name + name_len - strlen (".xpm"), ".xpm") == 0)
-        return ICON_SUFFIX_XPM;
+        return ICON_CACHE_FLAG_XPM_SUFFIX;
     }
 
-  return ICON_SUFFIX_NONE;
+  return ICON_CACHE_FLAG_NONE;
 }
 
-static IconSuffix
-best_suffix (IconSuffix suffix,
-             gboolean   allow_svg)
-{
-  if ((suffix & ICON_SUFFIX_SYMBOLIC_PNG) != 0)
-    return ICON_SUFFIX_SYMBOLIC_PNG;
-  else if ((suffix & ICON_SUFFIX_PNG) != 0)
-    return ICON_SUFFIX_PNG;
-  else if (allow_svg && ((suffix & ICON_SUFFIX_SVG) != 0))
-    return ICON_SUFFIX_SVG;
-  else if ((suffix & ICON_SUFFIX_XPM) != 0)
-    return ICON_SUFFIX_XPM;
+static IconCacheFlag
+best_suffix (IconCacheFlag suffix,
+             gboolean      allow_svg)
+{
+  if ((suffix & ICON_CACHE_FLAG_SYMBOLIC_PNG_SUFFIX) != 0)
+    return ICON_CACHE_FLAG_SYMBOLIC_PNG_SUFFIX;
+  else if ((suffix & ICON_CACHE_FLAG_PNG_SUFFIX) != 0)
+    return ICON_CACHE_FLAG_PNG_SUFFIX;
+  else if (allow_svg && ((suffix & ICON_CACHE_FLAG_SVG_SUFFIX) != 0))
+    return ICON_CACHE_FLAG_SVG_SUFFIX;
+  else if ((suffix & ICON_CACHE_FLAG_XPM_SUFFIX) != 0)
+    return ICON_CACHE_FLAG_XPM_SUFFIX;
   else
-    return ICON_SUFFIX_NONE;
+    return ICON_CACHE_FLAG_NONE;
 }
 
 /* returns TRUE if dir_a is a better match */
@@ -3111,7 +3100,7 @@ theme_lookup_icon (IconTheme   *theme,
   IconThemeDirSize *min_dir_size;
   IconThemeFile *min_file;
   gint min_difference;
-  IconSuffix min_suffix;
+  IconCacheFlag min_suffix;
   int i;
 
   /* Its not uncommon with misses, so we do an early check which allows us do
@@ -3141,7 +3130,7 @@ theme_lookup_icon (IconTheme   *theme,
       else
         best_suffix = file->best_suffix_no_svg;
 
-      if (best_suffix == ICON_SUFFIX_NONE)
+      if (best_suffix == ICON_CACHE_FLAG_NONE)
         continue;
 
       difference = theme_dir_size_difference (dir_size, size, scale);
@@ -3169,7 +3158,7 @@ theme_lookup_icon (IconTheme   *theme,
 
       filename = g_strconcat (icon_name, string_from_suffix (min_suffix), NULL);
       icon->filename = g_build_filename (dir->path, filename, NULL);
-      icon->is_svg = min_suffix == ICON_SUFFIX_SVG;
+      icon->is_svg = min_suffix == ICON_CACHE_FLAG_SVG_SUFFIX;
       icon->is_resource = dir->is_resource;
       g_free (filename);
 
@@ -3238,10 +3227,10 @@ scan_directory (GtkIconTheme  *self,
   while ((name = g_dir_read_name (gdir)))
     {
       gchar *base_name;
-      IconSuffix suffix, hash_suffix;
+      IconCacheFlag suffix, hash_suffix;
 
       suffix = suffix_from_name (name);
-      if (suffix == ICON_SUFFIX_NONE)
+      if (suffix == ICON_CACHE_FLAG_NONE)
         continue;
 
       if (!icons)
@@ -3276,10 +3265,10 @@ scan_resource_directory (GtkIconTheme  *self,
     {
       const char *name = children[i];
       gchar *base_name;
-      IconSuffix suffix, hash_suffix;
+      IconCacheFlag suffix, hash_suffix;
 
       suffix = suffix_from_name (name);
-      if (suffix == ICON_SUFFIX_NONE)
+      if (suffix == ICON_CACHE_FLAG_NONE)
         continue;
 
       if (!icons)
@@ -4271,7 +4260,7 @@ gtk_icon_new_for_file (GFile *file,
       icon->filename = g_file_get_path (file);
     }
 
-  icon->is_svg = suffix_from_name (icon->filename) == ICON_SUFFIX_SVG;
+  icon->is_svg = suffix_from_name (icon->filename) == ICON_CACHE_FLAG_SVG_SUFFIX;
 
   icon->desired_size = size;
   icon->desired_scale = scale;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]