[fractal/fractal-next] app: Show spinner by default instead of greeter
- From: Julian Sparber <jsparber src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal/fractal-next] app: Show spinner by default instead of greeter
- Date: Wed, 23 Feb 2022 17:27:23 +0000 (UTC)
commit 953466029da9c6a895eca8e974039f4ab042da0f
Author: Kévin Commaille <zecakeh tedomum fr>
Date: Tue Feb 15 11:01:26 2022 +0100
app: Show spinner by default instead of greeter
data/resources/ui/session.ui | 30 +-----------------------------
data/resources/ui/window.ui | 30 +++++++++++++++++++++++++++++-
src/session/mod.rs | 10 +++++++++-
src/window.rs | 22 ++++++++++++++++------
4 files changed, 55 insertions(+), 37 deletions(-)
---
diff --git a/data/resources/ui/session.ui b/data/resources/ui/session.ui
index ca7d10a51..f7969d3ef 100644
--- a/data/resources/ui/session.ui
+++ b/data/resources/ui/session.ui
@@ -4,36 +4,8 @@
<property name="focusable">true</property>
<property name="child">
<object class="GtkStack" id="stack">
- <property name="visible-child">loading</property>
+ <property name="visible-child">content</property>
<property name="transition-type">crossfade</property>
- <child>
- <object class="GtkWindowHandle" id="loading">
- <property name="child">
- <object class="GtkBox">
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkHeaderBar">
- <property name="show-title-buttons">True</property>
- <style>
- <class name="flat"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkSpinner">
- <property name="spinning">True</property>
- <property name="valign">center</property>
- <property name="halign">center</property>
- <property name="vexpand">True</property>
- <style>
- <class name="session-loading-spinner"/>
- </style>
- </object>
- </child>
- </object>
- </property>
- </object>
- </child>
<child>
<object class="AdwLeaflet" id="content">
<property name="fold-threshold-policy">minimum</property>
diff --git a/data/resources/ui/window.ui b/data/resources/ui/window.ui
index c0cab8f4d..372ffccda 100644
--- a/data/resources/ui/window.ui
+++ b/data/resources/ui/window.ui
@@ -16,8 +16,36 @@
</child>
<child>
<object class="GtkStack" id="main_stack">
- <property name="visible-child">greeter</property>
+ <property name="visible-child">loading</property>
<property name="transition-type">crossfade</property>
+ <child>
+ <object class="GtkWindowHandle" id="loading">
+ <property name="child">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHeaderBar">
+ <property name="show-title-buttons">True</property>
+ <style>
+ <class name="flat"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkSpinner">
+ <property name="spinning">True</property>
+ <property name="valign">center</property>
+ <property name="halign">center</property>
+ <property name="vexpand">True</property>
+ <style>
+ <class name="session-loading-spinner"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </property>
+ </object>
+ </child>
<child>
<object class="Greeter" id="greeter"/>
</child>
diff --git a/src/session/mod.rs b/src/session/mod.rs
index 915b64c80..e9b1505cd 100644
--- a/src/session/mod.rs
+++ b/src/session/mod.rs
@@ -492,6 +492,9 @@ impl Session {
let widget = SessionVerification::new(self);
stack.add_named(&widget, Some("session-verification"));
stack.set_visible_child(&widget);
+ if let Some(window) = self.parent_window() {
+ window.switch_to_sessions_page();
+ }
}
fn mark_ready(&self) {
@@ -529,6 +532,9 @@ impl Session {
let handle = spawn_tokio!(async move { client.bootstrap_cross_signing(None).await });
if handle.await.is_ok() {
priv_.stack.set_visible_child(&*priv_.content);
+ if let Some(window) = obj.parent_window() {
+ window.switch_to_sessions_page();
+ }
return;
}
}
@@ -737,10 +743,12 @@ impl Session {
/// Show the content of the session
pub fn show_content(&self) {
let priv_ = self.imp();
-
// FIXME: we should actually check if we have now the keys
priv_.stack.set_visible_child(&*priv_.content);
priv_.logout_on_dispose.set(false);
+ if let Some(window) = self.parent_window() {
+ window.switch_to_sessions_page();
+ }
if let Some(session_verificiation) = priv_.stack.child_by_name("session-verification") {
priv_.stack.remove(&session_verificiation);
diff --git a/src/window.rs b/src/window.rs
index b74ac6f07..fcdddfa15 100644
--- a/src/window.rs
+++ b/src/window.rs
@@ -22,6 +22,8 @@ mod imp {
#[template_child]
pub main_stack: TemplateChild<gtk::Stack>,
#[template_child]
+ pub loading: TemplateChild<gtk::WindowHandle>,
+ #[template_child]
pub greeter: TemplateChild<Greeter>,
#[template_child]
pub login: TemplateChild<Login>,
@@ -88,7 +90,7 @@ mod imp {
self.login
.connect_new_session(clone!(@weak obj => move |_login, session| {
obj.add_session(&session);
- obj.switch_to_sessions_page();
+ obj.switch_to_loading_page();
}));
self.main_stack.connect_visible_child_notify(
@@ -171,11 +173,14 @@ impl Window {
fn restore_sessions(&self) {
match secret::restore_sessions() {
Ok(sessions) => {
- for stored_session in sessions {
- let session = Session::new();
- session.login_with_previous_session(stored_session);
- self.add_session(&session);
- self.switch_to_sessions_page();
+ if sessions.is_empty() {
+ self.switch_to_greeter_page(false);
+ } else {
+ for stored_session in sessions {
+ let session = Session::new();
+ session.login_with_previous_session(stored_session);
+ self.add_session(&session);
+ }
}
}
Err(error) => {
@@ -234,6 +239,11 @@ impl Window {
}
}
+ pub fn switch_to_loading_page(&self) {
+ let priv_ = self.imp();
+ priv_.main_stack.set_visible_child(&*priv_.loading);
+ }
+
pub fn switch_to_sessions_page(&self) {
let priv_ = self.imp();
priv_.main_stack.set_visible_child(&priv_.sessions.get());
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]