Mercurial > emacs
changeset 87586:9554989ee375
* net/dbus.el (dbus-list-hash-table)
(dbus-name-owner-changed-handler): Replace "signal" by "member".
(dbus-check-event): Add serial number to event.
(dbus-handle-event): Apply return message if needed.
(dbus-event-serial-number): New defun.
(dbus-event-service-name, dbus-event-path-name)
(dbus-event-interface-name, dbus-event-member-name): Adapt
implementation to serial number.
author | Michael Albinus <michael.albinus@gmx.de> |
---|---|
date | Fri, 04 Jan 2008 21:52:51 +0000 |
parents | 072778cd2f17 |
children | 546180f9602b |
files | lisp/ChangeLog lisp/net/dbus.el |
diffstat | 2 files changed, 53 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Fri Jan 04 21:44:23 2008 +0000 +++ b/lisp/ChangeLog Fri Jan 04 21:52:51 2008 +0000 @@ -1,3 +1,14 @@ +2008-01-04 Michael Albinus <michael.albinus@gmx.de> + + * net/dbus.el (dbus-list-hash-table) + (dbus-name-owner-changed-handler): Replace "signal" by "member". + (dbus-check-event): Add serial number to event. + (dbus-handle-event): Apply return message if needed. + (dbus-event-serial-number): New defun. + (dbus-event-service-name, dbus-event-path-name) + (dbus-event-interface-name, dbus-event-member-name): Adapt + implementation to serial number. + 2008-01-04 Tassilo Horn <tassilo@member.fsf.org> * doc-view.el (doc-view-scroll-up-or-next-page)
--- a/lisp/net/dbus.el Fri Jan 04 21:44:23 2008 +0000 +++ b/lisp/net/dbus.el Fri Jan 04 21:52:51 2008 +0000 @@ -54,7 +54,7 @@ (setq dbus-registered-functions-table (make-hash-table :test 'equal)) (defun dbus-list-hash-table () - "Returns all registered signal registrations to D-Bus. + "Returns all registered member registrations to D-Bus. The return value is a list, with elements of kind (KEY . VALUE). See `dbus-registered-functions-table' for a description of the hash table." @@ -65,7 +65,7 @@ result)) (defun dbus-name-owner-changed-handler (&rest args) - "Reapplies all signal registrations to D-Bus. + "Reapplies all member registrations to D-Bus. This handler is applied when a \"NameOwnerChanged\" signal has arrived. SERVICE is the object name for which the name owner has been changed. OLD-OWNER is the previous owner of SERVICE, or the @@ -88,7 +88,7 @@ (maphash '(lambda (key value) (dolist (elt value) - ;; key has the structure (BUS INTERFACE SIGNAL). + ;; key has the structure (BUS INTERFACE MEMBER). ;; elt has the structure (UNAME SERVICE PATH HANDLER). (when (string-equal old-owner (car elt)) ;; Remove old key, and add new entry with changed name. @@ -98,7 +98,7 @@ (dbus-register-signal ;; BUS SERVICE PATH (nth 0 key) (nth 1 elt) (nth 2 elt) - ;; INTERFACE SIGNAL HANDLER + ;; INTERFACE MEMBER HANDLER (nth 1 key) (nth 2 key) (nth 3 elt))))) (copy-hash-table dbus-registered-functions-table)))) ;; The error is reported only in debug mode. @@ -127,16 +127,17 @@ "Checks whether EVENT is a well formed D-Bus event. EVENT is a list which starts with symbol `dbus-event': - (dbus-event BUS SERVICE PATH INTERFACE MEMBER HANDLER &rest ARGS) + (dbus-event BUS SERIAL SERVICE PATH INTERFACE MEMBER HANDLER &rest ARGS) -BUS identifies the D-Bus the signal is coming from. It is either -the symbol `:system' or the symbol `:session'. SERVICE and PATH -are the unique name and the object path of the D-Bus object -emitting the signal. INTERFACE and MEMBER denote the signal -which has been sent. HANDLER is the function which has been -registered for this signal. ARGS are the arguments passed to -HANDLER, when it is called during event handling in -`dbus-handle-event'. +BUS identifies the D-Bus the message is coming from. It is +either the symbol `:system' or the symbol `:session'. SERIAL is +the serial number of the received D-Bus message if it is a method +call, or nil. SERVICE and PATH are the unique name and the +object path of the D-Bus object emitting the message. INTERFACE +and MEMBER denote the message which has been sent. HANDLER is +the function which has been registered for this message. ARGS +are the arguments passed to HANDLER, when it is called during +event handling in `dbus-handle-event'. This function raises a `dbus-error' signal in case the event is not well formed." @@ -145,16 +146,18 @@ (eq (car event) 'dbus-event) ;; Bus symbol. (symbolp (nth 1 event)) + ;; Serial. + (or (natnump (nth 2 event)) (null (nth 2 event))) ;; Service. - (stringp (nth 2 event)) + (stringp (nth 3 event)) ;; Object path. - (stringp (nth 3 event)) + (stringp (nth 4 event)) ;; Interface. - (stringp (nth 4 event)) + (stringp (nth 5 event)) ;; Member. - (stringp (nth 5 event)) + (stringp (nth 6 event)) ;; Handler. - (functionp (nth 6 event))) + (functionp (nth 7 event))) (signal 'dbus-error (list "Not a valid D-Bus event" event)))) ;;;###autoload @@ -166,9 +169,14 @@ ;; We don't want to raise an error, because this function is called ;; in the event handling loop. (condition-case err - (progn + (let (result) (dbus-check-event event) - (apply (nth 6 event) (nthcdr 7 event))) + (setq result (apply (nth 7 event) (nthcdr 8 event))) + (unless (consp result) (setq result (cons result nil))) + ;; Return a message when serial is not nil. + (when (not (null (nth 2 event))) + (apply 'dbus-method-return + (nth 1 event) (nth 2 event) (nth 3 event) result))) (dbus-error (when dbus-debug (signal (car err) (cdr err)))))) (defun dbus-event-bus-name (event) @@ -180,13 +188,23 @@ (dbus-check-event event) (nth 1 event)) +(defun dbus-event-serial-number (event) + "Return the serial number of the corresponding D-Bus message. +The result is a number in case the D-Bus message is a method +call, or nil for all other mesage types. The serial number is +needed for generating a reply message. EVENT is a D-Bus event, +see `dbus-check-event'. This function raises a `dbus-error' +signal in case the event is not well formed." + (dbus-check-event event) + (nth 2 event)) + (defun dbus-event-service-name (event) "Return the name of the D-Bus object the event is coming from. The result is a string. EVENT is a D-Bus event, see `dbus-check-event'. This function raises a `dbus-error' signal in case the event is not well formed." (dbus-check-event event) - (nth 2 event)) + (nth 3 event)) (defun dbus-event-path-name (event) "Return the object path of the D-Bus object the event is coming from. @@ -194,7 +212,7 @@ This function raises a `dbus-error' signal in case the event is not well formed." (dbus-check-event event) - (nth 3 event)) + (nth 4 event)) (defun dbus-event-interface-name (event) "Return the interface name of the D-Bus object the event is coming from. @@ -202,7 +220,7 @@ This function raises a `dbus-error' signal in case the event is not well formed." (dbus-check-event event) - (nth 4 event)) + (nth 5 event)) (defun dbus-event-member-name (event) "Return the member name the event is coming from. @@ -211,7 +229,7 @@ function raises a `dbus-error' signal in case the event is not well formed." (dbus-check-event event) - (nth 5 event)) + (nth 6 event)) ;;; D-Bus registered names.