comparison 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
comparison
equal deleted inserted replaced
106049:c0e610eb8658 106050:533b0628d222
180 (dbus-call-method 180 (dbus-call-method
181 bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus 181 bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
182 "ReleaseName" service)))) 182 "ReleaseName" service))))
183 ;; Return. 183 ;; Return.
184 ret)) 184 ret))
185
186 (defun dbus-unregister-service (bus service)
187 "Unregister all objects related to SERVICE from D-Bus BUS.
188 BUS must be either the symbol `:system' or the symbol `:session'.
189 SERVICE must be a known service name."
190 (maphash
191 (lambda (key value)
192 (dolist (elt value)
193 (ignore-errors
194 (when (and (equal bus (car key)) (string-equal service (cadr elt)))
195 (unless
196 (puthash key (delete elt value) dbus-registered-objects-table)
197 (remhash key dbus-registered-objects-table))))))
198 dbus-registered-objects-table)
199 (dbus-call-method
200 bus dbus-service-dbus dbus-path-dbus dbus-interface-dbus
201 "ReleaseName" service))
185 202
186 (defun dbus-call-method-non-blocking-handler (&rest args) 203 (defun dbus-call-method-non-blocking-handler (&rest args)
187 "Handler for reply messages of asynchronous D-Bus message calls. 204 "Handler for reply messages of asynchronous D-Bus message calls.
188 It calls the function stored in `dbus-registered-objects-table'. 205 It calls the function stored in `dbus-registered-objects-table'.
189 The result will be made available in `dbus-return-values-table'." 206 The result will be made available in `dbus-return-values-table'."
881 "RequestName" service 0)) 898 "RequestName" service 0))
882 899
883 ;; Add the handler. We use `dbus-service-emacs' as service name, in 900 ;; Add the handler. We use `dbus-service-emacs' as service name, in
884 ;; order to let unregister SERVICE despite of this default handler. 901 ;; order to let unregister SERVICE despite of this default handler.
885 (dbus-register-method 902 (dbus-register-method
886 bus dbus-service-emacs path dbus-interface-properties 903 bus service path dbus-interface-properties "Get" 'dbus-property-handler)
887 "Get" 'dbus-property-handler)
888 (dbus-register-method 904 (dbus-register-method
889 bus dbus-service-emacs path dbus-interface-properties 905 bus service path dbus-interface-properties "GetAll" 'dbus-property-handler)
890 "GetAll" 'dbus-property-handler)
891 (dbus-register-method 906 (dbus-register-method
892 bus dbus-service-emacs path dbus-interface-properties 907 bus service path dbus-interface-properties "Set" 'dbus-property-handler)
893 "Set" 'dbus-property-handler)
894 908
895 ;; Create a hash table entry. We use nil for the unique name, 909 ;; Create a hash table entry. We use nil for the unique name,
896 ;; because the property might be accessed from anybody. 910 ;; because the property might be accessed from anybody.
897 (let ((key (list bus interface property)) 911 (let ((key (list bus interface property))
898 (val (list (list nil service path (cons access value))))) 912 (val (list (list nil service path (cons access value)))))
900 914
901 ;; Return the object. 915 ;; Return the object.
902 (list key (list service path)))) 916 (list key (list service path))))
903 917
904 (defun dbus-property-handler (&rest args) 918 (defun dbus-property-handler (&rest args)
905 "Handler for reply messages of asynchronous D-Bus message calls. 919 "Default Handler for the \"org.freedesktop.DBus.Properties\" interface.
906 It calls the function stored in `dbus-registered-objects-table'. 920 It will be registered for all objects created by `dbus-register-object'."
907 The result will be made available in `dbus-return-values-table'."
908 (let ((bus (dbus-event-bus-name last-input-event)) 921 (let ((bus (dbus-event-bus-name last-input-event))
909 (path (dbus-event-path-name last-input-event)) 922 (path (dbus-event-path-name last-input-event))
910 (method (dbus-event-member-name last-input-event)) 923 (method (dbus-event-member-name last-input-event))
911 (interface (car args)) 924 (interface (car args))
912 (property (cadr args))) 925 (property (cadr args)))