forked from enlightenment/efl
edbus: Add flag to name_owner_changed_callback_add to
allow initial call Patch by: José Roberto de Souza <zehortigoza@profusion.mobi> SVN revision: 77338
This commit is contained in:
parent
c2e818bd3f
commit
de5d201e7e
|
@ -235,7 +235,7 @@ add_name_owner2(void *data)
|
|||
{
|
||||
EDBus_Connection *conn = data;
|
||||
edbus_name_owner_changed_callback_add(conn, BUS, on_name_owner_changed2,
|
||||
NULL);
|
||||
NULL, EINA_TRUE);
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
|
@ -266,7 +266,8 @@ main(void)
|
|||
edbus_proxy_call(proxy, "SendString", _on_send_string, NULL, -1, "s", string_value);
|
||||
edbus_proxy_call(proxy, "AsyncTest", _on_async_test, NULL, -1, "");
|
||||
|
||||
edbus_name_owner_changed_callback_add(conn, BUS, on_name_owner_changed, conn);
|
||||
edbus_name_owner_changed_callback_add(conn, BUS, on_name_owner_changed,
|
||||
conn, EINA_TRUE);
|
||||
ecore_timer_add(3, add_name_owner2, conn);
|
||||
|
||||
ecore_main_loop_begin();
|
||||
|
|
|
@ -49,6 +49,7 @@ typedef struct _EDBus_Connection_Context_NOC_Cb
|
|||
const void *cb_data;
|
||||
Eina_Bool deleted : 1;
|
||||
Ecore_Idler *idler;
|
||||
Eina_Bool allow_initial : 1;
|
||||
} EDBus_Connection_Context_NOC_Cb;
|
||||
|
||||
typedef struct _EDBus_Handler_Data
|
||||
|
@ -499,7 +500,7 @@ on_get_name_owner(void *data, const EDBus_Message *msg, EDBus_Pending *pending)
|
|||
ERR("Error getting arguments from GetNameOwner");
|
||||
|
||||
cn->unique_id = eina_stringshare_add(unique_id);
|
||||
edbus_dispatch_name_owner_change(cn, "");
|
||||
edbus_dispatch_name_owner_change(cn, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1157,11 +1158,14 @@ static void
|
|||
edbus_dispatch_name_owner_change(EDBus_Connection_Name *cn, const char *old_id)
|
||||
{
|
||||
EDBus_Connection_Context_NOC_Cb *ctx;
|
||||
const char *previous_id = !old_id ? "" : old_id;
|
||||
cn->event_handlers.walking++;
|
||||
EINA_INLIST_FOREACH(cn->event_handlers.list, ctx)
|
||||
{
|
||||
if (ctx->deleted) continue;
|
||||
ctx->cb((void *)ctx->cb_data, cn->name, old_id, cn->unique_id);
|
||||
if (!old_id && !ctx->allow_initial)
|
||||
continue;
|
||||
ctx->cb((void *)ctx->cb_data, cn->name, previous_id, cn->unique_id);
|
||||
}
|
||||
cn->event_handlers.walking--;
|
||||
}
|
||||
|
@ -1184,7 +1188,7 @@ dispach_name_owner_cb(void *context)
|
|||
}
|
||||
|
||||
EAPI void
|
||||
edbus_name_owner_changed_callback_add(EDBus_Connection *conn, const char *bus, EDBus_Name_Owner_Changed_Cb cb, const void *cb_data)
|
||||
edbus_name_owner_changed_callback_add(EDBus_Connection *conn, const char *bus, EDBus_Name_Owner_Changed_Cb cb, const void *cb_data, Eina_Bool allow_initial_call)
|
||||
{
|
||||
EDBus_Connection_Name *cn;
|
||||
EDBus_Connection_Context_NOC_Cb *ctx;
|
||||
|
@ -1209,10 +1213,11 @@ edbus_name_owner_changed_callback_add(EDBus_Connection *conn, const char *bus, E
|
|||
EINA_SAFETY_ON_NULL_GOTO(ctx, cleanup);
|
||||
ctx->cb = cb;
|
||||
ctx->cb_data = cb_data;
|
||||
ctx->allow_initial = allow_initial_call;
|
||||
|
||||
cn->event_handlers.list = eina_inlist_append(cn->event_handlers.list,
|
||||
EINA_INLIST_GET(ctx));
|
||||
if (cn->unique_id)
|
||||
if (cn->unique_id && allow_initial_call)
|
||||
{
|
||||
dispatch_name_owner_data *dispatch_data;
|
||||
dispatch_data = malloc(sizeof(dispatch_name_owner_data));
|
||||
|
|
|
@ -37,7 +37,24 @@ EAPI EDBus_Pending *edbus_name_start(EDBus_Connection *conn, const char *
|
|||
|
||||
typedef void (*EDBus_Name_Owner_Changed_Cb)(void *data, const char *bus, const char *old_id, const char *new_id);
|
||||
|
||||
EAPI void edbus_name_owner_changed_callback_add(EDBus_Connection *conn, const char *bus, EDBus_Name_Owner_Changed_Cb cb, const void *cb_data);
|
||||
/**
|
||||
* Add a callback to be called when unique id of a bus name changed.
|
||||
*
|
||||
* @param conn connection
|
||||
* @param bus name of bus
|
||||
* @param cb callback
|
||||
* @param cb_data context data
|
||||
* @param allow_initial_call allow call callback with actual id of the bus
|
||||
*/
|
||||
EAPI void edbus_name_owner_changed_callback_add(EDBus_Connection *conn, const char *bus, EDBus_Name_Owner_Changed_Cb cb, const void *cb_data, Eina_Bool allow_initial_call);
|
||||
/**
|
||||
* Remove callback added with edbus_name_owner_changed_callback_add().
|
||||
*
|
||||
* @param conn connection
|
||||
* @param bus name of bus
|
||||
* @param cb callback
|
||||
* @param cb_data context data
|
||||
*/
|
||||
EAPI void edbus_name_owner_changed_callback_del(EDBus_Connection *conn, const char *bus, EDBus_Name_Owner_Changed_Cb cb, const void *cb_data);
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue