diff lisp/net/dbus.el @ 106050:533b0628d222

* net/dbus.el (dbus-unregister-service): New defun. (dbus-register-property): Register the handlers for "org.freedesktop.DBus.Properties" for SERVICE. (dbus-property-handler): Fix docstring.
author Michael Albinus <michael.albinus@gmx.de>
date Mon, 16 Nov 2009 14:25:25 +0000
parents 57d249deafab
children 98a65639e9cf
line wrap: on
line diff
--- a/lisp/net/dbus.el	Mon Nov 16 04:06:12 2009 +0000
+++ b/lisp/net/dbus.el	Mon Nov 16 14:25:25 2009 +0000
@@ -183,6 +183,23 @@
     ;; Return.
     ret))
 
+(defun dbus-unregister-service (bus service)
+  "Unregister all objects related to SERVICE from D-Bus BUS.
+BUS must be either the symbol `:system' or the symbol `:session'.
+SERVICE must be a known service name."
+  (maphash
+   (lambda (key value)
+     (dolist (elt value)
+       (ignore-errors
+	 (when (and (equal bus (car key)) (string-equal service (cadr elt)))
+	   (unless
+	       (puthash key (delete elt value) dbus-registered-objects-table)
+	     (remhash key dbus-registered-objects-table))))))
+   dbus-registered-objects-table)
+  (dbus-call-method
+   bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
+   "ReleaseName" service))
+
 (defun dbus-call-method-non-blocking-handler (&rest args)
   "Handler for reply messages of asynchronous D-Bus message calls.
 It calls the function stored in `dbus-registered-objects-table'.
@@ -883,14 +900,11 @@
   ;; Add the handler.  We use `dbus-service-emacs' as service name, in
   ;; order to let unregister SERVICE despite of this default handler.
   (dbus-register-method
-   bus dbus-service-emacs path dbus-interface-properties
-   "Get" 'dbus-property-handler)
+   bus service path dbus-interface-properties "Get" 'dbus-property-handler)
   (dbus-register-method
-   bus dbus-service-emacs path dbus-interface-properties
-   "GetAll" 'dbus-property-handler)
+   bus service path dbus-interface-properties "GetAll" 'dbus-property-handler)
   (dbus-register-method
-   bus dbus-service-emacs path dbus-interface-properties
-   "Set" 'dbus-property-handler)
+   bus service path dbus-interface-properties "Set" 'dbus-property-handler)
 
   ;; Create a hash table entry.  We use nil for the unique name,
   ;; because the property might be accessed from anybody.
@@ -902,9 +916,8 @@
     (list key (list service path))))
 
 (defun dbus-property-handler (&rest args)
-  "Handler for reply messages of asynchronous D-Bus message calls.
-It calls the function stored in `dbus-registered-objects-table'.
-The result will be made available in `dbus-return-values-table'."
+  "Default Handler for the \"org.freedesktop.DBus.Properties\" interface.
+It will be registered for all objects created by `dbus-register-object'."
   (let ((bus (dbus-event-bus-name last-input-event))
 	(path (dbus-event-path-name last-input-event))
 	(method (dbus-event-member-name last-input-event))