From e9afafc21bce6d98ab92000e5af02ebd24f7f853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Roberto=20de=20Souza?= Date: Fri, 14 Dec 2012 14:27:19 +0000 Subject: [PATCH] efreet: Unregister when client connection die MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Patch by: José Roberto de Souza SVN revision: 80950 --- legacy/efreet/src/bin/efreetd_dbus.c | 38 +++++++++++++++------------- legacy/efreet/src/lib/efreet_cache.c | 1 - 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/legacy/efreet/src/bin/efreetd_dbus.c b/legacy/efreet/src/bin/efreetd_dbus.c index 8c00cfe25e..6eddb1efc3 100644 --- a/legacy/efreet/src/bin/efreetd_dbus.c +++ b/legacy/efreet/src/bin/efreetd_dbus.c @@ -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 diff --git a/legacy/efreet/src/lib/efreet_cache.c b/legacy/efreet/src/lib/efreet_cache.c index 775df3b678..f959c762d5 100644 --- a/legacy/efreet/src/lib/efreet_cache.c +++ b/legacy/efreet/src/lib/efreet_cache.c @@ -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);