summaryrefslogtreecommitdiff
path: root/src/dbusbind.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dbusbind.c')
-rw-r--r--src/dbusbind.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/dbusbind.c b/src/dbusbind.c
index 7c0be49ab77..59702ed93c4 100644
--- a/src/dbusbind.c
+++ b/src/dbusbind.c
@@ -761,14 +761,14 @@ xd_add_watch (watch, data)
if (dbus_watch_get_flags (watch) & DBUS_WATCH_READABLE)
{
#if HAVE_DBUS_WATCH_GET_UNIX_FD
- /* TODO: Reverse these on Win32, which prefers the opposite. */
+ /* TODO: Reverse these on Win32, which prefers the opposite. */
int fd = dbus_watch_get_unix_fd(watch);
if (fd == -1)
fd = dbus_watch_get_socket(watch);
#else
int fd = dbus_watch_get_fd(watch);
#endif
- XD_DEBUG_MESSAGE ("%d", fd);
+ XD_DEBUG_MESSAGE ("fd %d", fd);
if (fd == -1)
return FALSE;
@@ -781,7 +781,8 @@ xd_add_watch (watch, data)
return TRUE;
}
-/* Remove connection file descriptor from input_wait_mask. */
+/* Remove connection file descriptor from input_wait_mask. DATA is
+ the used bus, either QCdbus_system_bus or QCdbus_session_bus. */
void
xd_remove_watch (watch, data)
DBusWatch *watch;
@@ -791,18 +792,25 @@ xd_remove_watch (watch, data)
if (dbus_watch_get_flags (watch) & DBUS_WATCH_READABLE)
{
#if HAVE_DBUS_WATCH_GET_UNIX_FD
- /* TODO: Reverse these on Win32, which prefers the opposite. */
+ /* TODO: Reverse these on Win32, which prefers the opposite. */
int fd = dbus_watch_get_unix_fd(watch);
if (fd == -1)
fd = dbus_watch_get_socket(watch);
#else
int fd = dbus_watch_get_fd(watch);
#endif
- XD_DEBUG_MESSAGE ("%d", fd);
+ XD_DEBUG_MESSAGE ("fd %d", fd);
if (fd == -1)
return;
+ /* Unset session environment. */
+ if ((data != NULL) && (EQ ((Lisp_Object) data, QCdbus_session_bus)))
+ {
+ XD_DEBUG_MESSAGE ("unsetenv DBUS_SESSION_BUS_ADDRESS");
+ unsetenv ("DBUS_SESSION_BUS_ADDRESS");
+ }
+
/* Remove the file descriptor from input_wait_mask. */
delete_keyboard_wait_descriptor (fd);
}
@@ -825,11 +833,12 @@ This is an internal function, it shall not be used outside dbus.el. */)
/* Open a connection to the bus. */
connection = xd_initialize (bus);
- /* Add the watch functions. */
+ /* Add the watch functions. We pass also the bus as data, in order
+ to distinguish between the busses in xd_remove_watch. */
if (!dbus_connection_set_watch_functions (connection,
xd_add_watch,
xd_remove_watch,
- NULL, NULL, NULL))
+ NULL, (void *) bus, NULL))
XD_SIGNAL1 (build_string ("Cannot add watch functions"));
/* Return. */