atspi: send scroll started/finished events 45/282245/3
authorHosang Kim <hosang12.kim@samsung.com>
Thu, 29 Sep 2022 04:37:19 +0000 (13:37 +0900)
committerkim hosang <hosang12.kim@samsung.com>
Thu, 27 Oct 2022 05:05:40 +0000 (05:05 +0000)
When scroll is draged or animated,
elementary send 'object:scroll-started' and 'object:scroll-finishend'

Change-Id: I0b782fdcdeb8ac79358a27b5e64bcf6d0ec0c6ce

src/lib/elementary/efl_access_object.eo
src/lib/elementary/efl_access_object.h
src/lib/elementary/elm_atspi_bridge.c
src/lib/elementary/elm_interface_scrollable.c

index d3e3cd5..59a03d8 100644 (file)
@@ -645,6 +645,8 @@ mixin @beta Efl.Access.Object requires Efl.Object
 
       // TIZEN_ONLY
       move,outed: void;
+      object,scroll,started: void;
+      object,scroll,finished: void;
       //
    }
 }
index badaaae..0abb6c9 100644 (file)
@@ -136,6 +136,24 @@ efl_access_attribute_free(Efl_Access_Attribute *attr);
    } while(0);
 //
 
+//TIZEN_ONLY(20220927): atspi: send scroll started/finished event
+/**
+ * Emits ATSPI 'ScrollStarted' dbus signal.
+ */
+#define efl_access_scroll_started_signal_emit(obj) \
+   do { \
+         efl_access_object_event_emit(obj, EFL_ACCESS_OBJECT_EVENT_OBJECT_SCROLL_STARTED, NULL); \
+   } while(0);
+
+/**
+ * Emits ATSPI 'ScrollStoped' dbus signal.
+ */
+#define efl_access_scroll_finished_signal_emit(obj) \
+   do { \
+         efl_access_object_event_emit(obj, EFL_ACCESS_OBJECT_EVENT_OBJECT_SCROLL_FINISHED, NULL); \
+   } while(0);
+//
+
 /**
  * Emits Accessible 'PropertyChanged' signal for 'Name' property.
  */
index 1e525a2..7e34afe 100644 (file)
@@ -186,6 +186,10 @@ static unsigned char accept_object(Eo *obj);
 //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
 static void _move_outed_signal_send(void *data, const Efl_Event *event);
 //
+//TIZEN_ONLY(20220927): atspi: send scroll started/finished event
+static void _scroll_started_signal_send(void *data, const Efl_Event *event);
+static void _scroll_finished_signal_send(void *data, const Efl_Event *event);
+//
 
 // bridge private methods
 //TIZEN_ONLY(20171108): make atspi_proxy work
@@ -243,7 +247,11 @@ static const Elm_Atspi_Bridge_Event_Handler event_handlers[] = {
    { EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_REMOVED, _text_text_removed_send },
    { EFL_ACCESS_TEXT_EVENT_ACCESS_TEXT_SELECTION_CHANGED, _text_selection_changed_send },
    //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
-   { EFL_ACCESS_OBJECT_EVENT_MOVE_OUTED, _move_outed_signal_send}
+   { EFL_ACCESS_OBJECT_EVENT_MOVE_OUTED, _move_outed_signal_send },
+   //
+   //TIZEN_ONLY(20220927): atspi: send scroll started/finished event
+   { EFL_ACCESS_OBJECT_EVENT_OBJECT_SCROLL_STARTED, _scroll_started_signal_send },
+   { EFL_ACCESS_OBJECT_EVENT_OBJECT_SCROLL_FINISHED, _scroll_finished_signal_send }
    //
 };
 
@@ -296,7 +304,11 @@ enum _Atspi_Object_Signals {
    ATSPI_OBJECT_EVENT_TEXT_CARET_MOVED,
    ATSPI_OBJECT_EVENT_ATTRIBUTES_CHANGED,
    //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
-   ATSPI_OBJECT_EVENT_MOVE_OUTED
+   ATSPI_OBJECT_EVENT_MOVE_OUTED,
+   //
+   //TIZEN_ONLY(20220927): atspi: send scroll started/finished event
+   ATSPI_OBJECT_EVENT_SCROLL_STARTED,
+   ATSPI_OBJECT_EVENT_SCROLL_FINISHED
    //
 };
 
@@ -348,6 +360,10 @@ static const Eldbus_Signal _event_obj_signals[] = {
    //TIZEN_ONLY(20160623): atspi: moved highlight when object is out of screen
    [ATSPI_OBJECT_EVENT_MOVE_OUTED] = {"MoveOuted", ELDBUS_ARGS({"siiv(i)", NULL}), 0},
    //
+   //TIZEN_ONLY(20220927): atspi: send scroll started/finished event
+   [ATSPI_OBJECT_EVENT_SCROLL_STARTED] = {"ScrollStarted", ELDBUS_ARGS({"siiv(so)", NULL}), 0},
+   [ATSPI_OBJECT_EVENT_SCROLL_FINISHED] = {"ScrollFinished", ELDBUS_ARGS({"siiv(so)", NULL}), 0},
+   //
    {NULL, ELDBUS_ARGS({NULL, NULL}), 0}
 };
 
@@ -6076,6 +6092,12 @@ _set_broadcast_flag(const char *event, Eo *bridge)
         else if (!strcmp(tokens[1], "MoveOuted"))
           STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_MOVE_OUTED);
         //
+        //TIZEN_ONLY(20220927): atspi: send scroll started/finished event
+        else if (!strcmp(tokens[1], "ScrollStarted"))
+          STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_SCROLL_STARTED);
+        else if (!strcmp(tokens[1], "ScrollFinished"))
+          STATE_TYPE_SET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_SCROLL_FINISHED);
+        //
      }
    else if (!strcmp(tokens[0], "Window"))
      {
@@ -6446,6 +6468,36 @@ _move_outed_signal_send(void *data, const Efl_Event *event)
 }
 //
 
+//TIZEN_ONLY(20220927): atspi: send scroll started/finished event
+static void
+_scroll_started_signal_send(void *data, const Efl_Event *event)
+{
+   ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN(data, pd);
+
+   if (!STATE_TYPE_GET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_SCROLL_STARTED))
+     {
+        efl_event_callback_stop(event->object);
+        return;
+     }
+   _bridge_signal_send(data, event->object, ATSPI_DBUS_INTERFACE_EVENT_OBJECT,
+                       &_event_obj_signals[ATSPI_OBJECT_EVENT_SCROLL_STARTED], "", 0, 0, NULL);
+}
+
+static void
+_scroll_finished_signal_send(void *data, const Efl_Event *event)
+{
+   ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN(data, pd);
+
+   if (!STATE_TYPE_GET(pd->object_broadcast_mask, ATSPI_OBJECT_EVENT_SCROLL_FINISHED))
+     {
+        efl_event_callback_stop(event->object);
+        return;
+     }
+   _bridge_signal_send(data, event->object, ATSPI_DBUS_INTERFACE_EVENT_OBJECT,
+                       &_event_obj_signals[ATSPI_OBJECT_EVENT_SCROLL_FINISHED], "", 0, 0, NULL);
+}
+//
+
 static unsigned int
 _window_activated_detail_value_add(Eo *obj)
 {
index 0c8fc26..7b8e2cf 100644 (file)
@@ -1425,6 +1425,13 @@ _elm_scroll_scroll_start(Elm_Scrollable_Smart_Interface_Data *sid)
 
    if (sid->cb_func.scroll_start)
      sid->cb_func.scroll_start(sid->obj, NULL);
+
+   //TIZEN_ONLY(20220927): atspi: send scroll started/finished event
+   if (_elm_atspi_enabled())
+     {
+       efl_access_scroll_started_signal_emit(sid->obj);
+     }
+   //
 }
 
 static void
@@ -1442,6 +1449,13 @@ _elm_scroll_scroll_stop(Elm_Scrollable_Smart_Interface_Data *sid)
 
    if (sid->cb_func.scroll_stop)
      sid->cb_func.scroll_stop(sid->obj, NULL);
+
+   //TIZEN_ONLY(20220927): atspi: send scroll started/finished event
+   if (_elm_atspi_enabled())
+     {
+       efl_access_scroll_finished_signal_emit(sid->obj)
+     }
+   //
 }
 //