summaryrefslogtreecommitdiff
path: root/src/scm/webid-oidc/client/gui/account-widget.scm
diff options
context:
space:
mode:
Diffstat (limited to 'src/scm/webid-oidc/client/gui/account-widget.scm')
-rw-r--r--src/scm/webid-oidc/client/gui/account-widget.scm64
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))))