Function: dbus-managed-objects-handler
dbus-managed-objects-handler is a byte-compiled function defined in
dbus.el.gz.
Signature
(dbus-managed-objects-handler)
Documentation
Default handler for the "org.freedesktop.DBus.ObjectManager" interface.
It will be registered for all objects created by dbus-register-service.
Source Code
;; Defined in /usr/src/emacs/lisp/net/dbus.el.gz
(defun dbus-managed-objects-handler ()
"Default handler for the \"org.freedesktop.DBus.ObjectManager\" interface.
It will be registered for all objects created by `dbus-register-service'."
(let* ((last-input-event last-input-event)
(bus (dbus-event-bus-name last-input-event))
(path (dbus-event-path-name last-input-event)))
;; "GetManagedObjects" returns "a{oa{sa{sv}}}".
(let (interfaces result)
;; Check for object path wildcard interfaces.
(maphash
(lambda (key val)
(when (equal (butlast key 2) (list :property bus))
(dolist (item val)
(unless (nth 2 item) ; Path.
(push (nth 2 key) interfaces)))))
dbus-registered-objects-table)
;; Check all registered object paths.
(maphash
(lambda (key val)
(when (equal (butlast key 2) (list :property bus))
(dolist (item val)
(let ((object (or (nth 2 item) ""))) ; Path.
(when (string-prefix-p path object)
(dolist (interface (cons (nth 2 key) (delete-dups interfaces)))
(unless (assoc object result)
(push (list object) result))
(unless (assoc interface (cdr (assoc object result)))
(setcdr
(assoc object result)
(append
(list (cons
interface
;; We simulate
;; "org.freedesktop.DBus.Properties.GetAll"
;; by using an appropriate D-Bus event.
(let ((last-input-event
(append
(butlast last-input-event 4)
(list object dbus-interface-properties
"GetAll" #'dbus-property-handler))))
(dbus-property-handler interface))))
(cdr (assoc object result)))))))))))
dbus-registered-objects-table)
;; Return the result, or an empty array.
(list
:array
(or
(mapcar
(lambda (x)
(list
:dict-entry :object-path (car x)
(cons :array (mapcar (lambda (y) (cons :dict-entry y)) (cdr x)))))
result)
'(:signature "{oa{sa{sv}}}"))))))