summaryrefslogtreecommitdiff
path: root/gtk/gtkicontheme.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2016-10-17 11:34:36 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2016-10-17 11:44:11 +0100
commit39e848c0eb396de601af26ca0aa4d29492e5f533 (patch)
tree02ce4c5289abb3f74a18ce7180024f63abd58bef /gtk/gtkicontheme.c
parent5563ba96bc083e57044d5a68570b053615267e5c (diff)
downloadgtk+-39e848c0eb396de601af26ca0aa4d29492e5f533.tar.gz
icontheme: Drop unnecessary allocation
Use a static array for the known icon sizes, now that we don't allow registering custom icon sizes any more. This allows us to cut a one-off allocation that makes Valgrind sad.
Diffstat (limited to 'gtk/gtkicontheme.c')
-rw-r--r--gtk/gtkicontheme.c137
1 files changed, 49 insertions, 88 deletions
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c
index b208b6363b..a2255d4933 100644
--- a/gtk/gtkicontheme.c
+++ b/gtk/gtkicontheme.c
@@ -5556,107 +5556,68 @@ typedef struct _IconSize IconSize;
struct _IconSize
{
- gint size;
- gchar *name;
-
- gint width;
- gint height;
-};
+ int size;
-typedef struct _IconAlias IconAlias;
+ const char *name;
-struct _IconAlias
-{
- gchar *name;
- gint target;
+ int width;
+ int height;
};
-static GHashTable *icon_aliases = NULL;
-static IconSize *icon_sizes = NULL;
-static gint icon_sizes_allocated = 0;
-static gint icon_sizes_used = 0;
-
-static void
-init_icon_sizes (void)
-{
- if (icon_sizes == NULL)
- {
-#define NUM_BUILTIN_SIZES 7
- /*gint i;*/
-
- icon_aliases = g_hash_table_new (g_str_hash, g_str_equal);
-
- icon_sizes = g_new (IconSize, NUM_BUILTIN_SIZES);
- icon_sizes_allocated = NUM_BUILTIN_SIZES;
- icon_sizes_used = NUM_BUILTIN_SIZES;
-
- icon_sizes[GTK_ICON_SIZE_INVALID].size = 0;
- icon_sizes[GTK_ICON_SIZE_INVALID].name = NULL;
- icon_sizes[GTK_ICON_SIZE_INVALID].width = 0;
- icon_sizes[GTK_ICON_SIZE_INVALID].height = 0;
-
- /* the name strings aren't copied since we don't ever remove
- * icon sizes, so we don't need to know whether they're static.
- * Even if we did I suppose removing the builtin sizes would be
- * disallowed.
- */
-
- icon_sizes[GTK_ICON_SIZE_MENU].size = GTK_ICON_SIZE_MENU;
- icon_sizes[GTK_ICON_SIZE_MENU].name = "gtk-menu";
- icon_sizes[GTK_ICON_SIZE_MENU].width = 16;
- icon_sizes[GTK_ICON_SIZE_MENU].height = 16;
-
- icon_sizes[GTK_ICON_SIZE_BUTTON].size = GTK_ICON_SIZE_BUTTON;
- icon_sizes[GTK_ICON_SIZE_BUTTON].name = "gtk-button";
- icon_sizes[GTK_ICON_SIZE_BUTTON].width = 16;
- icon_sizes[GTK_ICON_SIZE_BUTTON].height = 16;
-
- icon_sizes[GTK_ICON_SIZE_SMALL_TOOLBAR].size = GTK_ICON_SIZE_SMALL_TOOLBAR;
- icon_sizes[GTK_ICON_SIZE_SMALL_TOOLBAR].name = "gtk-small-toolbar";
- icon_sizes[GTK_ICON_SIZE_SMALL_TOOLBAR].width = 16;
- icon_sizes[GTK_ICON_SIZE_SMALL_TOOLBAR].height = 16;
-
- icon_sizes[GTK_ICON_SIZE_LARGE_TOOLBAR].size = GTK_ICON_SIZE_LARGE_TOOLBAR;
- icon_sizes[GTK_ICON_SIZE_LARGE_TOOLBAR].name = "gtk-large-toolbar";
- icon_sizes[GTK_ICON_SIZE_LARGE_TOOLBAR].width = 24;
- icon_sizes[GTK_ICON_SIZE_LARGE_TOOLBAR].height = 24;
-
- icon_sizes[GTK_ICON_SIZE_DND].size = GTK_ICON_SIZE_DND;
- icon_sizes[GTK_ICON_SIZE_DND].name = "gtk-dnd";
- icon_sizes[GTK_ICON_SIZE_DND].width = 32;
- icon_sizes[GTK_ICON_SIZE_DND].height = 32;
-
- icon_sizes[GTK_ICON_SIZE_DIALOG].size = GTK_ICON_SIZE_DIALOG;
- icon_sizes[GTK_ICON_SIZE_DIALOG].name = "gtk-dialog";
- icon_sizes[GTK_ICON_SIZE_DIALOG].width = 48;
- icon_sizes[GTK_ICON_SIZE_DIALOG].height = 48;
-
- g_assert ((GTK_ICON_SIZE_DIALOG + 1) == NUM_BUILTIN_SIZES);
-
- /* Alias everything to itself. */
- /*i = 1; [> skip invalid size <]*/
- /*while (i < NUM_BUILTIN_SIZES)*/
- /*{*/
- /*gtk_icon_size_register_alias (icon_sizes[i].name, icon_sizes[i].size);*/
-
- /*++i;*/
- /*}*/
-
-#undef NUM_BUILTIN_SIZES
- }
-}
+static const IconSize icon_sizes[] = {
+ [GTK_ICON_SIZE_INVALID] = {
+ .size = 0,
+ .name = NULL,
+ .width = 0,
+ .height = 0,
+ },
+ [GTK_ICON_SIZE_MENU] = {
+ .size = GTK_ICON_SIZE_MENU,
+ .name = "gtk-menu",
+ .width = 16,
+ .height = 16,
+ },
+ [GTK_ICON_SIZE_BUTTON] = {
+ .size = GTK_ICON_SIZE_BUTTON,
+ .name = "gtk-button",
+ .width = 16,
+ .height = 16,
+ },
+ [GTK_ICON_SIZE_SMALL_TOOLBAR] = {
+ .size = GTK_ICON_SIZE_SMALL_TOOLBAR,
+ .name = "gtk-small-toolbar",
+ .width = 16,
+ .height = 16,
+ },
+ [GTK_ICON_SIZE_LARGE_TOOLBAR] = {
+ .size = GTK_ICON_SIZE_LARGE_TOOLBAR,
+ .name = "gtk-large-toolbar",
+ .width = 24,
+ .height = 24,
+ },
+ [GTK_ICON_SIZE_DND] = {
+ .size = GTK_ICON_SIZE_DND,
+ .name = "gtk-dnd",
+ .width = 32,
+ .height = 32,
+ },
+ [GTK_ICON_SIZE_DIALOG] = {
+ .size = GTK_ICON_SIZE_DIALOG,
+ .name = "gtk-dialog",
+ .width = 48,
+ .height = 48,
+ },
+};
static gboolean
icon_size_lookup_intern (GtkIconSize size,
gint *widthp,
gint *heightp)
{
- init_icon_sizes ();
-
if (size == (GtkIconSize)-1)
return FALSE;
- if (size >= icon_sizes_used)
+ if (size >= G_N_ELEMENTS (icon_sizes))
return FALSE;
if (size == GTK_ICON_SIZE_INVALID)