static Eina_List *_e_processmgr_ec_handlers = NULL;
static Eina_List *_e_processmgr_wl_hooks = NULL;
-Eldbus_Connection *_e_processmgr_conn;
-Eldbus_Service_Interface *_e_processmgr_iface;
+static Eldbus_Connection *_dbus_conn = NULL;
+static Eldbus_Service_Interface *_dbus_iface = NULL;
+static Ecore_Event_Handler *_dbus_init_done = NULL;
// global res_id, geo(x,y,w,h), alpha, visibility, focused, pid, parent pid, acestor pid, noti level, opaque
#define VALUE_TYPE_FOR_VISIBLE_WINS "uiiiibibiiiib"
int param_pid;
int param_act;
- if (!_e_processmgr_conn) return;
+ EINA_SAFETY_ON_NULL_RETURN(_dbus_conn);
// set up msg for resourced
msg = eldbus_message_signal_new("/Org/Tizen/ResourceD/Process",
ELOGF("PROCESSMGR", "SEND ACTION:%d to PID:%d", NULL, NULL, act, pid);
// send the message
- if (!eldbus_connection_send(_e_processmgr_conn, msg, NULL, NULL, -1))
+ if (!eldbus_connection_send(_dbus_conn, msg, NULL, NULL, -1))
return;
eldbus_message_unref(msg);
return reply;
}
-static Eina_Bool
-_e_processmgr_dbus_init(void *data EINA_UNUSED)
-{
- if (_e_processmgr_conn) return ECORE_CALLBACK_CANCEL;
-
- if (!_e_processmgr_conn)
- _e_processmgr_conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
-
- if(!_e_processmgr_conn)
- {
- ecore_timer_add(1, _e_processmgr_dbus_init, NULL);
- return ECORE_CALLBACK_CANCEL;
- }
-
- _e_processmgr_iface = eldbus_service_interface_register(_e_processmgr_conn,
- PATH,
- &iface_desc);
- EINA_SAFETY_ON_NULL_GOTO(_e_processmgr_iface, err);
-
- return ECORE_CALLBACK_CANCEL;
-
-err:
- if (_e_processmgr_conn)
- {
- eldbus_connection_unref(_e_processmgr_conn);
- _e_processmgr_conn = NULL;
- }
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-static void
-_e_processmgr_dbus_shutdown(void)
-{
- if (_e_processmgr_iface)
- {
- eldbus_service_interface_unregister(_e_processmgr_iface);
- _e_processmgr_iface = NULL;
- }
-
- if (_e_processmgr_conn)
- {
- eldbus_connection_unref(_e_processmgr_conn);
- _e_processmgr_conn = NULL;
- }
-}
-
static void
_e_processmgr_cb_launch_done(void *data, Evas_Object *obj, const char *signal, const char *source)
{
ec);
}
+static Eina_Bool
+_dbus_init(void)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(_dbus_conn, EINA_FALSE);
+
+ _dbus_iface = eldbus_service_interface_register(_dbus_conn,
+ PATH,
+ &iface_desc);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(_dbus_iface, EINA_FALSE);
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool
+_cb_dbus_init_done(void *data, int type, void *ev)
+{
+ E_DBus_Conn_Init_Done_Event *e = ev;
+ Eina_Bool res;
+
+ if (!((e->conn_type == ELDBUS_CONNECTION_TYPE_SYSTEM) &&
+ (e->status == E_DBUS_CONN_INIT_SUCCESS)))
+ {
+ return ECORE_CALLBACK_PASS_ON;
+ }
+
+ _dbus_conn = e_dbus_conn_connection_ref(ELDBUS_CONNECTION_TYPE_SYSTEM);
+ EINA_SAFETY_ON_NULL_GOTO(_dbus_conn, cleanup);
+
+ res = _dbus_init();
+ if (!res)
+ {
+ eldbus_connection_unref(_dbus_conn);
+ _dbus_conn = NULL;
+ }
+
+cleanup:
+ ecore_event_handler_del(_dbus_init_done);
+ _dbus_init_done = NULL;
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
EAPI Eina_Bool
e_mod_processmgr_init(void)
{
E_Process_Hook *hook;
+ Eina_Bool res;
- if (!eldbus_init())
- return EINA_FALSE;
+ if (e_dbus_conn_init() > 0)
+ {
+ _dbus_init_done = ecore_event_handler_add(E_EVENT_DBUS_CONN_INIT_DONE,
+ _cb_dbus_init_done,
+ NULL);
- _e_processmgr_dbus_init(NULL);
+ e_dbus_conn_dbus_init(ELDBUS_CONNECTION_TYPE_SYSTEM);
+ }
+ else
+ {
+ _dbus_conn = e_dbus_conn_connection_ref(ELDBUS_CONNECTION_TYPE_SYSTEM);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(_dbus_conn, EINA_FALSE);
+
+ res = _dbus_init();
+ EINA_SAFETY_ON_FALSE_GOTO(res, err);
+ }
hook = e_process_hook_add(E_PROCESS_HOOK_ACTION_CHANGE, _e_processmgr_cb_hook_action_change, NULL);
if (hook) hooks_ec = eina_list_append(hooks_ec, hook);
E_COMP_WL_HOOK_APPEND(_e_processmgr_wl_hooks, E_COMP_WL_HOOK_CLIENT_REUSE, _e_processmgr_cb_client_reuse, NULL);
return EINA_TRUE;
+
+err:
+ if (_dbus_conn)
+ {
+ e_dbus_conn_connection_unref(_dbus_conn);
+ e_dbus_conn_shutdown();
+ _dbus_conn = NULL;
+ }
+ return EINA_FALSE;
}
EAPI void
{
E_Process_Hook *hook;
- _e_processmgr_dbus_shutdown();
+ if (_dbus_init_done)
+ ecore_event_handler_del(_dbus_init_done);
+
+ if (_dbus_iface)
+ eldbus_service_interface_unregister(_dbus_iface);
- eldbus_shutdown();
+ if (_dbus_conn)
+ e_dbus_conn_connection_unref(_dbus_conn);
+
+ e_dbus_conn_shutdown();
+
+ _dbus_init_done = NULL;
+ _dbus_iface = NULL;
+ _dbus_conn = NULL;
E_FREE_LIST(_e_processmgr_wl_hooks, e_comp_wl_hook_del);
E_FREE_LIST(_e_processmgr_ec_handlers, ecore_event_handler_del);
EINA_LIST_FREE(hooks_ec, hook)
e_process_hook_del(hook);
}
-