efreet: shutdown on error and disconnect

When bus stops it send Disconnect signal. Trap and die.

SVN revision: 79122
This commit is contained in:
Sebastian Dransfeld 2012-11-11 20:59:03 +00:00
parent f8d97711a7
commit b4490d909e
1 changed files with 18 additions and 3 deletions

View File

@ -11,6 +11,9 @@
#define BUS "org.enlightenment.Efreet" #define BUS "org.enlightenment.Efreet"
#define PATH "/org/enlightenment/Efreet" #define PATH "/org/enlightenment/Efreet"
#define INTERFACE "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 */ /* internal */
enum enum
@ -32,6 +35,13 @@ do_shutdown(void *data __UNUSED__)
return ECORE_CALLBACK_CANCEL; return ECORE_CALLBACK_CANCEL;
} }
static void
disconnected(void *context __UNUSED__, const EDBus_Message *msg __UNUSED__)
{
INF("disconnected");
quit();
}
static EDBus_Message * static EDBus_Message *
do_register(const EDBus_Service_Interface *ifc __UNUSED__, const EDBus_Message *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 static void
on_name_request(void *data __UNUSED__, const EDBus_Message *msg, EDBus_Pending *pending __UNUSED__) 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)) if (edbus_message_error_get(msg, NULL, NULL))
{ {
ERR("error on on_name_request"); ERR("error on on_name_request");
quit();
return; 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"); ERR("error getting arguments on on_name_request");
quit();
return; return;
} }
if (!(flag & EDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER)) if (reply != EDBUS_NAME_REQUEST_REPLY_PRIMARY_OWNER)
{ {
ERR("error name already in use"); ERR("error name already in use");
quit();
return; return;
} }
INF("name requested");
} }
/* external */ /* external */
@ -208,6 +222,7 @@ dbus_init(void)
conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION); conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
if (!conn) goto conn_error; 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); iface = edbus_service_interface_register(conn, PATH, &desc);
edbus_name_request(conn, BUS, EDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE, edbus_name_request(conn, BUS, EDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE,
on_name_request, NULL); on_name_request, NULL);