From 058ed8610c6c4c64b9bebfb7ef9283ff022b5b76 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 18 Aug 2009 15:17:02 +0000 Subject: [PATCH] * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New functions. (xd_initialize): Revert change from 2009-08-16. --- src/ChangeLog | 6 ++++ src/dbusbind.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 88 insertions(+), 6 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index ac13ccbe01d..7fc04ddde93 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2009-08-18 Michael Albinus + + * dbusbind.c (xd_add_watch, xd_remove_watch, Fdbus_init_bus): New + functions. + (xd_initialize): Revert change from 2009-08-16. + 2009-08-18 Kenichi Handa * fontset.c (Ffontset_font): If a nil element is found in a diff --git a/src/dbusbind.c b/src/dbusbind.c index 76b0da54205..33a070014f8 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -29,6 +29,7 @@ along with GNU Emacs. If not, see . */ /* Subroutines. */ +Lisp_Object Qdbus_init_bus; Lisp_Object Qdbus_get_unique_name; Lisp_Object Qdbus_call_method; Lisp_Object Qdbus_call_method_asynchronously; @@ -698,7 +699,6 @@ xd_initialize (bus) { DBusConnection *connection; DBusError derror; - int fd; /* Parameter check. */ CHECK_SYMBOL (bus); @@ -719,11 +719,6 @@ xd_initialize (bus) if (connection == NULL) XD_SIGNAL2 (build_string ("No connection"), bus); - /* Add connection file descriptor to input_wait_mask, in order to - let select() detect, whether a new message has been arrived. */ - if (dbus_connection_get_unix_fd (connection, &fd)) - add_keyboard_wait_descriptor (fd); - /* Cleanup. */ dbus_error_free (&derror); @@ -731,6 +726,83 @@ xd_initialize (bus) return connection; } + +/* Add connection file descriptor to input_wait_mask, in order to + let select() detect, whether a new message has been arrived. */ +dbus_bool_t +xd_add_watch (watch, data) + DBusWatch *watch; + void *data; +{ + /* We check only for incoming data. */ + if (dbus_watch_get_flags (watch) & DBUS_WATCH_READABLE) + { + /* 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); + if (fd == -1) + return FALSE; + + //printf ("xd_add_watch: %d\n", fd); + /* Add the file descriptor to input_wait_mask. */ + add_keyboard_wait_descriptor (fd); + } + + /* Return. */ + return TRUE; +} + +/* Remove connection file descriptor from input_wait_mask. */ +void +xd_remove_watch (watch, data) + DBusWatch *watch; + void *data; +{ + /* We check only for incoming data. */ + if (dbus_watch_get_flags (watch) & DBUS_WATCH_READABLE) + { + /* 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); + if (fd == -1) + return; + + //printf ("xd_remove_watch: %d\n", fd); + /* Remove the file descriptor from input_wait_mask. */ + delete_keyboard_wait_descriptor (fd); + } + + /* Return. */ + return; +} + +DEFUN ("dbus-init-bus", Fdbus_init_bus, Sdbus_init_bus, 1, 1, 0, + doc: /* Initialize connection to D-Bus BUS. +This is an internal function, it shall not be used outside dbus.el. */) + (bus) + Lisp_Object bus; +{ + DBusConnection *connection; + + /* Check parameters. */ + CHECK_SYMBOL (bus); + + /* Open a connection to the bus. */ + connection = xd_initialize (bus); + + /* Add the watch functions. */ + if (!dbus_connection_set_watch_functions (connection, + xd_add_watch, + xd_remove_watch, + NULL, NULL, NULL)) + XD_SIGNAL1 (build_string ("Cannot add watch functions")); + + /* Return. */ + return Qnil; +} + DEFUN ("dbus-get-unique-name", Fdbus_get_unique_name, Sdbus_get_unique_name, 1, 1, 0, doc: /* Return the unique name of Emacs registered at D-Bus BUS. */) @@ -1865,6 +1937,10 @@ void syms_of_dbusbind () { + Qdbus_init_bus = intern ("dbus-init-bus"); + staticpro (&Qdbus_init_bus); + defsubr (&Sdbus_init_bus); + Qdbus_get_unique_name = intern ("dbus-get-unique-name"); staticpro (&Qdbus_get_unique_name); defsubr (&Sdbus_get_unique_name); -- 2.39.2