diff options
Diffstat (limited to 'src/scm/webid-oidc/client/gui/account-widget.scm')
-rw-r--r-- | src/scm/webid-oidc/client/gui/account-widget.scm | 64 |
1 files changed, 37 insertions, 27 deletions
diff --git a/src/scm/webid-oidc/client/gui/account-widget.scm b/src/scm/webid-oidc/client/gui/account-widget.scm index f92e271..4449049 100644 --- a/src/scm/webid-oidc/client/gui/account-widget.scm +++ b/src/scm/webid-oidc/client/gui/account-widget.scm @@ -29,11 +29,14 @@ #:use-module (srfi srfi-26) #:use-module (webid-oidc errors) #:use-module ((webid-oidc stubs) #:prefix stubs:) + #:use-module ((webid-oidc config) #:prefix config:) + #:use-module ((webid-oidc client gui settings) #:prefix settings:) #:use-module (webid-oidc web-i18n) #:use-module (webid-oidc client client) #:use-module (webid-oidc client accounts) #:use-module (webid-oidc jwk) #:use-module (webid-oidc oidc-id-token) + #:use-module (webid-oidc client application) #:use-module (web uri) #:use-module (web response) #:use-module (rnrs bytevectors) @@ -42,7 +45,7 @@ #:duplicates (merge-generics) #:export ( - make-account-widget + ->widget )) (push-duplicate-handler! 'merge-generics) @@ -53,29 +56,36 @@ ;; The created account does not handle signals. -(define (make-account-widget account) - ;; Return many values: - ;; - the builder - ;; - the whole widget - ;; - the discard button - ;; - the use button - (if account - (let ((builder - (builder:new-from-file - (string-append config:uidir "/account-widget.glade")))) - (let ((whole-widget - (builder:get-object builder "account_widget")) - (webid - (builder:get-object builder "webid")) - (issuer - (builder:get-object builder "issuer")) - (discard-button - (builder:get-object builder "discard_button")) - (use-button - (builder:get-object builder "use_button"))) - (link-button:set-uri webid (uri->string (subject account))) - (link-button:set-uri issuer (uri->string (issuer account))) - (button:set-label webid (uri->string (subject account))) - (button:set-label issuer (uri->string (issuer account))) - (values builder whole-widget discard-button use-button))) - (values #f (label:new (G_ "You don’t have set up an account yet.")) #f #f))) +(define-method (->widget (account <account>) (can-use? <boolean>)) + (let ((builder + (builder:new-from-file + (string-append config:uidir "/account-widget.glade")))) + (let ((whole-widget + (builder:get-object builder "account_widget")) + (webid + (builder:get-object builder "webid")) + (issuer-link + (builder:get-object builder "issuer")) + (discard-button + (builder:get-object builder "discard_button")) + (use-button + (builder:get-object builder "use_button"))) + (link-button:set-uri webid (uri->string (subject account))) + (link-button:set-uri issuer-link (uri->string (issuer account))) + (button:set-label webid (uri->string (subject account))) + (button:set-label issuer-link (uri->string (issuer account))) + (unless can-use? + (widget:set-sensitive use-button #f)) + (connect discard-button clicked + (lambda _ + (widget:set-sensitive use-button #f) + (widget:set-sensitive discard-button #f) + (settings:application-state + (remove-account (settings:application-state) account)))) + (connect use-button clicked + (lambda _ + (widget:set-sensitive use-button #f) + (widget:set-sensitive discard-button #f) + (settings:application-state + (choose-account (settings:application-state) account)))) + (values builder whole-widget)))) |