forked from AuroraMiddleware/gtk
Merge branch 'ebassi/for-master' into 'master'
Ebassi/for master See merge request GNOME/gtk!2480
This commit is contained in:
commit
c21b9bec95
@ -55,6 +55,13 @@ G_DEFINE_INTERFACE (GtkAccessible, gtk_accessible, G_TYPE_OBJECT)
|
||||
static void
|
||||
gtk_accessible_default_init (GtkAccessibleInterface *iface)
|
||||
{
|
||||
/**
|
||||
* GtkAccessible:accessible-role:
|
||||
*
|
||||
* The accessible role of the given #GtkAccessible implementation.
|
||||
*
|
||||
* The accessible role cannot be changed once set.
|
||||
*/
|
||||
GParamSpec *pspec =
|
||||
g_param_spec_enum ("accessible-role",
|
||||
"Accessible Role",
|
||||
@ -172,12 +179,13 @@ out:
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_accessible_update_state_value:
|
||||
* gtk_accessible_update_state_value: (rename-to gtk_accessible_update_state)
|
||||
* @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,35 +194,40 @@ 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);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
gtk_at_context_set_accessible_state (context, state, real_value);
|
||||
|
||||
if (real_value != NULL)
|
||||
gtk_accessible_value_unref (real_value);
|
||||
|
||||
gtk_at_context_update (context);
|
||||
}
|
||||
|
||||
@ -310,12 +323,13 @@ out:
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_accessible_update_property_value:
|
||||
* gtk_accessible_update_property_value: (rename-to gtk_accessible_update_property)
|
||||
* @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,35 +338,40 @@ 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);
|
||||
|
||||
if (real_value != NULL)
|
||||
gtk_accessible_value_unref (real_value);
|
||||
}
|
||||
|
||||
gtk_at_context_set_accessible_property (context, property, real_value);
|
||||
|
||||
if (real_value != NULL)
|
||||
gtk_accessible_value_unref (real_value);
|
||||
|
||||
gtk_at_context_update (context);
|
||||
}
|
||||
|
||||
@ -439,12 +458,13 @@ out:
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_accessible_update_relation_value:
|
||||
* gtk_accessible_update_relation_value: (rename-to gtk_accessible_update_relation)
|
||||
* @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,35 +473,40 @@ 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);
|
||||
|
||||
if (real_value != NULL)
|
||||
gtk_accessible_value_unref (real_value);
|
||||
}
|
||||
|
||||
gtk_at_context_set_accessible_relation (context, relation, real_value);
|
||||
|
||||
if (real_value != NULL)
|
||||
gtk_accessible_value_unref (real_value);
|
||||
|
||||
gtk_at_context_update (context);
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -114,13 +114,26 @@ gtk_accessible_attribute_set_unref (GtkAccessibleAttributeSet *self)
|
||||
*
|
||||
* If you want to remove @attribute from the set, use gtk_accessible_attribute_set_remove()
|
||||
* instead.
|
||||
*
|
||||
* Returns: %TRUE if the set was modified, and %FALSE otherwise
|
||||
*/
|
||||
void
|
||||
gboolean
|
||||
gtk_accessible_attribute_set_add (GtkAccessibleAttributeSet *self,
|
||||
int attribute,
|
||||
GtkAccessibleValue *value)
|
||||
{
|
||||
g_return_if_fail (attribute >= 0 && attribute < self->n_attributes);
|
||||
g_return_val_if_fail (attribute >= 0 && attribute < self->n_attributes, FALSE);
|
||||
|
||||
if (value != NULL)
|
||||
{
|
||||
if (gtk_accessible_value_equal (value, self->attribute_values[attribute]))
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!_gtk_bitmask_get (self->attributes_set, attribute))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_clear_pointer (&(self->attribute_values[attribute]), gtk_accessible_value_unref);
|
||||
|
||||
@ -130,18 +143,34 @@ gtk_accessible_attribute_set_add (GtkAccessibleAttributeSet *self,
|
||||
self->attribute_values[attribute] = (* self->default_func) (attribute);
|
||||
|
||||
self->attributes_set = _gtk_bitmask_set (self->attributes_set, attribute, TRUE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
/*< private >
|
||||
* gtk_accessible_attribute_set_remove:
|
||||
* @self: a #GtkAccessibleAttributeSet
|
||||
* @attribute: the attribute to be removed
|
||||
*
|
||||
* Resets the @attribute in the given #GtkAccessibleAttributeSet to its default value.
|
||||
*
|
||||
* Returns: %TRUE if the set was modified, and %FALSE otherwise
|
||||
*/
|
||||
gboolean
|
||||
gtk_accessible_attribute_set_remove (GtkAccessibleAttributeSet *self,
|
||||
int attribute)
|
||||
{
|
||||
g_return_if_fail (attribute >= 0 && attribute < self->n_attributes);
|
||||
g_return_val_if_fail (attribute >= 0 && attribute < self->n_attributes, FALSE);
|
||||
|
||||
if (!_gtk_bitmask_get (self->attributes_set, attribute))
|
||||
return FALSE;
|
||||
|
||||
g_clear_pointer (&(self->attribute_values[attribute]), gtk_accessible_value_unref);
|
||||
|
||||
self->attribute_values[attribute] = (* self->default_func) (attribute);
|
||||
self->attributes_set = _gtk_bitmask_set (self->attributes_set, attribute, FALSE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
gboolean
|
||||
|
@ -37,10 +37,10 @@ void gtk_accessible_attribute_set_unref
|
||||
|
||||
gsize gtk_accessible_attribute_set_get_length (GtkAccessibleAttributeSet *self);
|
||||
|
||||
void gtk_accessible_attribute_set_add (GtkAccessibleAttributeSet *self,
|
||||
gboolean gtk_accessible_attribute_set_add (GtkAccessibleAttributeSet *self,
|
||||
int attribute,
|
||||
GtkAccessibleValue *value);
|
||||
void gtk_accessible_attribute_set_remove (GtkAccessibleAttributeSet *self,
|
||||
gboolean gtk_accessible_attribute_set_remove (GtkAccessibleAttributeSet *self,
|
||||
int state);
|
||||
gboolean gtk_accessible_attribute_set_contains (GtkAccessibleAttributeSet *self,
|
||||
int state);
|
||||
|
@ -185,6 +185,9 @@ gtk_accessible_value_equal (const GtkAccessibleValue *value_a,
|
||||
if (value_a == NULL || value_b == NULL)
|
||||
return FALSE;
|
||||
|
||||
if (value_a->value_class != value_b->value_class)
|
||||
return FALSE;
|
||||
|
||||
if (value_a->value_class->equal == NULL)
|
||||
return FALSE;
|
||||
|
||||
|
@ -175,12 +175,6 @@ gtk_at_context_class_init (GtkATContextClass *klass)
|
||||
/**
|
||||
* GtkATContext::state-change:
|
||||
* @self: the #GtkATContext
|
||||
* @changed_states: flags for the changed states
|
||||
* @changed_properties: flags for the changed properties
|
||||
* @changed_relations: flags for the changed relations
|
||||
* @states: the new states
|
||||
* @properties: the new properties
|
||||
* @relations: the new relations
|
||||
*
|
||||
* Emitted when the attributes of the accessible for the
|
||||
* #GtkATContext instance change.
|
||||
@ -189,12 +183,10 @@ gtk_at_context_class_init (GtkATContextClass *klass)
|
||||
g_signal_new ("state-change",
|
||||
G_TYPE_FROM_CLASS (gobject_class),
|
||||
G_SIGNAL_RUN_FIRST,
|
||||
G_STRUCT_OFFSET (GtkATContextClass, state_change),
|
||||
0,
|
||||
NULL, NULL,
|
||||
NULL,
|
||||
G_TYPE_NONE, 6,
|
||||
G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT,
|
||||
G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_POINTER);
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
g_object_class_install_properties (gobject_class, N_PROPS, obj_props);
|
||||
}
|
||||
@ -425,6 +417,12 @@ gtk_at_context_update (GtkATContext *self)
|
||||
{
|
||||
g_return_if_fail (GTK_IS_AT_CONTEXT (self));
|
||||
|
||||
/* There's no point in notifying of state changes if there weren't any */
|
||||
if (self->updated_properties == 0 &&
|
||||
self->updated_relations == 0 &&
|
||||
self->updated_states == 0)
|
||||
return;
|
||||
|
||||
GtkAccessibleStateChange changed_states =
|
||||
gtk_accessible_attribute_set_get_changed (self->states);
|
||||
GtkAccessiblePropertyChange changed_properties =
|
||||
@ -432,9 +430,14 @@ gtk_at_context_update (GtkATContext *self)
|
||||
GtkAccessibleRelationChange changed_relations =
|
||||
gtk_accessible_attribute_set_get_changed (self->relations);
|
||||
|
||||
g_signal_emit (self, obj_signals[STATE_CHANGE], 0,
|
||||
changed_states, changed_properties, changed_relations,
|
||||
self->states, self->properties, self->relations);
|
||||
GTK_AT_CONTEXT_GET_CLASS (self)->state_change (self,
|
||||
changed_states, changed_properties, changed_relations,
|
||||
self->states, self->properties, self->relations);
|
||||
g_signal_emit (self, obj_signals[STATE_CHANGE], 0);
|
||||
|
||||
self->updated_properties = 0;
|
||||
self->updated_relations = 0;
|
||||
self->updated_states = 0;
|
||||
}
|
||||
|
||||
/*< private >
|
||||
@ -447,7 +450,7 @@ gtk_at_context_update (GtkATContext *self)
|
||||
*
|
||||
* If @value is %NULL, the state is unset.
|
||||
*
|
||||
* This function will accumulate state changes until gtk_at_context_update_state()
|
||||
* This function will accumulate state changes until gtk_at_context_update()
|
||||
* is called.
|
||||
*/
|
||||
void
|
||||
@ -457,10 +460,15 @@ gtk_at_context_set_accessible_state (GtkATContext *self,
|
||||
{
|
||||
g_return_if_fail (GTK_IS_AT_CONTEXT (self));
|
||||
|
||||
gboolean res = FALSE;
|
||||
|
||||
if (value != NULL)
|
||||
gtk_accessible_attribute_set_add (self->states, state, value);
|
||||
res = gtk_accessible_attribute_set_add (self->states, state, value);
|
||||
else
|
||||
gtk_accessible_attribute_set_remove (self->states, state);
|
||||
res = gtk_accessible_attribute_set_remove (self->states, state);
|
||||
|
||||
if (res)
|
||||
self->updated_states |= (1 << state);
|
||||
}
|
||||
|
||||
/*< private >
|
||||
@ -509,7 +517,7 @@ gtk_at_context_get_accessible_state (GtkATContext *self,
|
||||
*
|
||||
* If @value is %NULL, the property is unset.
|
||||
*
|
||||
* This function will accumulate property changes until gtk_at_context_update_state()
|
||||
* This function will accumulate property changes until gtk_at_context_update()
|
||||
* is called.
|
||||
*/
|
||||
void
|
||||
@ -519,10 +527,15 @@ gtk_at_context_set_accessible_property (GtkATContext *self,
|
||||
{
|
||||
g_return_if_fail (GTK_IS_AT_CONTEXT (self));
|
||||
|
||||
gboolean res = FALSE;
|
||||
|
||||
if (value != NULL)
|
||||
gtk_accessible_attribute_set_add (self->properties, property, value);
|
||||
res = gtk_accessible_attribute_set_add (self->properties, property, value);
|
||||
else
|
||||
gtk_accessible_attribute_set_remove (self->properties, property);
|
||||
res = gtk_accessible_attribute_set_remove (self->properties, property);
|
||||
|
||||
if (res)
|
||||
self->updated_properties |= (1 << property);
|
||||
}
|
||||
|
||||
/*< private >
|
||||
@ -571,7 +584,7 @@ gtk_at_context_get_accessible_property (GtkATContext *self,
|
||||
*
|
||||
* If @value is %NULL, the relation is unset.
|
||||
*
|
||||
* This function will accumulate relation changes until gtk_at_context_update_state()
|
||||
* This function will accumulate relation changes until gtk_at_context_update()
|
||||
* is called.
|
||||
*/
|
||||
void
|
||||
@ -581,10 +594,15 @@ gtk_at_context_set_accessible_relation (GtkATContext *self,
|
||||
{
|
||||
g_return_if_fail (GTK_IS_AT_CONTEXT (self));
|
||||
|
||||
gboolean res = FALSE;
|
||||
|
||||
if (value != NULL)
|
||||
gtk_accessible_attribute_set_add (self->relations, relation, value);
|
||||
res = gtk_accessible_attribute_set_add (self->relations, relation, value);
|
||||
else
|
||||
gtk_accessible_attribute_set_remove (self->relations, relation);
|
||||
res = gtk_accessible_attribute_set_remove (self->relations, relation);
|
||||
|
||||
if (res)
|
||||
self->updated_relations |= (1 << relation);
|
||||
}
|
||||
|
||||
/*< private >
|
||||
|
@ -90,6 +90,10 @@ struct _GtkATContext
|
||||
GtkAccessibleAttributeSet *states;
|
||||
GtkAccessibleAttributeSet *properties;
|
||||
GtkAccessibleAttributeSet *relations;
|
||||
|
||||
GtkAccessibleStateChange updated_states;
|
||||
GtkAccessiblePropertyChange updated_properties;
|
||||
GtkAccessibleRelationChange updated_relations;
|
||||
};
|
||||
|
||||
struct _GtkATContextClass
|
||||
|
Loading…
Reference in New Issue
Block a user