summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gmail.com>2021-03-19 22:31:37 +0000
committerEmmanuele Bassi <ebassi@gmail.com>2021-03-19 22:31:37 +0000
commit98a91a32909ae4f50d3b46fe81786cddba8ab97c (patch)
treef1fcc0ff687d34b6b0685d7886bccefe1137cb75
parentb9da74590be6860c55fa2dca7b61d785ae174fe6 (diff)
parent3cfe69d71108a47f080819edbc9e884199361d8f (diff)
downloadgtk+-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.c20
-rw-r--r--gtk/gtkaccessibleattributesetprivate.h5
-rw-r--r--gtk/gtkatcontext.c6
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);
}