Index: dbus.scm =================================================================== --- dbus.scm (revision 25842) +++ dbus.scm (working copy) @@ -89,6 +89,9 @@ (define dbus:type-signature-string (foreign-value DBUS_TYPE_SIGNATURE_AS_STRING int)) (define dbus:type-array (foreign-value DBUS_TYPE_ARRAY int)) (define dbus:type-array-string (foreign-value DBUS_TYPE_ARRAY_AS_STRING int)) +(define dbus:type-dict (foreign-value DBUS_TYPE_DICT_ENTRY int)) +(define dbus:type-struct (foreign-value DBUS_TYPE_STRUCT int)) +(define dbus:type-variant (foreign-value DBUS_TYPE_VARIANT int)) (define dbus:make-context) (define dbus:send) @@ -125,6 +128,8 @@ (define dbus:discover-api-xml) +(define-record unknown-type) + (define-external (C_msg_cb (dbus:bus bus) (message-ptr msg)) bool (let* ([cb (find-callback bus msg)][found (procedure? cb)]) ; (printf "got a message: ~s on bus ~a and found callback ~s~%" msg bus cb) @@ -387,11 +392,13 @@ C_return (ret);") iter)] [(eq? type dbus:type-array) (iter->vector (make-sub-iter iter))] + [(memq type (list dbus:type-dict dbus:type-struct dbus:type-variant)) + (iter->list (make-sub-iter iter))] ;; unsupported so far (not understood well enough): ;; dbus:type-object-path and dbus:type-signature ;; dbus:type-invalid is returned as #f (could be (void) but that ;; would be the termination condition for the iterator) - [else #f] ))) + [else (make-unknown-type)] ))) (define (make-sub-iter iter) (let* ([sub ((foreign-lambda* message-iter-ptr ((message-iter-ptr iter))