From d9889062d89bc8a7e4c58ec91dd0ba30eb271524 Mon Sep 17 00:00:00 2001 From: Shilpa Singh Date: Mon, 27 Jun 2016 11:30:01 -0700 Subject: [PATCH] elm_atspi_bridge: add bounds-changed signal sending code. Summary: Add bounds-changed signal, this signal can be sent on geometry change of any evas object when atspi mode is enabled. Test Plan: connect to "object:bounds-changed" signal on screen-reader. when signal BoundsChanged is emitted from elm using elm_interface_atspi_accessible_bounds_changed_signal_emit, the signal should be received and we should be able to access geometry. Signed-off-by: Shilpa Singh Reviewers: cedric, lukasz.stanislawski, kimcinoo Subscribers: govi, rajeshps, cedric, jpeg Differential Revision: https://phab.enlightenment.org/D4100 Signed-off-by: Cedric Bail --- src/lib/elementary/elm_atspi_bridge.c | 16 +++++++++++++++- src/lib/elementary/elm_interface_atspi_accessible.eo | 9 +++++++++ src/lib/elementary/elm_interface_atspi_accessible.h | 9 +++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/lib/elementary/elm_atspi_bridge.c b/src/lib/elementary/elm_atspi_bridge.c index caf2c39..8ba97c2 100644 --- a/src/lib/elementary/elm_atspi_bridge.c +++ b/src/lib/elementary/elm_atspi_bridge.c @@ -116,6 +116,7 @@ static int _init_count = 0; // Object Event handlers static void _state_changed_signal_send(void *data, const Eo_Event *event); +static void _bounds_changed_signal_send(void *data, const Eo_Event *event); static void _property_changed_signal_send(void *data, const Eo_Event *event); static void _children_changed_signal_send(void *data, const Eo_Event *event); static void _window_signal_send(void *data, const Eo_Event *event); @@ -150,6 +151,7 @@ typedef struct { static const Elm_Atspi_Bridge_Event_Handler event_handlers[] = { { ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_CHILDREN_CHANGED, _children_changed_signal_send}, { ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_PROPERTY_CHANGED, _property_changed_signal_send}, + { ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_BOUNDS_CHANGED, _bounds_changed_signal_send}, { ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_STATE_CHANGED, _state_changed_signal_send}, { ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_VISIBLE_DATA_CHANGED, _visible_data_changed_signal_send}, { ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_ACTIVE_DESCENDANT_CHANGED, _active_descendant_changed_signal_send}, @@ -234,7 +236,7 @@ enum _Atspi_Window_Signals static const Eldbus_Signal _event_obj_signals[] = { [ATSPI_OBJECT_EVENT_PROPERTY_CHANGED] = {"PropertyChange", ELDBUS_ARGS({"siiv(so)", NULL}), 0}, - [ATSPI_OBJECT_EVENT_BOUNDS_CHANGED] = {"BoundsChange", ELDBUS_ARGS({"siiv(so)", NULL}), 0}, + [ATSPI_OBJECT_EVENT_BOUNDS_CHANGED] = {"BoundsChanged", ELDBUS_ARGS({"siiv(iiii)", NULL}), 0}, [ATSPI_OBJECT_EVENT_LINK_SELECTED] = {"LinkSelected", ELDBUS_ARGS({"siiv(so)", NULL}), 0}, [ATSPI_OBJECT_EVENT_STATE_CHANGED] = {"StateChanged", ELDBUS_ARGS({"siiv(so)", NULL}), 0}, [ATSPI_OBJECT_EVENT_CHILDREN_CHANGED] = {"ChildrenChanged", ELDBUS_ARGS({"siiv(so)", NULL}), 0}, @@ -3718,6 +3720,8 @@ _set_broadcast_flag(const char *event, Eo *bridge) STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_ACTIVE_DESCENDANT_CHANGED); else if (!strcmp(tokens[1], "SelectionChanged")) STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_SELECTION_CHANGED); + else if (!strcmp(tokens[1], "BoundsChanged")) + STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_BOUNDS_CHANGED); } else if (!strcmp(tokens[0], "Window")) { @@ -3826,6 +3830,16 @@ _state_changed_signal_send(void *data, const Eo_Event *event) } static void +_bounds_changed_signal_send(void *data, const Eo_Event *event) +{ + Elm_Atspi_Event_Geometry_Changed_Data *geo_data = event->info; + + _bridge_signal_send(data, event->object, ATSPI_DBUS_INTERFACE_EVENT_OBJECT, + &_event_obj_signals[ATSPI_OBJECT_EVENT_BOUNDS_CHANGED], "", 0, 0, "(iiii)", + geo_data->x, geo_data->y, geo_data->width, geo_data->height); +} + +static void _property_changed_signal_send(void *data, const Eo_Event *event) { const char *property = event->info; diff --git a/src/lib/elementary/elm_interface_atspi_accessible.eo b/src/lib/elementary/elm_interface_atspi_accessible.eo index c178a23..a1b89a1 100644 --- a/src/lib/elementary/elm_interface_atspi_accessible.eo +++ b/src/lib/elementary/elm_interface_atspi_accessible.eo @@ -202,6 +202,14 @@ struct Elm.Atspi.Event.State_Changed.Data new_value: bool; } +struct Elm.Atspi.Event.Geometry_Changed.Data +{ + x: int; + y: int; + width: int; + height: int; +} + struct Elm.Atspi.Event.Children_Changed.Data { is_added: bool; @@ -430,6 +438,7 @@ mixin Elm.Interface.Atspi_Accessible () property,changed: string; children,changed: Elm.Atspi.Event.Children_Changed.Data; state,changed: Elm.Atspi.Event.State_Changed.Data; + bounds,changed: Elm.Atspi.Event.Geometry_Changed.Data; visible,data,changed; active,descendant,changed; added; diff --git a/src/lib/elementary/elm_interface_atspi_accessible.h b/src/lib/elementary/elm_interface_atspi_accessible.h index 51f03e2..929216b 100644 --- a/src/lib/elementary/elm_interface_atspi_accessible.h +++ b/src/lib/elementary/elm_interface_atspi_accessible.h @@ -79,6 +79,15 @@ EAPI Elm_Atspi_Relation_Set elm_atspi_relation_set_clone(const Elm_Atspi_Relatio } while(0); } /** + * Emits ATSPI 'BoundsChanged' dbus signal. + */ +#define elm_interface_atspi_accessible_bounds_changed_signal_emit(obj, x, y, width, height) \ + do { \ + Elm_Atspi_Event_Geometry_Changed_Data evinfo = { x, y, width, height }; \ + elm_interface_atspi_accessible_event_emit(ELM_INTERFACE_ATSPI_ACCESSIBLE_MIXIN, obj, ELM_INTERFACE_ATSPI_ACCESSIBLE_EVENT_BOUNDS_CHANGED, (void*)&evinfo); \ + } while(0); + +/** * Emits ATSPI 'PropertyChanged' dbus signal for 'Name' property. */ #define elm_interface_atspi_accessible_name_changed_signal_emit(obj) \ -- 2.7.4