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))))))