diff options
author | Emmanuele Bassi <ebassi@gmail.com> | 2021-03-19 22:31:37 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gmail.com> | 2021-03-19 22:31:37 +0000 |
commit | 98a91a32909ae4f50d3b46fe81786cddba8ab97c (patch) | |
tree | f1fcc0ff687d34b6b0685d7886bccefe1137cb75 | |
parent | b9da74590be6860c55fa2dca7b61d785ae174fe6 (diff) | |
parent | 3cfe69d71108a47f080819edbc9e884199361d8f (diff) | |
download | gtk+-98a91a32909ae4f50d3b46fe81786cddba8ab97c.tar.gz |
Merge branch 'a11y-strdup' into 'master'
a11y: Don't copy attribute names in attribute sets
See merge request GNOME/gtk!3323
-rw-r--r-- | gtk/gtkaccessibleattributeset.c | 20 | ||||
-rw-r--r-- | gtk/gtkaccessibleattributesetprivate.h | 5 | ||||
-rw-r--r-- | gtk/gtkatcontext.c | 6 |
3 files changed, 13 insertions, 18 deletions
diff --git a/gtk/gtkaccessibleattributeset.c b/gtk/gtkaccessibleattributeset.c index f49a9cf911..2e7a072abc 100644 --- a/gtk/gtkaccessibleattributeset.c +++ b/gtk/gtkaccessibleattributeset.c @@ -29,44 +29,41 @@ struct _GtkAccessibleAttributeSet { gsize n_attributes; + GtkAccessibleAttributeNameFunc name_func; GtkAccessibleAttributeDefaultFunc default_func; GtkBitmask *attributes_set; - char **attribute_names; GtkAccessibleValue **attribute_values; }; static GtkAccessibleAttributeSet * gtk_accessible_attribute_set_init (GtkAccessibleAttributeSet *self, gsize n_attributes, - const char **attribute_names, + GtkAccessibleAttributeNameFunc name_func, GtkAccessibleAttributeDefaultFunc default_func) { self->n_attributes = n_attributes; + self->name_func = name_func; self->default_func = default_func; - self->attribute_names = g_new (char *, n_attributes); self->attribute_values = g_new (GtkAccessibleValue *, n_attributes); self->attributes_set = _gtk_bitmask_new (); /* Initialize all attribute values, so we can always get the full attribute */ for (int i = 0; i < self->n_attributes; i++) - { - self->attribute_names[i] = g_strdup (attribute_names[i]); - self->attribute_values[i] = (* self->default_func) (i); - } + self->attribute_values[i] = (* self->default_func) (i); return self; } GtkAccessibleAttributeSet * gtk_accessible_attribute_set_new (gsize n_attributes, - const char **attribute_names, + GtkAccessibleAttributeNameFunc name_func, GtkAccessibleAttributeDefaultFunc default_func) { GtkAccessibleAttributeSet *set = g_rc_box_new0 (GtkAccessibleAttributeSet); - return gtk_accessible_attribute_set_init (set, n_attributes, attribute_names, default_func); + return gtk_accessible_attribute_set_init (set, n_attributes, name_func, default_func); } GtkAccessibleAttributeSet * @@ -84,13 +81,10 @@ gtk_accessible_attribute_set_free (gpointer data) for (int i = 0; i < self->n_attributes; i++) { - g_free (self->attribute_names[i]); - if (self->attribute_values[i] != NULL) gtk_accessible_value_unref (self->attribute_values[i]); } - g_free (self->attribute_names); g_free (self->attribute_values); _gtk_bitmask_free (self->attributes_set); @@ -247,7 +241,7 @@ gtk_accessible_attribute_set_print (GtkAccessibleAttributeSet *self, continue; g_string_append (buffer, " "); - g_string_append (buffer, self->attribute_names[i]); + g_string_append (buffer, self->name_func (i)); g_string_append (buffer, ": "); gtk_accessible_value_print (self->attribute_values[i], buffer); diff --git a/gtk/gtkaccessibleattributesetprivate.h b/gtk/gtkaccessibleattributesetprivate.h index bce94d6876..cb52b7f62a 100644 --- a/gtk/gtkaccessibleattributesetprivate.h +++ b/gtk/gtkaccessibleattributesetprivate.h @@ -27,10 +27,11 @@ G_BEGIN_DECLS typedef struct _GtkAccessibleAttributeSet GtkAccessibleAttributeSet; +typedef const char *(* GtkAccessibleAttributeNameFunc) (int attribute); typedef GtkAccessibleValue *(* GtkAccessibleAttributeDefaultFunc) (int attribute); -GtkAccessibleAttributeSet * gtk_accessible_attribute_set_new (gsize n_attributes, - const char **attr_names, +GtkAccessibleAttributeSet * gtk_accessible_attribute_set_new (gsize n_attributes, + GtkAccessibleAttributeNameFunc name_func, GtkAccessibleAttributeDefaultFunc default_func); GtkAccessibleAttributeSet * gtk_accessible_attribute_set_ref (GtkAccessibleAttributeSet *self); void gtk_accessible_attribute_set_unref (GtkAccessibleAttributeSet *self); diff --git a/gtk/gtkatcontext.c b/gtk/gtkatcontext.c index 840c64e875..83c9be2a87 100644 --- a/gtk/gtkatcontext.c +++ b/gtk/gtkatcontext.c @@ -384,15 +384,15 @@ gtk_at_context_init (GtkATContext *self) self->properties = gtk_accessible_attribute_set_new (G_N_ELEMENTS (property_attrs), - property_attrs, + (GtkAccessibleAttributeNameFunc) gtk_accessible_property_get_attribute_name, (GtkAccessibleAttributeDefaultFunc) gtk_accessible_value_get_default_for_property); self->relations = gtk_accessible_attribute_set_new (G_N_ELEMENTS (relation_attrs), - relation_attrs, + (GtkAccessibleAttributeNameFunc) gtk_accessible_relation_get_attribute_name, (GtkAccessibleAttributeDefaultFunc) gtk_accessible_value_get_default_for_relation); self->states = gtk_accessible_attribute_set_new (G_N_ELEMENTS (state_attrs), - state_attrs, + (GtkAccessibleAttributeNameFunc) gtk_accessible_state_get_attribute_name, (GtkAccessibleAttributeDefaultFunc) gtk_accessible_value_get_default_for_state); } |