From 34b5b2e62e3fac16491ef24b1aad47c83450841f Mon Sep 17 00:00:00 2001 From: Hosang Kim Date: Thu, 29 Sep 2022 13:37:19 +0900 Subject: [PATCH] atspi: send scroll started/finished events 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 | 2 + src/lib/elementary/efl_access_object.h | 18 +++++++++ src/lib/elementary/elm_atspi_bridge.c | 56 ++++++++++++++++++++++++++- src/lib/elementary/elm_interface_scrollable.c | 14 +++++++ 4 files changed, 88 insertions(+), 2 deletions(-) diff --git a/src/lib/elementary/efl_access_object.eo b/src/lib/elementary/efl_access_object.eo index d3e3cd5..59a03d8 100644 --- a/src/lib/elementary/efl_access_object.eo +++ b/src/lib/elementary/efl_access_object.eo @@ -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; // } } diff --git a/src/lib/elementary/efl_access_object.h b/src/lib/elementary/efl_access_object.h index badaaae..0abb6c9 100644 --- a/src/lib/elementary/efl_access_object.h +++ b/src/lib/elementary/efl_access_object.h @@ -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. */ diff --git a/src/lib/elementary/elm_atspi_bridge.c b/src/lib/elementary/elm_atspi_bridge.c index 1e525a2..7e34afe 100644 --- a/src/lib/elementary/elm_atspi_bridge.c +++ b/src/lib/elementary/elm_atspi_bridge.c @@ -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) { diff --git a/src/lib/elementary/elm_interface_scrollable.c b/src/lib/elementary/elm_interface_scrollable.c index 0c8fc26..7b8e2cf 100644 --- a/src/lib/elementary/elm_interface_scrollable.c +++ b/src/lib/elementary/elm_interface_scrollable.c @@ -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) + } + // } // -- 2.7.4