elm_atspi_bridge: add bounds-changed signal sending code.
authorShilpa Singh <shilpa.singh@samsung.com>
Mon, 27 Jun 2016 18:30:01 +0000 (11:30 -0700)
committerCedric Bail <cedric@osg.samsung.com>
Mon, 27 Jun 2016 18:30:04 +0000 (11:30 -0700)
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 <shilpa.singh@samsung.com>
Reviewers: cedric, lukasz.stanislawski, kimcinoo

Subscribers: govi, rajeshps, cedric, jpeg

Differential Revision: https://phab.enlightenment.org/D4100

Signed-off-by: Cedric Bail <cedric@osg.samsung.com>
src/lib/elementary/elm_atspi_bridge.c
src/lib/elementary/elm_interface_atspi_accessible.eo
src/lib/elementary/elm_interface_atspi_accessible.h

index caf2c39..8ba97c2 100644 (file)
@@ -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;
index c178a23..a1b89a1 100644 (file)
@@ -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;
index 51f03e2..929216b 100644 (file)
@@ -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) \