Function: dbus-handle-event
dbus-handle-event is an autoloaded, interactive and byte-compiled
function defined in dbus.el.gz.
Signature
(dbus-handle-event EVENT)
Documentation
Handle events from the D-Bus.
EVENT is a D-Bus event, see dbus-check-event. HANDLER, being
part of the event, is called with arguments ARGS (without type information).
If the HANDLER returns a dbus-error, it is propagated as return message.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/net/dbus.el.gz
;;;###autoload
(defun dbus-handle-event (event)
"Handle events from the D-Bus.
EVENT is a D-Bus event, see `dbus-check-event'. HANDLER, being
part of the event, is called with arguments ARGS (without type information).
If the HANDLER returns a `dbus-error', it is propagated as return message."
(declare (completion ignore))
(interactive "e")
(condition-case err
(let (monitor args result)
;; We ignore not well-formed events.
(dbus-check-event event)
;; Remove type information.
(setq args (mapcar #'dbus-delete-types (nthcdr 10 event)))
(setq monitor
(gethash
(list :monitor (nth 1 event)) dbus-registered-objects-table))
(if monitor
;; A monitor event shall not trigger other operations, and
;; it shall not trigger D-Bus errors.
(setq result (dbus-ignore-errors (apply (nth 9 event) args)))
;; Error messages must be propagated. The error name is in
;; the member slot.
(when (= dbus-message-type-error (nth 2 event))
(signal 'dbus-error (cons (nth 8 event) args)))
;; Apply the handler.
(setq result (apply (nth 9 event) args))
;; Return an (error) message when it is a message call.
(when (= dbus-message-type-method-call (nth 2 event))
(dbus-ignore-errors
(if (eq (car-safe result) :error)
(apply #'dbus-method-error-internal
(nth 1 event) (nth 4 event) (nth 3 event) (cdr result))
(if (eq result :ignore)
(dbus-method-return-internal
(nth 1 event) (nth 4 event) (nth 3 event))
(apply #'dbus-method-return-internal
(nth 1 event) (nth 4 event) (nth 3 event)
(if (consp result) result (list result)))))))))
;; Error handling.
(dbus-error
;; Return an error message when it is a message call.
(when (= dbus-message-type-method-call (nth 2 event))
(dbus-ignore-errors
(dbus-method-error-internal
(nth 1 event) (nth 4 event) (nth 3 event) dbus-error-failed
(error-message-string err))))
;; Propagate D-Bus error messages.
(run-hook-with-args 'dbus-event-error-functions event err)
(when dbus-debug
(signal (car err) (cdr err))))))