From 1e314dc8c55c94f977b8ea07e5e6e448d13d870f Mon Sep 17 00:00:00 2001 From: Vivien Kraus Date: Mon, 4 Oct 2021 16:24:42 +0200 Subject: gui: add a function to insert code to run in the main thread --- po/POTFILES.in | 1 + src/scm/webid-oidc/client/gui/Makefile.am | 6 +++-- src/scm/webid-oidc/client/gui/clock.scm | 45 +++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 src/scm/webid-oidc/client/gui/clock.scm diff --git a/po/POTFILES.in b/po/POTFILES.in index 94d3140..04cbadc 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -44,6 +44,7 @@ src/scm/webid-oidc/client/gui/account-widget.scm src/scm/webid-oidc/client/gui/accounts-widget.scm src/scm/webid-oidc/client/gui/authorization-prompt.scm src/scm/webid-oidc/client/gui/client-widget.scm +src/scm/webid-oidc/client/gui/clock.scm src/scm/webid-oidc/client/gui/settings.scm src/scm/webid-oidc/dpop-proof.scm src/scm/webid-oidc/errors.scm diff --git a/src/scm/webid-oidc/client/gui/Makefile.am b/src/scm/webid-oidc/client/gui/Makefile.am index b6a498d..5e4f4c5 100644 --- a/src/scm/webid-oidc/client/gui/Makefile.am +++ b/src/scm/webid-oidc/client/gui/Makefile.am @@ -21,7 +21,8 @@ dist_guiclientwebidoidcmod_DATA += \ %reldir%/accounts-widget.scm \ %reldir%/application-hooks.scm \ %reldir%/application.scm \ - %reldir%/authorization-prompt.scm + %reldir%/authorization-prompt.scm \ + %reldir%/clock.scm guiclientwebidoidcgo_DATA += \ %reldir%/settings.go \ @@ -30,4 +31,5 @@ guiclientwebidoidcgo_DATA += \ %reldir%/accounts-widget.go \ %reldir%/application-hooks.go \ %reldir%/application.go \ - %reldir%/authorization-prompt.go + %reldir%/authorization-prompt.go \ + %reldir%/clock.go diff --git a/src/scm/webid-oidc/client/gui/clock.scm b/src/scm/webid-oidc/client/gui/clock.scm new file mode 100644 index 0000000..efb7ce8 --- /dev/null +++ b/src/scm/webid-oidc/client/gui/clock.scm @@ -0,0 +1,45 @@ +;; disfluid, implementation of the Solid specification +;; Copyright (C) 2021 Vivien Kraus + +;; This program is free software: you can redistribute it and/or modify +;; it under the terms of the GNU Affero General Public License as +;; published by the Free Software Foundation, either version 3 of the +;; License, or (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU Affero General Public License for more details. + +;; You should have received a copy of the GNU Affero General Public License +;; along with this program. If not, see . + +(define-module (webid-oidc client gui clock) + #:use-module (gi) + #:use-module (gi types) + #:use-module (gi util) + #:use-module (ice-9 atomic) + #:use-module (webid-oidc client gui application-hooks) + #:declarative? #t + #:export (wait)) + +(use-typelibs ("GLib" "2.0")) + +(define pending-ops (make-atomic-box '())) + +(define (wait f) + (let ((old (atomic-box-ref pending-ops))) + (unless (eq? old (atomic-box-compare-and-swap! pending-ops old `(,f ,@old))) + (wait f)))) + +(define (run . _) + (let ((old (atomic-box-ref pending-ops))) + (if (eq? old (atomic-box-compare-and-swap! pending-ops old '())) + (begin + (for-each (lambda (f) (f)) (reverse old)) + #t) + (run)))) + +(add-hook! application-activated-hook + (lambda (app) + (timeout-add 0 200 run))) -- cgit v1.2.3