summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivien Kraus <vivien@planete-kraus.eu>2021-10-05 19:09:23 +0200
committerVivien Kraus <vivien@planete-kraus.eu>2021-10-07 12:34:19 +0200
commit84c881aec122036dc1f6f0c2e18f24ce5a28f06b (patch)
treef28cc57e50df5a48860b0c4468ccb7f1850b1953
parent4f2cb622a522691fd13412af9ea4aac0fb36076e (diff)
gui: use libhandy
-rw-r--r--guix/vkraus/packages/disfluid.scm6
-rw-r--r--po/POTFILES.in3
-rw-r--r--po/disfluid.pot22
-rw-r--r--po/fr.po25
-rw-r--r--src/scm/webid-oidc/client/gui/application.scm125
-rw-r--r--src/ui/Makefile.am3
-rw-r--r--src/ui/main-window.glade136
7 files changed, 271 insertions, 49 deletions
diff --git a/guix/vkraus/packages/disfluid.scm b/guix/vkraus/packages/disfluid.scm
index 6b3d852..38f24ed 100644
--- a/guix/vkraus/packages/disfluid.scm
+++ b/guix/vkraus/packages/disfluid.scm
@@ -34,7 +34,8 @@
#:use-module (gnu packages gettext)
#:use-module (gnu packages man)
#:use-module (gnu packages tls)
- #:use-module (gnu packages gtk))
+ #:use-module (gnu packages gtk)
+ #:use-module (gnu packages gnome))
(define-public disfluid-snapshot
(package
@@ -130,7 +131,8 @@
("guile-gi" ,guile-gi)
("gnutls" ,gnutls)
("nettle" ,nettle)
- ("gtk+" ,gtk+)))
+ ("gtk+" ,gtk+)
+ ("libhandy" ,libhandy)))
(synopsis "Demanding Interoperability to Strengthen the Free (Libre) Web: Introducing Disfluid")
(description "Demanding Interoperability to Strengthen the Free (Libre) Web: Introducing Disfluid")
(home-page "https://labo.planete-kraus.eu/webid-oidc.git")
diff --git a/po/POTFILES.in b/po/POTFILES.in
index d2b2a74..bde8044 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -83,4 +83,5 @@ src/scm/webid-oidc/token-endpoint.scm
src/scm/webid-oidc/web-i18n.scm
src/ui/account-widget.glade
src/ui/authorization-prompt.glade
-src/ui/client-widget.glade \ No newline at end of file
+src/ui/client-widget.glade
+src/ui/main-window.glade \ No newline at end of file
diff --git a/po/disfluid.pot b/po/disfluid.pot
index 539b72d..5e6e2e9 100644
--- a/po/disfluid.pot
+++ b/po/disfluid.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: disfluid SNAPSHOT\n"
"Report-Msgid-Bugs-To: vivien@planete-kraus.eu\n"
-"POT-Creation-Date: 2021-10-05 22:57+0200\n"
+"POT-Creation-Date: 2021-10-07 12:28+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -642,6 +642,10 @@ msgstr ""
msgid "The application state changed: it is now ~a.\n"
msgstr ""
+#: src/scm/webid-oidc/client/gui/application.scm:116
+msgid "Coming soon!"
+msgstr ""
+
#: src/scm/webid-oidc/client/gui/accounts-widget.scm:87
msgid "Please add an account."
msgstr ""
@@ -2283,3 +2287,19 @@ msgstr ""
#: src/ui/client-widget.glade:149
msgid "Update"
msgstr ""
+
+#: src/ui/main-window.glade:29
+msgid "Explore"
+msgstr ""
+
+#: src/ui/main-window.glade:43
+msgid "Authorizations"
+msgstr ""
+
+#: src/ui/main-window.glade:58
+msgid "Accounts"
+msgstr ""
+
+#: src/ui/main-window.glade:73
+msgid "Settings"
+msgstr ""
diff --git a/po/fr.po b/po/fr.po
index f6d000d..e0fefe9 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: webid-oidc 0.0.0\n"
"Report-Msgid-Bugs-To: vivien@planete-kraus.eu\n"
-"POT-Creation-Date: 2021-10-05 22:57+0200\n"
+"POT-Creation-Date: 2021-10-07 12:28+0200\n"
"PO-Revision-Date: 2021-10-05 22:56+0200\n"
"Last-Translator: Vivien Kraus <vivien@planete-kraus.eu>\n"
"Language-Team: French <vivien@planete-kraus.eu>\n"
@@ -695,6 +695,10 @@ msgstr ""
msgid "The application state changed: it is now ~a.\n"
msgstr "L’état de l’application a changé : c’est maintenant ~a.\n"
+#: src/scm/webid-oidc/client/gui/application.scm:116
+msgid "Coming soon!"
+msgstr "C’est pour bientôt !"
+
#: src/scm/webid-oidc/client/gui/accounts-widget.scm:87
msgid "Please add an account."
msgstr "Veuillez ajouter un compte."
@@ -2670,6 +2674,25 @@ msgstr "Annuler"
msgid "Update"
msgstr "Mettre à jour"
+#: src/ui/main-window.glade:29
+msgid "Explore"
+msgstr "Explorer"
+
+#: src/ui/main-window.glade:43
+msgid "Authorizations"
+msgstr "Autorisations"
+
+#: src/ui/main-window.glade:58
+msgid "Accounts"
+msgstr "Comptes"
+
+#: src/ui/main-window.glade:73
+msgid "Settings"
+msgstr "Paramètres"
+
+#~ msgid "Disfluid"
+#~ msgstr "Disfluid"
+
#, scheme-format
#~ msgid ""
#~ "The accounts changed: the main account is ~a, and the others are ~a.\n"
diff --git a/src/scm/webid-oidc/client/gui/application.scm b/src/scm/webid-oidc/client/gui/application.scm
index c2ee97d..ff7dce9 100644
--- a/src/scm/webid-oidc/client/gui/application.scm
+++ b/src/scm/webid-oidc/client/gui/application.scm
@@ -28,6 +28,7 @@
#:use-module (webid-oidc errors)
#:use-module (webid-oidc web-i18n)
#:use-module ((webid-oidc parameters) #:prefix p:)
+ #:use-module ((webid-oidc config) #:prefix config:)
#:use-module ((webid-oidc stubs) #:prefix stubs:)
#:use-module ((webid-oidc oidc-id-token) #:prefix id:)
#:use-module ((webid-oidc jwk) #:prefix jwk:)
@@ -48,7 +49,7 @@
#:duplicates (merge-generics)
#:export
(
- application
+ (the-application . application)
))
(push-duplicate-handler! 'merge-generics)
@@ -58,7 +59,8 @@
(use-typelibs (("Gio" "2.0") #:renamer (protect 'application:new))
("Gtk" "3.0")
- ("GLib" "2.0"))
+ ("GLib" "2.0")
+ ("Handy" "1"))
(define gi:connect
(@ (gi) connect))
@@ -69,7 +71,7 @@
(define gi:make
(@ (gi) make))
-(define application
+(define the-application
(application:new
"eu.planete_kraus.Disfluid"
(list->application-flags '(flags-none))))
@@ -77,52 +79,89 @@
(define app:client
(@ (webid-oidc client application) client))
-(define-method (->widget (application <application-state>))
- (let ((content (box:new (symbol->orientation 'horizontal) 12)))
- (call-with-values
- (lambda ()
- (client:->widget (app:client application)))
- (lambda (client-builder client)
- (call-with-values
- (lambda ()
- (accounts:->widget application))
- (lambda (accounts-builder accounts)
- (call-with-values
- (lambda ()
- (authorizations:->widget application))
- (lambda (authorizations-builder authorizations)
- (box:pack-start content client #t #t 0)
- (box:pack-start content accounts #t #t 0)
- (box:pack-start content authorizations #t #t 0)
- (values
- `(,client-builder ,accounts-builder ,authorizations-builder)
- content)))))))))
-
+(define window-builder #f)
(define main-window #f)
-
-(define current-state #f)
-(define current-state-widget #f)
-(define additional-gc-roots '())
-
-(define-method (set-state! (state <application-state>))
- (when (and main-window current-state-widget)
- (remove main-window current-state-widget))
- (set! current-state state)
+(define explorer-container #f)
+(define authorizations-container #f)
+(define accounts-container #f)
+(define settings-container #f)
+
+(define content-builder #f)
+(define explorer-widget #f)
+(define authorizations-widget #f)
+(define accounts-widget #f)
+(define settings-widget #f)
+
+(define (set-state! application)
(call-with-values
(lambda ()
- (->widget state))
- (lambda (roots widget)
- (set! current-state-widget widget)
- (set! additional-gc-roots roots)))
+ (client:->widget (app:client application)))
+ (lambda (client-builder client)
+ (call-with-values
+ (lambda ()
+ (accounts:->widget application))
+ (lambda (accounts-builder accounts)
+ (call-with-values
+ (lambda ()
+ (authorizations:->widget application))
+ (lambda (authorizations-builder authorizations)
+ (when (and explorer-container explorer-widget)
+ (container:remove explorer-container explorer-widget))
+ (when (and authorizations-container authorizations-widget)
+ (container:remove authorizations-container authorizations-widget))
+ (when (and accounts-container accounts-widget)
+ (container:remove accounts-container accounts-widget))
+ (when (and settings-container settings-widget)
+ (container:remove settings-container settings-widget))
+ (set! explorer-widget (label:new (G_ "Coming soon!")))
+ (set! authorizations-widget authorizations)
+ (set! accounts-widget accounts)
+ (set! settings-widget client)
+ (when explorer-container
+ (box:pack-end explorer-container explorer-widget #t #t 0))
+ (when authorizations-container
+ (box:pack-end authorizations-container authorizations-widget #t #t 0))
+ (when accounts-container
+ (box:pack-end accounts-container accounts-widget #t #t 0))
+ (when settings-container
+ (box:pack-end settings-container settings-widget #t #t 0))
+ (set! content-builder
+ `(,client-builder ,accounts-builder ,authorizations-builder))))))))
(when main-window
- (add main-window current-state-widget)
(show-all main-window)))
-(define (on-activate application)
+(define (on-activate app)
+ (set! window-builder
+ (builder:new-from-file (string-append config:uidir "/main-window.glade")))
(set! main-window
- (gi:make <GtkApplicationWindow>
- #:application application))
+ (builder:get-object window-builder "main_window"))
+ (set-object-property! main-window application app)
+ (add-window app main-window)
+ (set! explorer-container
+ (builder:get-object window-builder "explorer_container"))
+ (set! authorizations-container
+ (builder:get-object window-builder "authorizations_container"))
+ (set! accounts-container
+ (builder:get-object window-builder "accounts_container"))
+ (set! settings-container
+ (builder:get-object window-builder "settings_container"))
+ (let ((squeezer
+ (builder:get-object window-builder "squeezer"))
+ (headerbar-switcher
+ (builder:get-object window-builder "headerbar_switcher"))
+ (bottom-switcher
+ (builder:get-object window-builder "bottom_switcher"))
+ (notify
+ (gi:make <signal>
+ #:name "notify"
+ #:param-types (list G_TYPE_OBJECT))))
+ (gi:connect squeezer notify
+ (lambda _
+ (let ((child (get-visible-child squeezer)))
+ (set-reveal bottom-switcher
+ (not (is-a? child <HdyViewSwitcher>)))))))
(add-hook! application-state-changed-hook set-state! #t)
- (run-hook application-activated-hook application))
+ (run-hook application-activated-hook the-application)
+ (show-all main-window))
-(gi:connect application activate on-activate)
+(gi:connect the-application activate on-activate)
diff --git a/src/ui/Makefile.am b/src/ui/Makefile.am
index 706725c..cbd7b0f 100644
--- a/src/ui/Makefile.am
+++ b/src/ui/Makefile.am
@@ -19,4 +19,5 @@ dist_uipkgdata_DATA = \
%reldir%/client-widget.glade \
%reldir%/account-widget.glade \
%reldir%/accounts-widget.glade \
- %reldir%/authorization-prompt.glade
+ %reldir%/authorization-prompt.glade \
+ %reldir%/main-window.glade
diff --git a/src/ui/main-window.glade b/src/ui/main-window.glade
new file mode 100644
index 0000000..63ecda1
--- /dev/null
+++ b/src/ui/main-window.glade
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.36.0 -->
+<interface>
+ <requires lib="gtk+" version="3.24"/>
+ <requires lib="libhandy" version="0.0"/>
+ <object class="GtkApplicationWindow" id="main_window">
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="vexpand">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkStack" id="stack1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="transition_type">crossfade</property>
+ <child>
+ <object class="GtkBox" id="explorer_container">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="name">explore</property>
+ <property name="title" translatable="yes">Explore</property>
+ <property name="icon_name">eu.planete_kraus.Disfluid-symbolic</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="authorizations_container">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="name">authorizations</property>
+ <property name="title" translatable="yes">Authorizations</property>
+ <property name="icon_name">preferences-system-privacy-symbolic</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="accounts_container">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="name">accounts</property>
+ <property name="title" translatable="yes">Accounts</property>
+ <property name="icon_name">emoji-people-symbolic</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="settings_container">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="name">settings</property>
+ <property name="title" translatable="yes">Settings</property>
+ <property name="icon_name">preferences-system-symbolic</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="HdyViewSwitcherBar" id="bottom_switcher">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="policy">auto</property>
+ <property name="stack">stack1</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="titlebar">
+ <object class="HdyHeaderBar">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="show_close_button">True</property>
+ <property name="centering_policy">strict</property>
+ <child type="title">
+ <object class="HdySqueezer" id="squeezer">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="homogeneous">True</property>
+ <property name="transition_type">crossfade</property>
+ <child>
+ <object class="HdyViewSwitcher" id="headerbar_switcher">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="stack">stack1</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="name">title_label</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label">Disfluid</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>