From 5259089ec690e5e468a85dd5fc5146f04ce86a02 Mon Sep 17 00:00:00 2001 From: Sasha Vasko <sasha@aftercode.net> Date: Sat, 23 Nov 2013 23:26:12 -0600 Subject: [PATCH 07/18] Added dbus message matches --- src/afterstep/dbus.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/afterstep/dbus.c b/src/afterstep/dbus.c index 2e29fc47..b0efe7a9 100644 --- a/src/afterstep/dbus.c +++ b/src/afterstep/dbus.c @@ -254,6 +254,18 @@ static void toggle_watch(DBusWatch *w, void *data) /******************************************************************************/ /* External interfaces : */ /******************************************************************************/ +static _asdbus_add_match (DBusConnection *conn, const char* iface, const char* member) { + char match[256]; + sprintf(match, "type='signal',interface='%s',member='%s'", iface, member); + DBusError error; + dbus_error_init(&error); + dbus_bus_add_match(conn, match, &error); + if (dbus_error_is_set(&error)) { + show_error("dbus_bus_add_match() %s failed: %s\n", member, error.message); + dbus_error_free(&error); + } +} + Bool asdbus_init () { /* return connection unix fd */ char *tmp; @@ -262,7 +274,9 @@ Bool asdbus_init () if (!dbus_connection_set_watch_functions(ASDBus.session_conn, add_watch, remove_watch, toggle_watch, ASDBus.session_conn, NULL)) { show_error("dbus_connection_set_watch_functions() failed"); } - + _asdbus_add_match (ASDBus.session_conn, IFACE_SESSION_PRIVATE, "QueryEndSession"); + _asdbus_add_match (ASDBus.session_conn, IFACE_SESSION_PRIVATE, "EndSession"); + _asdbus_add_match (ASDBus.session_conn, IFACE_SESSION_PRIVATE, "Stop"); } if (!ASDBus.system_conn){ -- 2.22.0