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