diff src/dbusbind.c @ 104285:4eb010135586

* dbusbind.c (xd_get_dispatch_status, xd_pending_messages): New functions.
author Michael Albinus <michael.albinus@gmx.de>
date Sat, 15 Aug 2009 18:27:58 +0000
parents 50effbe728da
children a98c5e3801f8
line wrap: on
line diff
--- a/src/dbusbind.c	Sat Aug 15 18:25:38 2009 +0000
+++ b/src/dbusbind.c	Sat Aug 15 18:27:58 2009 +0000
@@ -1414,6 +1414,41 @@
   return Qt;
 }
 
+/* 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
+xd_get_dispatch_status (bus)
+     Lisp_Object bus;
+{
+  DBusConnection *connection;
+
+  /* Open a connection to the bus.  */
+  connection = xd_initialize (bus);
+
+  /* Non blocking read of the next available message.  */
+  dbus_connection_read_write (connection, 0);
+
+  /* Return.  */
+  return
+    (dbus_connection_get_dispatch_status (connection)
+     == DBUS_DISPATCH_DATA_REMAINS)
+    ? TRUE : FALSE;
+}
+
+/* Check for queued incoming messages from the system and session buses.  */
+int
+xd_pending_messages ()
+{
+
+  /* Vdbus_registered_functions_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_functions_table)
+	  ? ((xd_get_dispatch_status (QCdbus_system_bus)
+	      || (xd_get_dispatch_status (QCdbus_session_bus))))
+	  : FALSE);
+}
+
 /* Read queued incoming message of the D-Bus BUS.  BUS is a Lisp
    symbol, either :system or :session.  */
 static Lisp_Object