kimcinoo pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=45aeaa67503f8d0abd509df8f9e5154f882c671e

commit 45aeaa67503f8d0abd509df8f9e5154f882c671e
Author: Shinwoo Kim <cinoo....@samsung.com>
Date:   Fri Jun 4 20:20:00 2021 +0900

    atspi: add atspi bridge ready event
    
    Summary:
    calling elm_init does not guarantee of readiness of atspi bridge
    even though elm_init is calling _elm_atspi_bridge_init.
    widget or user could want to know when the atspi bridge is ready.
    
    Reviewers: Hermet, jsuya, herb
    
    Reviewed By: Hermet
    
    Subscribers: cedric, #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D12283
---
 src/lib/elementary/elm_atspi_bridge.c | 22 +++++++++++++++++++++-
 src/lib/elementary/elm_general.h      | 28 ++++++++++++++++++++++++++++
 src/lib/elementary/elm_main.c         |  1 +
 3 files changed, 50 insertions(+), 1 deletion(-)

diff --git a/src/lib/elementary/elm_atspi_bridge.c 
b/src/lib/elementary/elm_atspi_bridge.c
index 868a72ccf2..6d68384f04 100644
--- a/src/lib/elementary/elm_atspi_bridge.c
+++ b/src/lib/elementary/elm_atspi_bridge.c
@@ -118,6 +118,8 @@ struct collection_match_rule {
 static Eo *_instance;
 static int _init_count = 0;
 
+EAPI int ELM_EVENT_ATSPI_BRIDGE_STATE_CHANGED = -1;
+
 // Object Event handlers
 static void _state_changed_signal_send(void *data, const Efl_Event *event);
 static void _bounds_changed_signal_send(void *data, const Efl_Event *event);
@@ -4305,6 +4307,7 @@ end:
 static void
 _registered_listeners_get(void *data, const Eldbus_Message *msg, 
Eldbus_Pending *pending)
 {
+   Elm_Event_Atspi_Bridge_State_Changed *e;
    const char *event, *bus;
    ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN(data, pd);
    pd->pending_requests = eina_list_remove(pd->pending_requests, pending);
@@ -4335,7 +4338,16 @@ _registered_listeners_get(void *data, const 
Eldbus_Message *msg, Eldbus_Pending
      }
 
    if (!pd->connected)
-      efl_event_callback_legacy_call(data, ELM_ATSPI_BRIDGE_EVENT_CONNECTED, 
NULL);
+     {
+        efl_event_callback_legacy_call(data, ELM_ATSPI_BRIDGE_EVENT_CONNECTED, 
NULL);
+        e = calloc(1, sizeof(Elm_Event_Atspi_Bridge_State_Changed));
+        if (e)
+          {
+             e->state = ELM_ATSPI_BRIDGE_CONNECTED;
+             ecore_event_add(ELM_EVENT_ATSPI_BRIDGE_STATE_CHANGED, e, NULL, 
NULL);
+          }
+     }
+
    pd->connected = EINA_TRUE;
 }
 
@@ -4810,6 +4822,7 @@ _interfaces_unregister(Eo *bridge)
 static void
 _a11y_connection_shutdown(Eo *bridge)
 {
+   Elm_Event_Atspi_Bridge_State_Changed *e;
    ELM_ATSPI_BRIDGE_DATA_GET_OR_RETURN(bridge, pd);
    Eldbus_Pending *pending;
 
@@ -4852,6 +4865,13 @@ _a11y_connection_shutdown(Eo *bridge)
    pd->event_hdlr = NULL;
 
    efl_event_callback_legacy_call(bridge, ELM_ATSPI_BRIDGE_EVENT_DISCONNECTED, 
NULL);
+   e = calloc(1, sizeof(Elm_Event_Atspi_Bridge_State_Changed));
+   if (e)
+     {
+        e->state = ELM_ATSPI_BRIDGE_DISCONNECTED;
+        ecore_event_add(ELM_EVENT_ATSPI_BRIDGE_STATE_CHANGED, e, NULL, NULL);
+     }
+
    pd->connected = EINA_FALSE;
 }
 
diff --git a/src/lib/elementary/elm_general.h b/src/lib/elementary/elm_general.h
index b0708e11c3..21e6a5c482 100644
--- a/src/lib/elementary/elm_general.h
+++ b/src/lib/elementary/elm_general.h
@@ -491,6 +491,28 @@ typedef enum
   ELM_FOCUS_REGION_SHOW_ITEM /**< As an item. */
 } Elm_Focus_Region_Show_Mode;
 
+/** Possible values for the atspi bridge state.
+ *
+ * @since 1.26
+ *
+ * @ingroup Elm_Atspi_Bridge
+ */
+typedef enum
+{
+  ELM_ATSPI_BRIDGE_CONNECTED = 0, /**< when atspi bridge is ready */
+  ELM_ATSPI_BRIDGE_DISCONNECTED, /**< when atspi bridge is shutdown */
+} Elm_Atspi_Bridge_State;
+
+/** Data on event when atspi bridge state is changed
+ *
+ * @since 1.26
+ *
+ * @ingroup Elm_Atspi_Bridge
+ */
+typedef struct _Elm_Event_Atspi_Bridge_State_Changed
+{
+  Elm_Atspi_Bridge_State state;
+} Elm_Event_Atspi_Bridge_State_Changed;
 
 /**************************************************************************/
 EAPI extern int ELM_ECORE_EVENT_ETHUMB_CONNECT;
@@ -520,6 +542,12 @@ EAPI extern int ELM_EVENT_PROCESS_BACKGROUND;
  */
 EAPI extern int ELM_EVENT_PROCESS_FOREGROUND;
 
+/**
+ * Emitted when atspi bridge state is changed.
+ * @since 1.26
+ */
+EAPI extern int ELM_EVENT_ATSPI_BRIDGE_STATE_CHANGED;
+
 typedef Eina_Bool             (*Elm_Event_Cb)(void *data, Evas_Object *obj, 
Evas_Object *src, Evas_Callback_Type type, void *event_info); /**< Function 
prototype definition for callbacks on input events happening on Elementary 
widgets. @a data will receive the user data pointer passed to 
elm_object_event_callback_add(). @a src will be a pointer to the widget on 
which the input event took place. @a type will get the type of this event and 
@a event_info, the struct with details on this event. */
 
 EAPI extern double _elm_startup_time;
diff --git a/src/lib/elementary/elm_main.c b/src/lib/elementary/elm_main.c
index bb2ec1d084..325726abfd 100644
--- a/src/lib/elementary/elm_main.c
+++ b/src/lib/elementary/elm_main.c
@@ -438,6 +438,7 @@ elm_init(int argc, char **argv)
      ecore_event_handler_add(ECORE_EVENT_LOCALE_CHANGED, _sys_lang_changed, 
NULL);
 
    ELM_CNP_EVENT_SELECTION_CHANGED = ecore_event_type_new();
+   ELM_EVENT_ATSPI_BRIDGE_STATE_CHANGED = ecore_event_type_new();
 
    if (_elm_config->atspi_mode != ELM_ATSPI_MODE_OFF)
      _elm_atspi_bridge_init();

-- 


Reply via email to