From 25c79797d1541f6859785eb3db2966806ca10ccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Mon, 14 Apr 2025 17:39:30 +0200 Subject: [PATCH] account-settings: Reorganize The main goal here is to move safety-related settings to a new tab so we can add more in the future. Since we do not want more tabs, we have to: - Move the sessions to a subpage accessible with a button in the "General" tab. While we are here, we reorder most of this tab. - Move the settings that were in the "Privacy" section of the "Security" tab to a new "Safety" tab. - Rename the "Security" tab to "Encryption", to avoid confusion between "Security" and "Safety". --- ...y-symbolic.svg => encryption-symbolic.svg} | 0 .../icons/scalable/status/safety-symbolic.svg | 4 + data/resources/resources.gresource.xml | 3 +- po/POTFILES.in | 23 +-- .../import_export_keys_subpage.rs | 2 +- .../import_export_keys_subpage.ui | 0 .../{security_page => encryption_page}/mod.rs | 95 +++--------- .../{security_page => encryption_page}/mod.ui | 35 +---- .../view/account_settings/general_page/mod.rs | 36 ++++- .../view/account_settings/general_page/mod.ui | 112 +++++++------- src/session/view/account_settings/mod.rs | 26 ++-- src/session/view/account_settings/mod.ui | 12 +- .../ignored_users_subpage/ignored_user_row.rs | 2 +- .../ignored_users_subpage/ignored_user_row.ui | 0 .../ignored_users_subpage/mod.rs | 2 +- .../ignored_users_subpage/mod.ui | 0 .../view/account_settings/safety_page/mod.rs | 137 ++++++++++++++++++ .../view/account_settings/safety_page/mod.ui | 39 +++++ .../view/account_settings/user_session/mod.rs | 6 + .../user_session_list_subpage.rs} | 53 +++---- .../user_session/user_session_list_subpage.ui | 109 ++++++++++++++ .../user_session_row.rs | 2 +- .../user_session_row.ui | 0 .../user_session_subpage.rs | 5 +- .../user_session_subpage.ui | 6 +- .../user_sessions_page/mod.ui | 100 ------------- src/ui-resources.gresource.xml | 15 +- 27 files changed, 476 insertions(+), 348 deletions(-) rename data/resources/icons/scalable/status/{security-symbolic.svg => encryption-symbolic.svg} (100%) create mode 100644 data/resources/icons/scalable/status/safety-symbolic.svg rename src/session/view/account_settings/{security_page => encryption_page}/import_export_keys_subpage.rs (99%) rename src/session/view/account_settings/{security_page => encryption_page}/import_export_keys_subpage.ui (100%) rename src/session/view/account_settings/{security_page => encryption_page}/mod.rs (77%) rename src/session/view/account_settings/{security_page => encryption_page}/mod.ui (80%) rename src/session/view/account_settings/{security_page => safety_page}/ignored_users_subpage/ignored_user_row.rs (98%) rename src/session/view/account_settings/{security_page => safety_page}/ignored_users_subpage/ignored_user_row.ui (100%) rename src/session/view/account_settings/{security_page => safety_page}/ignored_users_subpage/mod.rs (99%) rename src/session/view/account_settings/{security_page => safety_page}/ignored_users_subpage/mod.ui (100%) create mode 100644 src/session/view/account_settings/safety_page/mod.rs create mode 100644 src/session/view/account_settings/safety_page/mod.ui create mode 100644 src/session/view/account_settings/user_session/mod.rs rename src/session/view/account_settings/{user_sessions_page/mod.rs => user_session/user_session_list_subpage.rs} (87%) create mode 100644 src/session/view/account_settings/user_session/user_session_list_subpage.ui rename src/session/view/account_settings/{user_sessions_page => user_session}/user_session_row.rs (97%) rename src/session/view/account_settings/{user_sessions_page => user_session}/user_session_row.ui (100%) rename src/session/view/account_settings/{user_sessions_page => user_session}/user_session_subpage.rs (98%) rename src/session/view/account_settings/{user_sessions_page => user_session}/user_session_subpage.ui (97%) delete mode 100644 src/session/view/account_settings/user_sessions_page/mod.ui diff --git a/data/resources/icons/scalable/status/security-symbolic.svg b/data/resources/icons/scalable/status/encryption-symbolic.svg similarity index 100% rename from data/resources/icons/scalable/status/security-symbolic.svg rename to data/resources/icons/scalable/status/encryption-symbolic.svg diff --git a/data/resources/icons/scalable/status/safety-symbolic.svg b/data/resources/icons/scalable/status/safety-symbolic.svg new file mode 100644 index 00000000..c83ed58b --- /dev/null +++ b/data/resources/icons/scalable/status/safety-symbolic.svg @@ -0,0 +1,4 @@ + + + + diff --git a/data/resources/resources.gresource.xml b/data/resources/resources.gresource.xml index e7813411..310040e3 100644 --- a/data/resources/resources.gresource.xml +++ b/data/resources/resources.gresource.xml @@ -50,6 +50,7 @@ icons/scalable/status/document-symbolic.svg icons/scalable/status/done-symbolic.svg icons/scalable/status/empty-page-symbolic.svg + icons/scalable/status/encryption-symbolic.svg icons/scalable/status/error-symbolic.svg icons/scalable/status/explore-symbolic.svg icons/scalable/status/home-symbolic.svg @@ -58,7 +59,7 @@ icons/scalable/status/no-camera-symbolic.svg icons/scalable/status/notifications-symbolic.svg icons/scalable/status/person-symbolic.svg - icons/scalable/status/security-symbolic.svg + icons/scalable/status/safety-symbolic.svg icons/scalable/status/sync-off-symbolic.svg icons/scalable/status/sync-on-symbolic.svg icons/scalable/status/sync-partial-symbolic.svg diff --git a/po/POTFILES.in b/po/POTFILES.in index 4e2a061a..6b139d01 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -83,6 +83,10 @@ src/session/model/room_list/mod.rs src/session/model/sidebar_data/section/name.rs src/session/model/sidebar_data/icon_item.rs src/session/model/user_sessions_list/user_session.rs +src/session/view/account_settings/encryption_page/import_export_keys_subpage.rs +src/session/view/account_settings/encryption_page/import_export_keys_subpage.ui +src/session/view/account_settings/encryption_page/mod.rs +src/session/view/account_settings/encryption_page/mod.ui src/session/view/account_settings/general_page/change_password_subpage.rs src/session/view/account_settings/general_page/change_password_subpage.ui src/session/view/account_settings/general_page/deactivate_account_subpage.rs @@ -94,17 +98,14 @@ src/session/view/account_settings/general_page/mod.ui src/session/view/account_settings/mod.ui src/session/view/account_settings/notifications_page.rs src/session/view/account_settings/notifications_page.ui -src/session/view/account_settings/security_page/ignored_users_subpage/ignored_user_row.rs -src/session/view/account_settings/security_page/ignored_users_subpage/ignored_user_row.ui -src/session/view/account_settings/security_page/ignored_users_subpage/mod.ui -src/session/view/account_settings/security_page/import_export_keys_subpage.rs -src/session/view/account_settings/security_page/import_export_keys_subpage.ui -src/session/view/account_settings/security_page/mod.rs -src/session/view/account_settings/security_page/mod.ui -src/session/view/account_settings/user_sessions_page/mod.ui -src/session/view/account_settings/user_sessions_page/user_session_row.ui -src/session/view/account_settings/user_sessions_page/user_session_subpage.rs -src/session/view/account_settings/user_sessions_page/user_session_subpage.ui +src/session/view/account_settings/safety_page/ignored_users_subpage/ignored_user_row.rs +src/session/view/account_settings/safety_page/ignored_users_subpage/ignored_user_row.ui +src/session/view/account_settings/safety_page/ignored_users_subpage/mod.ui +src/session/view/account_settings/safety_page/mod.ui +src/session/view/account_settings/user_session/user_session_list_subpage.ui +src/session/view/account_settings/user_session/user_session_row.ui +src/session/view/account_settings/user_session/user_session_subpage.rs +src/session/view/account_settings/user_session/user_session_subpage.ui src/session/view/content/explore/mod.ui src/session/view/content/explore/public_room_row.rs src/session/view/content/explore/servers_popover.ui diff --git a/src/session/view/account_settings/security_page/import_export_keys_subpage.rs b/src/session/view/account_settings/encryption_page/import_export_keys_subpage.rs similarity index 99% rename from src/session/view/account_settings/security_page/import_export_keys_subpage.rs rename to src/session/view/account_settings/encryption_page/import_export_keys_subpage.rs index 1c089c53..69ff5669 100644 --- a/src/session/view/account_settings/security_page/import_export_keys_subpage.rs +++ b/src/session/view/account_settings/encryption_page/import_export_keys_subpage.rs @@ -27,7 +27,7 @@ mod imp { #[derive(Debug, Default, CompositeTemplate, glib::Properties)] #[template( - resource = "/org/gnome/Fractal/ui/session/view/account_settings/security_page/import_export_keys_subpage.ui" + resource = "/org/gnome/Fractal/ui/session/view/account_settings/encryption_page/import_export_keys_subpage.ui" )] #[properties(wrapper_type = super::ImportExportKeysSubpage)] pub struct ImportExportKeysSubpage { diff --git a/src/session/view/account_settings/security_page/import_export_keys_subpage.ui b/src/session/view/account_settings/encryption_page/import_export_keys_subpage.ui similarity index 100% rename from src/session/view/account_settings/security_page/import_export_keys_subpage.ui rename to src/session/view/account_settings/encryption_page/import_export_keys_subpage.ui diff --git a/src/session/view/account_settings/security_page/mod.rs b/src/session/view/account_settings/encryption_page/mod.rs similarity index 77% rename from src/session/view/account_settings/security_page/mod.rs rename to src/session/view/account_settings/encryption_page/mod.rs index b031ba87..432a21c6 100644 --- a/src/session/view/account_settings/security_page/mod.rs +++ b/src/session/view/account_settings/encryption_page/mod.rs @@ -2,16 +2,13 @@ use adw::{prelude::*, subclass::prelude::*}; use gettextrs::gettext; use gtk::{glib, glib::clone, CompositeTemplate}; -mod ignored_users_subpage; mod import_export_keys_subpage; -pub use self::{ - ignored_users_subpage::IgnoredUsersSubpage, - import_export_keys_subpage::{ImportExportKeysSubpage, ImportExportKeysSubpageMode}, +pub(super) use self::import_export_keys_subpage::{ + ImportExportKeysSubpage, ImportExportKeysSubpageMode, }; -use crate::{ - components::ButtonCountRow, - session::model::{CryptoIdentityState, RecoveryState, Session, SessionVerificationState}, +use crate::session::model::{ + CryptoIdentityState, RecoveryState, Session, SessionVerificationState, }; mod imp { @@ -23,16 +20,10 @@ mod imp { #[derive(Debug, Default, CompositeTemplate, glib::Properties)] #[template( - resource = "/org/gnome/Fractal/ui/session/view/account_settings/security_page/mod.ui" + resource = "/org/gnome/Fractal/ui/session/view/account_settings/encryption_page/mod.ui" )] - #[properties(wrapper_type = super::SecurityPage)] - pub struct SecurityPage { - #[template_child] - public_read_receipts_row: TemplateChild, - #[template_child] - typing_row: TemplateChild, - #[template_child] - ignored_users_row: TemplateChild, + #[properties(wrapper_type = super::EncryptionPage)] + pub struct EncryptionPage { #[template_child] crypto_identity_row: TemplateChild, #[template_child] @@ -52,15 +43,13 @@ mod imp { /// The current session. #[property(get, set = Self::set_session, nullable)] session: glib::WeakRef, - ignored_users_count_handler: RefCell>, security_handlers: RefCell>, - bindings: RefCell>, } #[glib::object_subclass] - impl ObjectSubclass for SecurityPage { - const NAME: &'static str = "SecurityPage"; - type Type = super::SecurityPage; + impl ObjectSubclass for EncryptionPage { + const NAME: &'static str = "EncryptionPage"; + type Type = super::EncryptionPage; type ParentType = adw::PreferencesPage; fn class_init(klass: &mut Self::Class) { @@ -73,29 +62,21 @@ mod imp { } #[glib::derived_properties] - impl ObjectImpl for SecurityPage { + impl ObjectImpl for EncryptionPage { fn dispose(&self) { if let Some(session) = self.session.upgrade() { - if let Some(handler) = self.ignored_users_count_handler.take() { - session.ignored_users().disconnect(handler); - } - let security = session.security(); for handler in self.security_handlers.take() { security.disconnect(handler); } } - - for binding in self.bindings.take() { - binding.unbind(); - } } } - impl WidgetImpl for SecurityPage {} - impl PreferencesPageImpl for SecurityPage {} + impl WidgetImpl for EncryptionPage {} + impl PreferencesPageImpl for EncryptionPage {} - impl SecurityPage { + impl EncryptionPage { /// Set the current session. fn set_session(&self, session: Option<&Session>) { let prev_session = self.session.upgrade(); @@ -105,55 +86,13 @@ mod imp { } if let Some(session) = prev_session { - if let Some(handler) = self.ignored_users_count_handler.take() { - session.ignored_users().disconnect(handler); - } - let security = session.security(); for handler in self.security_handlers.take() { security.disconnect(handler); } } - for binding in self.bindings.take() { - binding.unbind(); - } if let Some(session) = session { - let ignored_users = session.ignored_users(); - let ignored_users_count_handler = ignored_users.connect_items_changed(clone!( - #[weak(rename_to = imp)] - self, - move |ignored_users, _, _, _| { - imp.ignored_users_row - .set_count(ignored_users.n_items().to_string()); - } - )); - self.ignored_users_row - .set_count(ignored_users.n_items().to_string()); - - self.ignored_users_count_handler - .replace(Some(ignored_users_count_handler)); - - let session_settings = session.settings(); - - let public_read_receipts_binding = session_settings - .bind_property( - "public-read-receipts-enabled", - &*self.public_read_receipts_row, - "active", - ) - .bidirectional() - .sync_create() - .build(); - let typing_binding = session_settings - .bind_property("typing-enabled", &*self.typing_row, "active") - .bidirectional() - .sync_create() - .build(); - - self.bindings - .replace(vec![public_read_receipts_binding, typing_binding]); - let security = session.security(); let crypto_identity_state_handler = security.connect_crypto_identity_state_notify(clone!( @@ -343,12 +282,12 @@ mod imp { } glib::wrapper! { - /// Security settings page. - pub struct SecurityPage(ObjectSubclass) + /// Encryption settings page. + pub struct EncryptionPage(ObjectSubclass) @extends gtk::Widget, adw::PreferencesPage, @implements gtk::Accessible; } -impl SecurityPage { +impl EncryptionPage { pub fn new(session: &Session) -> Self { glib::Object::builder().property("session", session).build() } diff --git a/src/session/view/account_settings/security_page/mod.ui b/src/session/view/account_settings/encryption_page/mod.ui similarity index 80% rename from src/session/view/account_settings/security_page/mod.ui rename to src/session/view/account_settings/encryption_page/mod.ui index 3e635472..f2a79e43 100644 --- a/src/session/view/account_settings/security_page/mod.ui +++ b/src/session/view/account_settings/encryption_page/mod.ui @@ -1,36 +1,9 @@ -