summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Pablo Ugarte <juanpablougarte@gmail.com>2016-05-16 17:08:52 -0300
committerJuan Pablo Ugarte <juanpablougarte@gmail.com>2016-05-18 21:14:46 -0300
commiteae2e01f7411aff1592749ad0ced9feb68d9ed18 (patch)
tree5a1a3cc89f62aa9433317df38215d1869a79d265
parentb8231a55dfb121812c974a04662768efed059505 (diff)
downloadglade-eae2e01f7411aff1592749ad0ced9feb68d9ed18.tar.gz
GladeWidgetAdaptor: use a direct hash for the adaptor hash table by stuffing the GType into a pointer with GSIZE_TO_POINTER()
-rw-r--r--gladeui/glade-widget-adaptor.c53
1 files changed, 9 insertions, 44 deletions
diff --git a/gladeui/glade-widget-adaptor.c b/gladeui/glade-widget-adaptor.c
index d9ada454..74917fda 100644
--- a/gladeui/glade-widget-adaptor.c
+++ b/gladeui/glade-widget-adaptor.c
@@ -212,20 +212,6 @@ gwa_create_cursor (GladeWidgetAdaptor *adaptor)
g_object_unref (widget_pixbuf);
}
-
-
-static gboolean
-gwa_gtype_equal (gconstpointer v1, gconstpointer v2)
-{
- return *((const GType *) v1) == *((const GType *) v2);
-}
-
-static guint
-gwa_gtype_hash (gconstpointer v)
-{
- return *(const GType *) v;
-}
-
static gboolean
glade_widget_adaptor_hash_find (gpointer key,
gpointer value,
@@ -1851,7 +1837,7 @@ glade_widget_adaptor_get_signals (GladeWidgetAdaptor *adaptor)
}
static void
-accum_adaptor (GType *type, GladeWidgetAdaptor *adaptor, GList **list)
+accum_adaptor (gpointer key, GladeWidgetAdaptor *adaptor, GList **list)
{
*list = g_list_prepend (*list, adaptor);
}
@@ -1893,11 +1879,10 @@ glade_widget_adaptor_register (GladeWidgetAdaptor *adaptor)
}
if (!adaptor_hash)
- adaptor_hash = g_hash_table_new_full (gwa_gtype_hash, gwa_gtype_equal,
- g_free, g_object_unref);
+ adaptor_hash = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+ NULL, g_object_unref);
- g_hash_table_insert (adaptor_hash,
- g_memdup (&adaptor->priv->type, sizeof (GType)), adaptor);
+ g_hash_table_insert (adaptor_hash, GSIZE_TO_POINTER (adaptor->priv->type), adaptor);
g_signal_emit_by_name (glade_app_get (), "widget-adaptor-registered", adaptor, NULL);
}
@@ -3028,22 +3013,6 @@ glade_widget_adaptor_create_widget_real (gboolean query,
return gwidget;
}
-typedef struct
-{
- const gchar *name;
- GladeWidgetAdaptor *adaptor;
-} GladeAdaptorSearchPair;
-
-
-static void
-search_adaptor_by_name (GType *type,
- GladeWidgetAdaptor *adaptor,
- GladeAdaptorSearchPair *pair)
-{
- if (!strcmp (adaptor->priv->name, pair->name))
- pair->adaptor = adaptor;
-}
-
/**
* glade_widget_adaptor_get_by_name:
* @name: name of the widget class (for instance: GtkButton)
@@ -3054,16 +3023,12 @@ search_adaptor_by_name (GType *type,
GladeWidgetAdaptor *
glade_widget_adaptor_get_by_name (const gchar *name)
{
+ GType type = g_type_from_name (name);
+ if (adaptor_hash && type)
+ return g_hash_table_lookup (adaptor_hash, GSIZE_TO_POINTER (type));
- GladeAdaptorSearchPair pair = { name, NULL };
-
- if (adaptor_hash != NULL)
- {
- g_hash_table_foreach (adaptor_hash,
- (GHFunc) search_adaptor_by_name, &pair);
- }
- return pair.adaptor;
+ return NULL;
}
@@ -3078,7 +3043,7 @@ GladeWidgetAdaptor *
glade_widget_adaptor_get_by_type (GType type)
{
if (adaptor_hash != NULL)
- return g_hash_table_lookup (adaptor_hash, &type);
+ return g_hash_table_lookup (adaptor_hash, GSIZE_TO_POINTER (type));
else
return NULL;
}