efreet: Unregister when client connection die

Patch by: José Roberto de Souza  <zehortigoza@profusion.mobi>



SVN revision: 80950
This commit is contained in:
José Roberto de Souza 2012-12-14 14:27:19 +00:00 committed by Lucas De Marchi
parent 5338a060db
commit e9afafc21b
2 changed files with 21 additions and 18 deletions

View File

@ -39,6 +39,22 @@ disconnected(void *context __UNUSED__, EDBus_Connection *connection __UNUSED__,
quit();
}
static void
client_name_owner_changed_cb(void *data, const char *bus, const char *old_id, const char *new_id)
{
if (new_id[0])
return;
edbus_name_owner_changed_callback_del(conn, bus,
client_name_owner_changed_cb, NULL);
clients--;
if (clients <= 0)
{
clients = 0;
if (shutdown) ecore_timer_del(shutdown);
shutdown = ecore_timer_add(10.0, do_shutdown, NULL);
}
}
static EDBus_Message *
do_register(const EDBus_Service_Interface *ifc __UNUSED__, const EDBus_Message *message)
{
@ -55,24 +71,16 @@ do_register(const EDBus_Service_Interface *ifc __UNUSED__, const EDBus_Message *
clients++;
if (shutdown) ecore_timer_del(shutdown);
shutdown = NULL;
edbus_name_owner_changed_callback_add(conn,
edbus_message_sender_get(message),
client_name_owner_changed_cb, NULL,
EINA_FALSE);
reply = edbus_message_method_return_new(message);
edbus_message_arguments_set(reply, "b", cache_desktop_exists());
return reply;
}
static EDBus_Message *
do_unregister(const EDBus_Service_Interface *ifc __UNUSED__, const EDBus_Message *message __UNUSED__)
{
clients--;
if (clients <= 0)
{
clients = 0;
if (shutdown) ecore_timer_del(shutdown);
shutdown = ecore_timer_add(10.0, do_shutdown, NULL);
}
return NULL;
}
static EDBus_Message *
add_desktop_dirs(const EDBus_Service_Interface *ifc __UNUSED__, const EDBus_Message *message)
{
@ -160,10 +168,6 @@ static const EDBus_Method methods[] = {
"Register", EDBUS_ARGS({"s", "lang info"}), EDBUS_ARGS({"b", "cache exists"}),
do_register, 0
},
{
"Unregister", NULL, NULL,
do_unregister, 0
},
{
"AddDesktopDirs", EDBUS_ARGS({"as", "dirs"}), NULL,
add_desktop_dirs, EDBUS_METHOD_FLAG_NOREPLY

View File

@ -213,7 +213,6 @@ efreet_cache_shutdown(void)
if (conn)
{
EDBus_Object *obj = edbus_proxy_object_get(proxy);
edbus_proxy_call(proxy, "Unregister", NULL, NULL, -1, "");
edbus_proxy_unref(proxy);
edbus_object_unref(obj);
edbus_connection_unref(conn);