]> git.eshelyaron.com Git - emacs.git/commitdiff
* dbusbind.c (xd_get_dispatch_status): Return a Lisp_Object.
authorMichael Albinus <michael.albinus@gmx.de>
Fri, 8 Oct 2010 11:40:23 +0000 (13:40 +0200)
committerMichael Albinus <michael.albinus@gmx.de>
Fri, 8 Oct 2010 11:40:23 +0000 (13:40 +0200)
(xd_pending_messages): Catch xd_get_dispatch_status calls.

src/ChangeLog
src/dbusbind.c

index 0aa12b4aabef975c7546fc368badae5f607898bf..d63f417ed42025cd87368e2d62a2910e54f7f9f2 100644 (file)
@@ -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.
index 460cf52364e5cdf03b66d7582f09f126f70e4cf9..60697c8a4e93f5774c85f2d2deb68e0e7a65cb6e 100644 (file)
@@ -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