(defconst dbus-error-failed (concat dbus-error-dbus ".Failed")
"A generic error; \"something went wrong\" - see the error message for more.")
+(defconst dbus-error-interactive-authorization-required
+ (concat dbus-error-dbus ".InteractiveAuthorizationRequired")
+ "Interactive authentication required.")
+
(defconst dbus-error-invalid-args (concat dbus-error-dbus ".InvalidArgs")
"Invalid arguments passed to a method call.")
(progn ,@body)
(dbus-error (when dbus-debug (signal (car err) (cdr err))))))
-(defvar dbus-event-error-functions '(dbus-notice-synchronous-call-errors)
+(defvar dbus-event-error-functions
+ '(dbus-notice-synchronous-call-errors
+ dbus-warn-interactive-authorization-required)
"Functions to be called when a D-Bus error happens in the event handler.
Every function must accept two arguments, the event and the error variable
caught in `condition-case' by `dbus-error'.")
(setcar result :error)
(setcdr result er))))
+(defun dbus-warn-interactive-authorization-required (ev er)
+ "Detect `dbus-error-interactive-authorization-required'."
+ (when (string-equal (cadr er) dbus-error-interactive-authorization-required)
+ (lwarn 'dbus :warning "%S" (cdr er))
+ (let* ((key (list :serial
+ (dbus-event-bus-name ev)
+ (dbus-event-serial-number ev)))
+ (result (gethash key dbus-return-values-table)))
+ (when (consp result)
+ (setcar result :complete)
+ (setcdr result nil)))))
+
(defun dbus-call-method (bus service path interface method &rest args)
"Call METHOD on the D-Bus BUS.