Small optimization

We can use the fact that all involved strings are interned; also
deprecate gtk_binding_set_add_path() in the headers, too.
This commit is contained in:
Matthias Clasen 2011-01-30 22:51:21 -05:00
parent f67ab808fd
commit 175c57ebd7
2 changed files with 25 additions and 18 deletions

View File

@ -736,15 +736,28 @@ gtk_binding_set_by_class (gpointer object_class)
return binding_set;
binding_set = gtk_binding_set_new (g_type_name (G_OBJECT_CLASS_TYPE (class)));
gtk_binding_set_add_path (binding_set,
GTK_PATH_CLASS,
g_type_name (G_OBJECT_CLASS_TYPE (class)),
GTK_PATH_PRIO_GTK);
g_dataset_id_set_data (class, key_id_class_binding_set, binding_set);
return binding_set;
}
static GtkBindingSet*
gtk_binding_set_find_interned (const gchar *set_name)
{
GSList *slist;
for (slist = binding_set_list; slist; slist = slist->next)
{
GtkBindingSet *binding_set;
binding_set = slist->data;
if (binding_set->set_name == set_name)
return binding_set;
}
return NULL;
}
/**
* gtk_binding_set_find:
* @set_name: unique binding set name
@ -759,19 +772,9 @@ gtk_binding_set_by_class (gpointer object_class)
GtkBindingSet*
gtk_binding_set_find (const gchar *set_name)
{
GSList *slist;
g_return_val_if_fail (set_name != NULL, NULL);
for (slist = binding_set_list; slist; slist = slist->next)
{
GtkBindingSet *binding_set;
binding_set = slist->data;
if (g_str_equal (binding_set->set_name, (gpointer) set_name))
return binding_set;
}
return NULL;
return gtk_binding_set_find_interned (g_intern_string (set_name));
}
/**
@ -1406,8 +1409,10 @@ gtk_binding_entry_add_signal_from_string (GtkBindingSet *binding_set,
* @path_pattern: the actual match pattern
* @priority: binding priority
*
* This function is used internally by the GtkRC parsing mechanism to
* assign match patterns to #GtkBindingSet structures.
* This function was used internally by the GtkRC parsing mechanism
* to assign match patterns to #GtkBindingSet structures.
*
* In GTK+ 3, these match patterns are unused.
*
* Deprecated: 3.0
*/
@ -1572,7 +1577,7 @@ gtk_bindings_activate_list (GObject *object,
while (class_type && !handled)
{
binding_set = gtk_binding_set_find (g_type_name (class_type));
binding_set = gtk_binding_set_find_interned (g_type_name (class_type));
class_type = g_type_parent (class_type);
if (!binding_set)

View File

@ -180,10 +180,12 @@ void gtk_binding_entry_remove (GtkBindingSet *binding_set,
guint keyval,
GdkModifierType modifiers);
#ifndef GTK_DISABLE_DEPRECATED
void gtk_binding_set_add_path (GtkBindingSet *binding_set,
GtkPathType path_type,
const gchar *path_pattern,
GtkPathPriorityType priority);
#endif
G_END_DECLS