From: Michael Albinus Date: Fri, 8 Oct 2010 11:40:23 +0000 (+0200) Subject: * dbusbind.c (xd_get_dispatch_status): Return a Lisp_Object. X-Git-Tag: emacs-pretest-23.2.90~77 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2e828c79a3907ce76d96517b8a878398c6cecb0a;p=emacs.git * dbusbind.c (xd_get_dispatch_status): Return a Lisp_Object. (xd_pending_messages): Catch xd_get_dispatch_status calls. --- diff --git a/src/ChangeLog b/src/ChangeLog index 0aa12b4aabe..d63f417ed42 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-10-08 Michael Albinus + + * dbusbind.c (xd_get_dispatch_status): Return a Lisp_Object. + (xd_pending_messages): Catch xd_get_dispatch_status calls. + 2010-10-08 Kenichi Handa * coding.c (complement_process_encoding_system): Fix previous change. diff --git a/src/dbusbind.c b/src/dbusbind.c index 460cf52364e..60697c8a4e9 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -1571,7 +1571,7 @@ usage: (dbus-send-signal BUS SERVICE PATH INTERFACE SIGNAL &rest ARGS) */) /* Check, whether there is pending input in the message queue of the D-Bus BUS. BUS is a Lisp symbol, either :system or :session. */ -int +static Lisp_Object xd_get_dispatch_status (bus) Lisp_Object bus; { @@ -1587,23 +1587,34 @@ xd_get_dispatch_status (bus) return (dbus_connection_get_dispatch_status (connection) == DBUS_DISPATCH_DATA_REMAINS) - ? TRUE : FALSE; + ? Qt : Qnil; } /* Check for queued incoming messages from the system and session buses. */ int xd_pending_messages () { + int ret = FALSE; + xd_in_read_queued_messages = 1; /* Vdbus_registered_objects_table will be initialized as hash table in dbus.el. When this package isn't loaded yet, it doesn't make sense to handle D-Bus messages. */ - return (HASH_TABLE_P (Vdbus_registered_objects_table) - ? (xd_get_dispatch_status (QCdbus_system_bus) - || ((getenv ("DBUS_SESSION_BUS_ADDRESS") != NULL) - ? xd_get_dispatch_status (QCdbus_session_bus) - : FALSE)) - : FALSE); + if (HASH_TABLE_P (Vdbus_registered_objects_table)) + { + ret = (!NILP (internal_catch (Qdbus_error, xd_get_dispatch_status, + QCdbus_system_bus))); + if (ret) goto theend; + + ret = ((getenv ("DBUS_SESSION_BUS_ADDRESS") != NULL) && + (!NILP (internal_catch (Qdbus_error, xd_get_dispatch_status, + QCdbus_session_bus)))); + } + + /* Return. */ + theend: + xd_in_read_queued_messages = 0; + return ret; } /* Read queued incoming message of the D-Bus BUS. BUS is a Lisp