From b4490d909eea7d8c0e725fbe4f5117ff384b34b7 Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Sun, 11 Nov 2012 20:59:03 +0000 Subject: [PATCH] efreet: shutdown on error and disconnect When bus stops it send Disconnect signal. Trap and die. SVN revision: 79122 --- legacy/efreet/src/bin/efreetd_dbus.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/legacy/efreet/src/bin/efreetd_dbus.c b/legacy/efreet/src/bin/efreetd_dbus.c index 32d3a85fd0..f99a239a8f 100644 --- a/legacy/efreet/src/bin/efreetd_dbus.c +++ b/legacy/efreet/src/bin/efreetd_dbus.c @@ -11,6 +11,9 @@ #define BUS "org.enlightenment.Efreet" #define PATH "/org/enlightenment/Efreet" #define INTERFACE "org.enlightenment.Efreet" +/* TODO: Get from dbus include */ +#define DBUS_PATH_LOCAL "/org/freedesktop/DBus/Local" +#define DBUS_INTERFACE_LOCAL "org.freedesktop.DBus.Local" /* internal */ enum @@ -32,6 +35,13 @@ do_shutdown(void *data __UNUSED__) return ECORE_CALLBACK_CANCEL; } +static void +disconnected(void *context __UNUSED__, const EDBus_Message *msg __UNUSED__) +{ + INF("disconnected"); + quit(); +} + static EDBus_Message * do_register(const EDBus_Service_Interface *ifc __UNUSED__, const EDBus_Message *message) { @@ -166,25 +176,29 @@ static const EDBus_Service_Interface_Desc desc = { static void on_name_request(void *data __UNUSED__, const EDBus_Message *msg, EDBus_Pending *pending __UNUSED__) { - unsigned int flag; + unsigned int reply; if (edbus_message_error_get(msg, NULL, NULL)) { ERR("error on on_name_request"); + quit(); return; } - if (!edbus_message_arguments_get(msg, "u", &flag)) + if (!edbus_message_arguments_get(msg, "u", &reply)) { ERR("error getting arguments on on_name_request"); + quit(); return; } - if (!(flag & EDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER)) + if (reply != EDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER) { ERR("error name already in use"); + quit(); return; } + INF("name requested"); } /* external */ @@ -208,6 +222,7 @@ dbus_init(void) conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION); if (!conn) goto conn_error; + edbus_signal_handler_add(conn, NULL, DBUS_PATH_LOCAL, DBUS_INTERFACE_LOCAL, "Disconnected", disconnected, NULL); iface = edbus_service_interface_register(conn, PATH, &desc); edbus_name_request(conn, BUS, EDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE, on_name_request, NULL);