Mercurial > emacs
changeset 110921:7e091be752b1
* dbusbind.c (xd_get_dispatch_status): Return a Lisp_Object.
(xd_pending_messages): Catch xd_get_dispatch_status calls.
author | Michael Albinus <michael.albinus@gmx.de> |
---|---|
date | Fri, 08 Oct 2010 13:40:23 +0200 |
parents | 27b32bb6fd48 |
children | 3d97b0ab637b |
files | src/ChangeLog src/dbusbind.c |
diffstat | 2 files changed, 24 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Fri Oct 08 11:52:34 2010 +0200 +++ b/src/ChangeLog Fri Oct 08 13:40:23 2010 +0200 @@ -1,3 +1,8 @@ +2010-10-08 Michael Albinus <michael.albinus@gmx.de> + + * dbusbind.c (xd_get_dispatch_status): Return a Lisp_Object. + (xd_pending_messages): Catch xd_get_dispatch_status calls. + 2010-10-08 Kenichi Handa <handa@m17n.org> * coding.c (complement_process_encoding_system): Fix previous change.
--- a/src/dbusbind.c Fri Oct 08 11:52:34 2010 +0200 +++ b/src/dbusbind.c Fri Oct 08 13:40:23 2010 +0200 @@ -1571,7 +1571,7 @@ /* 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 @@ 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