summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2020-08-05 15:03:00 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2020-08-25 16:36:08 +0100
commit911a71c7052312f7990c71e84a1f688c03b9c174 (patch)
tree145a62baf8ac52ece54129e2e47c539824e579ad
parent701a0dabd0a911ced7907da30eec851723f20f5e (diff)
downloadgtk+-911a71c7052312f7990c71e84a1f688c03b9c174.tar.gz
a11y: Allow bulk attribute update with the GValue API
Like we do for the varargs API.
-rw-r--r--gtk/gtkaccessible.c150
-rw-r--r--gtk/gtkaccessible.h15
2 files changed, 93 insertions, 72 deletions
diff --git a/gtk/gtkaccessible.c b/gtk/gtkaccessible.c
index f8dc8640af..b136f1a946 100644
--- a/gtk/gtkaccessible.c
+++ b/gtk/gtkaccessible.c
@@ -174,10 +174,11 @@ out:
/**
* gtk_accessible_update_state_value:
* @self: a #GtkAccessible
- * @state: a #GtkAccessibleState
- * @value: a #GValue with the value for @state
+ * @n_states: the number of accessible states to set
+ * @states: (array length=n_states): an array of #GtkAccessibleState
+ * @values: (array length=n_states): an array of #GValues, one for each state
*
- * Updates an accessible state.
+ * Updates an array of accessible states.
*
* This function should be called by #GtkWidget types whenever an accessible
* state change must be communicated to assistive technologies.
@@ -186,34 +187,39 @@ out:
*/
void
gtk_accessible_update_state_value (GtkAccessible *self,
- GtkAccessibleState state,
- const GValue *value)
+ int n_states,
+ GtkAccessibleState states[],
+ const GValue values[])
{
- GtkATContext *context;
-
g_return_if_fail (GTK_IS_ACCESSIBLE (self));
+ g_return_if_fail (n_states > 0);
- context = gtk_accessible_get_at_context (self);
+ GtkATContext *context = gtk_accessible_get_at_context (self);
if (context == NULL)
return;
- GError *error = NULL;
- GtkAccessibleValue *real_value =
- gtk_accessible_value_collect_for_state_value (state, value, &error);
-
- if (error != NULL)
+ for (int i = 0; i < n_states; i++)
{
- g_critical ("Unable to collect the value for state “%s”: %s",
- gtk_accessible_state_get_attribute_name (state),
- error->message);
- g_error_free (error);
- return;
- }
+ GtkAccessibleState state = states[i];
+ const GValue *value = &(values[i]);
+ GError *error = NULL;
+ GtkAccessibleValue *real_value =
+ gtk_accessible_value_collect_for_state_value (state, value, &error);
- gtk_at_context_set_accessible_state (context, state, real_value);
+ if (error != NULL)
+ {
+ g_critical ("Unable to collect the value for state “%s”: %s",
+ gtk_accessible_state_get_attribute_name (state),
+ error->message);
+ g_error_free (error);
+ break;
+ }
+
+ gtk_at_context_set_accessible_state (context, state, real_value);
- if (real_value != NULL)
- gtk_accessible_value_unref (real_value);
+ if (real_value != NULL)
+ gtk_accessible_value_unref (real_value);
+ }
gtk_at_context_update (context);
}
@@ -312,10 +318,11 @@ out:
/**
* gtk_accessible_update_property_value:
* @self: a #GtkAccessible
- * @property: a #GtkAccessibleProperty
- * @value: a #GValue with the value for @property
+ * @n_properties: the number of accessible properties to set
+ * @properties: (array length=n_properties): an array of #GtkAccessibleProperty
+ * @values: (array length=n_properties): an array of #GValues, one for each property
*
- * Updates an accessible property.
+ * Updates an array of accessible properties.
*
* This function should be called by #GtkWidget types whenever an accessible
* property change must be communicated to assistive technologies.
@@ -324,34 +331,39 @@ out:
*/
void
gtk_accessible_update_property_value (GtkAccessible *self,
- GtkAccessibleProperty property,
- const GValue *value)
+ int n_properties,
+ GtkAccessibleProperty properties[],
+ const GValue values[])
{
- GtkATContext *context;
-
g_return_if_fail (GTK_IS_ACCESSIBLE (self));
+ g_return_if_fail (n_properties > 0);
- context = gtk_accessible_get_at_context (self);
+ GtkATContext *context = gtk_accessible_get_at_context (self);
if (context == NULL)
return;
- GError *error = NULL;
- GtkAccessibleValue *real_value =
- gtk_accessible_value_collect_for_property_value (property, value, &error);
-
- if (error != NULL)
+ for (int i = 0; i < n_properties; i++)
{
- g_critical ("Unable to collect the value for property “%s”: %s",
- gtk_accessible_property_get_attribute_name (property),
- error->message);
- g_error_free (error);
- return;
- }
+ GtkAccessibleProperty property = properties[i];
+ const GValue *value = &(values[i]);
+ GError *error = NULL;
+ GtkAccessibleValue *real_value =
+ gtk_accessible_value_collect_for_property_value (property, value, &error);
+
+ if (error != NULL)
+ {
+ g_critical ("Unable to collect the value for property “%s”: %s",
+ gtk_accessible_property_get_attribute_name (property),
+ error->message);
+ g_error_free (error);
+ break;
+ }
- gtk_at_context_set_accessible_property (context, property, real_value);
+ gtk_at_context_set_accessible_property (context, property, real_value);
- if (real_value != NULL)
- gtk_accessible_value_unref (real_value);
+ if (real_value != NULL)
+ gtk_accessible_value_unref (real_value);
+ }
gtk_at_context_update (context);
}
@@ -441,10 +453,11 @@ out:
/**
* gtk_accessible_update_relation_value:
* @self: a #GtkAccessible
- * @relation: a #GtkAccessibleRelation
- * @value: a #GValue with the value for @relation
+ * @n_relations: the number of accessible relations to set
+ * @relations: (array length=n_relations): an array of #GtkAccessibleRelation
+ * @values: (array length=n_relations): an array of #GValues, one for each relation
*
- * Updates an accessible relation.
+ * Updates an array of accessible relations.
*
* This function should be called by #GtkWidget types whenever an accessible
* relation change must be communicated to assistive technologies.
@@ -453,34 +466,39 @@ out:
*/
void
gtk_accessible_update_relation_value (GtkAccessible *self,
- GtkAccessibleRelation relation,
- const GValue *value)
+ int n_relations,
+ GtkAccessibleRelation relations[],
+ const GValue values[])
{
- GtkATContext *context;
-
g_return_if_fail (GTK_IS_ACCESSIBLE (self));
+ g_return_if_fail (n_relations > 0);
- context = gtk_accessible_get_at_context (self);
+ GtkATContext *context = gtk_accessible_get_at_context (self);
if (context == NULL)
return;
- GError *error = NULL;
- GtkAccessibleValue *real_value =
- gtk_accessible_value_collect_for_relation_value (relation, value, &error);
-
- if (error != NULL)
+ for (int i = 0; i < n_relations; i++)
{
- g_critical ("Unable to collect the value for relation “%s”: %s",
- gtk_accessible_relation_get_attribute_name (relation),
- error->message);
- g_error_free (error);
- return;
- }
+ GtkAccessibleRelation relation = relations[i];
+ const GValue *value = &(values[i]);
+ GError *error = NULL;
+ GtkAccessibleValue *real_value =
+ gtk_accessible_value_collect_for_relation_value (relation, value, &error);
+
+ if (error != NULL)
+ {
+ g_critical ("Unable to collect the value for relation “%s”: %s",
+ gtk_accessible_relation_get_attribute_name (relation),
+ error->message);
+ g_error_free (error);
+ break;
+ }
- gtk_at_context_set_accessible_relation (context, relation, real_value);
+ gtk_at_context_set_accessible_relation (context, relation, real_value);
- if (real_value != NULL)
- gtk_accessible_value_unref (real_value);
+ if (real_value != NULL)
+ gtk_accessible_value_unref (real_value);
+ }
gtk_at_context_update (context);
}
diff --git a/gtk/gtkaccessible.h b/gtk/gtkaccessible.h
index 0aec20974f..c8b00cd35b 100644
--- a/gtk/gtkaccessible.h
+++ b/gtk/gtkaccessible.h
@@ -52,16 +52,19 @@ void gtk_accessible_update_relation (GtkAccessible
...);
GDK_AVAILABLE_IN_ALL
void gtk_accessible_update_state_value (GtkAccessible *self,
- GtkAccessibleState state,
- const GValue *value);
+ int n_states,
+ GtkAccessibleState states[],
+ const GValue values[]);
GDK_AVAILABLE_IN_ALL
void gtk_accessible_update_property_value (GtkAccessible *self,
- GtkAccessibleProperty property,
- const GValue *value);
+ int n_properties,
+ GtkAccessibleProperty properties[],
+ const GValue values[]);
GDK_AVAILABLE_IN_ALL
void gtk_accessible_update_relation_value (GtkAccessible *self,
- GtkAccessibleRelation relation,
- const GValue *value);
+ int n_relations,
+ GtkAccessibleRelation relations[],
+ const GValue values[]);
GDK_AVAILABLE_IN_ALL
void gtk_accessible_reset_state (GtkAccessible *self,