efreet: Unregister when client connection die
authorJosé Roberto de Souza <zehortigoza@profusion.mobi>
Fri, 14 Dec 2012 14:27:19 +0000 (14:27 +0000)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Fri, 14 Dec 2012 14:27:19 +0000 (14:27 +0000)
Patch by: José Roberto de Souza  <zehortigoza@profusion.mobi>

SVN revision: 80950

legacy/efreet/src/bin/efreetd_dbus.c
legacy/efreet/src/lib/efreet_cache.c

index 8c00cfe..6eddb1e 100644 (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,25 +71,17 @@ 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)
 {
    EDBus_Message_Iter *array = NULL;
@@ -161,10 +169,6 @@ static const EDBus_Method methods[] = {
           do_register, 0
        },
        {
-          "Unregister", NULL, NULL,
-          do_unregister, 0
-       },
-       {
           "AddDesktopDirs", EDBUS_ARGS({"as", "dirs"}), NULL,
           add_desktop_dirs, EDBUS_METHOD_FLAG_NOREPLY
        },
index 775df3b..f959c76 100644 (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);