diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c index 93ad88f00..efe22dd19 100644 --- a/clutter/clutter-actor.c +++ b/clutter/clutter-actor.c @@ -3314,6 +3314,50 @@ clutter_actor_finalize (GObject *object) G_OBJECT_CLASS (clutter_actor_parent_class)->finalize (object); } + +/** + * clutter_actor_get_accessible: + * @actor: a #ClutterActor + * + * Returns the accessible object that describes the actor to an + * assistive technology. + * + * If no class-specific #AtkObject implementation is available for the + * actor instance in question, it will inherit an #AtkObject + * implementation from the first ancestor class for which such an + * implementation is defined. + * + * The documentation of the ATK + * library contains more information about accessible objects and + * their uses. + * + * Returns: (transfer none): the #AtkObject associated with @actor + */ +AtkObject* +clutter_actor_get_accessible (ClutterActor *actor) +{ + ClutterActorClass *klass; + + g_return_val_if_fail (CLUTTER_IS_ACTOR (actor), NULL); + + klass = CLUTTER_ACTOR_GET_CLASS (actor); + + g_return_val_if_fail (klass->get_accessible != NULL, NULL); + + return klass->get_accessible (actor); +} + +static AtkObject* +clutter_actor_real_get_accessible (ClutterActor *actor) +{ + AtkObject* accessible; + + accessible = atk_gobject_accessible_for_object (G_OBJECT (actor)); + + return accessible; +} + static void clutter_actor_class_init (ClutterActorClass *klass) { @@ -4685,6 +4729,7 @@ clutter_actor_class_init (ClutterActorClass *klass) klass->queue_redraw = clutter_actor_real_queue_redraw; klass->queue_relayout = clutter_actor_real_queue_relayout; klass->apply_transform = clutter_actor_real_apply_transform; + klass->get_accessible = clutter_actor_real_get_accessible; } static void diff --git a/clutter/clutter-actor.h b/clutter/clutter-actor.h index b7ae817a6..7a3915a02 100644 --- a/clutter/clutter-actor.h +++ b/clutter/clutter-actor.h @@ -33,6 +33,7 @@ #include #include +#include #include #include @@ -208,6 +209,8 @@ struct _ClutterActor * @apply_transform: virtual function, used when applying the transformations * to an actor before painting it or when transforming coordinates or * the allocation; it must chain up to the parent's implementation + * @get_accessible: virtual function, returns the accessible object that + * describes the actor to an assistive technology. * @parent_set: signal class handler for the #ClutterActor::parent-set * @destroy: signal class handler for #ClutterActor::destroy * @pick: virtual function, used to draw an outline of the actor with @@ -273,6 +276,9 @@ struct _ClutterActorClass void (* apply_transform) (ClutterActor *actor, CoglMatrix *matrix); + /* accessibility support */ + AtkObject* (*get_accessible) (ClutterActor *actor); + /* event signals */ gboolean (* event) (ClutterActor *actor, ClutterEvent *event); @@ -301,7 +307,7 @@ struct _ClutterActorClass /*< private >*/ /* padding for future expansion */ - gpointer _padding_dummy[31]; + gpointer _padding_dummy[30]; }; GType clutter_actor_get_type (void) G_GNUC_CONST; @@ -564,6 +570,8 @@ void clutter_actor_pop_internal (ClutterActor *sel gboolean clutter_actor_has_allocation (ClutterActor *self); +AtkObject* clutter_actor_get_accessible (ClutterActor *actor); + G_END_DECLS #endif /* __CLUTTER_ACTOR_H__ */