diff --git a/gobject/gparam.c b/gobject/gparam.c index e9d9eacb0..4311dbbc6 100644 --- a/gobject/gparam.c +++ b/gobject/gparam.c @@ -923,7 +923,8 @@ param_spec_pool_equals (gconstpointer key_spec_1, const GParamSpec *key2 = key_spec_2; return (key1->owner_type == key2->owner_type && - strcmp (key1->name, key2->name) == 0); + (key1->name == key2->name || + strcmp (key1->name, key2->name) == 0)); } /** @@ -1093,53 +1094,57 @@ g_param_spec_pool_lookup (GParamSpecPool *pool, gboolean walk_ancestors) { GParamSpec *pspec; - gchar *delim; g_return_val_if_fail (pool != NULL, NULL); g_return_val_if_fail (param_name != NULL, NULL); g_mutex_lock (&pool->mutex); - delim = pool->type_prefixing ? strchr (param_name, ':') : NULL; - /* try quick and away, i.e. without prefix */ - if (!delim) + pspec = param_spec_ht_lookup (pool->hash_table, param_name, owner_type, walk_ancestors); + if (pspec) { - pspec = param_spec_ht_lookup (pool->hash_table, param_name, owner_type, walk_ancestors); g_mutex_unlock (&pool->mutex); - return pspec; } - /* strip type prefix */ - if (pool->type_prefixing && delim[1] == ':') + if (pool->type_prefixing) { - guint l = delim - param_name; - gchar stack_buffer[32], *buffer = l < 32 ? stack_buffer : g_new (gchar, l + 1); - GType type; - - strncpy (buffer, param_name, delim - param_name); - buffer[l] = 0; - type = g_type_from_name (buffer); - if (l >= 32) - g_free (buffer); - if (type) /* type==0 isn't a valid type pefix */ - { - /* sanity check, these cases don't make a whole lot of sense */ - if ((!walk_ancestors && type != owner_type) || !g_type_is_a (owner_type, type)) - { - g_mutex_unlock (&pool->mutex); + char *delim; - return NULL; - } - owner_type = type; - param_name += l + 2; - pspec = param_spec_ht_lookup (pool->hash_table, param_name, owner_type, walk_ancestors); - g_mutex_unlock (&pool->mutex); + delim = strchr (param_name, ':'); - return pspec; - } + /* strip type prefix */ + if (delim && delim[1] == ':') + { + guint l = delim - param_name; + gchar stack_buffer[32], *buffer = l < 32 ? stack_buffer : g_new (gchar, l + 1); + GType type; + + strncpy (buffer, param_name, delim - param_name); + buffer[l] = 0; + type = g_type_from_name (buffer); + if (l >= 32) + g_free (buffer); + if (type) /* type==0 isn't a valid type pefix */ + { + /* sanity check, these cases don't make a whole lot of sense */ + if ((!walk_ancestors && type != owner_type) || !g_type_is_a (owner_type, type)) + { + g_mutex_unlock (&pool->mutex); + + return NULL; + } + owner_type = type; + param_name += l + 2; + pspec = param_spec_ht_lookup (pool->hash_table, param_name, owner_type, walk_ancestors); + g_mutex_unlock (&pool->mutex); + + return pspec; + } + } } + /* malformed param_name */ g_mutex_unlock (&pool->mutex); diff --git a/gobject/gparamspecs.c b/gobject/gparamspecs.c index d4ad8c21a..c7879842b 100644 --- a/gobject/gparamspecs.c +++ b/gobject/gparamspecs.c @@ -759,18 +759,6 @@ param_boxed_set_default (GParamSpec *pspec, value->data[0].v_pointer = NULL; } -static gboolean -param_boxed_validate (GParamSpec *pspec, - GValue *value) -{ - /* GParamSpecBoxed *bspec = G_PARAM_SPEC_BOXED (pspec); */ - guint changed = 0; - - /* can't do a whole lot here since we haven't even G_BOXED_TYPE() */ - - return changed; -} - static gint param_boxed_values_cmp (GParamSpec *pspec, const GValue *value1, @@ -1508,7 +1496,7 @@ _g_param_spec_types_init (void) G_TYPE_BOXED, /* value_type */ NULL, /* finalize */ param_boxed_set_default, /* value_set_default */ - param_boxed_validate, /* value_validate */ + NULL, /* value_validate */ param_boxed_values_cmp, /* values_cmp */ }; type = g_param_type_register_static (g_intern_static_string ("GParamBoxed"), &pspec_info);