From 09cb50ce4b1aa7ad80efad54ad6378adbbac21b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Wed, 18 Sep 2024 14:58:29 +0200 Subject: [PATCH 1/3] misc: Enable libadwaita 1.6 cargo feature --- Cargo.toml | 2 +- src/session/view/account_settings/user_sessions_page/mod.rs | 2 +- src/session/view/content/room_details/mod.rs | 4 ++++ src/utils/macros.rs | 2 ++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 779e9fa64..f7e2a21c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -52,7 +52,7 @@ url = "2" webp = "0.3" # gtk-rs project and dependents. These usually need to be updated together. -adw = { package = "libadwaita", version = "0.7", features = ["v1_5"] } +adw = { package = "libadwaita", version = "0.7", features = ["v1_6"] } glycin = { version = "2.0.1", default-features = false, features = ["tokio", "gdk4"] } gst = { version = "0.23", package = "gstreamer" } gst_app = { version = "0.23", package = "gstreamer-app" } diff --git a/src/session/view/account_settings/user_sessions_page/mod.rs b/src/session/view/account_settings/user_sessions_page/mod.rs index d23ed3d96..cade68550 100644 --- a/src/session/view/account_settings/user_sessions_page/mod.rs +++ b/src/session/view/account_settings/user_sessions_page/mod.rs @@ -195,7 +195,7 @@ mod imp { glib::wrapper! { /// User sessions page. pub struct UserSessionsPage(ObjectSubclass) - @extends gtk::Widget, gtk::Window, adw::Window, adw::PreferencesWindow, @implements gtk::Accessible; + @extends gtk::Widget, gtk::Window, adw::Window, adw::PreferencesPage, @implements gtk::Accessible; } #[gtk::template_callbacks] diff --git a/src/session/view/content/room_details/mod.rs b/src/session/view/content/room_details/mod.rs index 0146e26cf..fb8555257 100644 --- a/src/session/view/content/room_details/mod.rs +++ b/src/session/view/content/room_details/mod.rs @@ -1,3 +1,7 @@ +// FIXME: AdwPreferencesWindow is deprecated but we cannot use +// AdwPreferencesDialog yet because we need to be able to open the media viewer. +#![allow(deprecated)] + use adw::{prelude::*, subclass::prelude::*}; use gtk::{glib, CompositeTemplate}; diff --git a/src/utils/macros.rs b/src/utils/macros.rs index a2fa4ac77..05f37aebe 100644 --- a/src/utils/macros.rs +++ b/src/utils/macros.rs @@ -188,6 +188,8 @@ macro_rules! _add_toast { use adw::prelude::PreferencesDialogExt; dialog.add_toast($toast); } else if let Some(root) = $widget.root() { + // FIXME: AdwPreferencesWindow is deprecated but RoomDetails uses it. + #[allow(deprecated)] if let Some(window) = root.downcast_ref::() { use adw::prelude::PreferencesWindowExt; window.add_toast($toast); -- GitLab From 4a26fca3b75070f1d70be5843cdc7ffdbf6984a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Wed, 18 Sep 2024 15:31:57 +0200 Subject: [PATCH 2/3] components: Replace Spinner with AdwSpinner --- data/resources/style.css | 5 -- po/POTFILES.in | 1 - src/account_chooser_dialog/account_row.rs | 4 +- src/account_chooser_dialog/account_row.ui | 4 +- src/account_switcher/session_item.ui | 6 +- src/components/action_button.rs | 8 +-- src/components/action_button.ui | 7 +- src/components/dialogs/join_room.rs | 4 +- src/components/dialogs/join_room.ui | 5 +- src/components/dialogs/user_profile.rs | 4 +- src/components/dialogs/user_profile.ui | 5 +- src/components/loading/bin.rs | 4 -- src/components/loading/bin.ui | 2 +- src/components/loading/mod.rs | 3 +- src/components/loading/spinner.rs | 71 ------------------- src/components/media/content_viewer.rs | 3 - src/components/media/content_viewer.ui | 9 +-- src/components/rows/switch_loading_row.rs | 8 +-- src/components/rows/switch_loading_row.ui | 2 +- src/login/session_setup_view.ui | 10 ++- .../account_settings/notifications_page.rs | 13 +--- .../user_sessions_page/mod.ui | 8 +-- src/session/view/content/explore/mod.rs | 3 +- src/session/view/content/explore/mod.ui | 10 +-- .../view/content/explore/public_room_row.rs | 6 +- .../room_details/history_viewer/audio.ui | 9 +-- .../room_details/history_viewer/file.ui | 9 +-- .../history_viewer/visual_media.ui | 9 +-- .../room_details/invite_subpage/mod.rs | 4 +- .../room_details/invite_subpage/mod.ui | 8 +-- .../view/content/room_history/item_row.rs | 11 ++- .../content/room_history/message_row/audio.rs | 4 +- .../content/room_history/message_row/audio.ui | 5 +- .../message_row/message_state_stack.ui | 5 +- .../room_history/message_row/visual_media.rs | 4 +- .../room_history/message_row/visual_media.ui | 4 +- src/session/view/content/room_history/mod.rs | 4 +- src/session/view/content/room_history/mod.ui | 9 +-- src/session/view/create_dm_dialog/mod.ui | 8 +-- src/window.rs | 4 +- src/window.ui | 10 +-- 41 files changed, 73 insertions(+), 239 deletions(-) delete mode 100644 src/components/loading/spinner.rs diff --git a/data/resources/style.css b/data/resources/style.css index b3c342888..0aa715c55 100644 --- a/data/resources/style.css +++ b/data/resources/style.css @@ -255,11 +255,6 @@ editable-avatar .cutout { padding: 2px; } -spinner-wrapper.large spinner { - min-width: 32px; - min-height: 32px; -} - .substring-entry-row .header .subtitle { margin-top: 4px; margin-bottom: -4px; diff --git a/po/POTFILES.in b/po/POTFILES.in index 05f2b9b74..6fbbc4968 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -23,7 +23,6 @@ src/components/dialogs/join_room.ui src/components/dialogs/message_dialogs.rs src/components/dialogs/user_profile.ui src/components/offline_banner.rs -src/components/loading/spinner.rs src/components/media/content_viewer.rs src/components/media/location_viewer.rs src/components/reaction_chooser.ui diff --git a/src/account_chooser_dialog/account_row.rs b/src/account_chooser_dialog/account_row.rs index 5c6ed0f38..7f9f6b74f 100644 --- a/src/account_chooser_dialog/account_row.rs +++ b/src/account_chooser_dialog/account_row.rs @@ -1,7 +1,7 @@ use gtk::{self, glib, prelude::*, subclass::prelude::*, CompositeTemplate}; use crate::{ - components::{Avatar, AvatarData, Spinner}, + components::{Avatar, AvatarData}, prelude::*, session::model::Session, session_list::{FailedSession, SessionInfo}, @@ -41,8 +41,6 @@ mod imp { type ParentType = gtk::ListBoxRow; fn class_init(klass: &mut Self::Class) { - Spinner::ensure_type(); - Self::bind_template(klass); } diff --git a/src/account_chooser_dialog/account_row.ui b/src/account_chooser_dialog/account_row.ui index 65a150bc9..bc3677474 100644 --- a/src/account_chooser_dialog/account_row.ui +++ b/src/account_chooser_dialog/account_row.ui @@ -38,7 +38,9 @@ loading - + + 24 + diff --git a/src/account_switcher/session_item.ui b/src/account_switcher/session_item.ui index fe8241617..b9d812bac 100644 --- a/src/account_switcher/session_item.ui +++ b/src/account_switcher/session_item.ui @@ -41,7 +41,11 @@ loading - + + center + center + 24 + diff --git a/src/components/action_button.rs b/src/components/action_button.rs index 077b902d6..549525119 100644 --- a/src/components/action_button.rs +++ b/src/components/action_button.rs @@ -1,7 +1,5 @@ -use adw::subclass::prelude::*; -use gtk::{glib, glib::closure_local, prelude::*, CompositeTemplate}; - -use super::Spinner; +use adw::{prelude::*, subclass::prelude::*}; +use gtk::{glib, glib::closure_local, CompositeTemplate}; #[derive(Debug, Default, Hash, Eq, PartialEq, Clone, Copy, glib::Enum)] #[repr(u32)] @@ -67,8 +65,6 @@ mod imp { pub stack: TemplateChild, #[template_child] pub button_default: TemplateChild, - #[template_child] - pub spinner: TemplateChild, } #[glib::object_subclass] diff --git a/src/components/action_button.ui b/src/components/action_button.ui index 731ab896a..240dcc1a4 100644 --- a/src/components/action_button.ui +++ b/src/components/action_button.ui @@ -72,9 +72,12 @@ false center - + center - + center + 20 + 20 + diff --git a/src/components/dialogs/join_room.rs b/src/components/dialogs/join_room.rs index 56794ab65..bb0ef28fe 100644 --- a/src/components/dialogs/join_room.rs +++ b/src/components/dialogs/join_room.rs @@ -4,7 +4,7 @@ use gtk::{glib, glib::clone, CompositeTemplate}; use super::ToastableDialog; use crate::{ - components::{Avatar, LoadingButton, Spinner}, + components::{Avatar, LoadingButton}, i18n::ngettext_f, prelude::*, session::model::{RemoteRoom, Session}, @@ -69,8 +69,6 @@ mod imp { type ParentType = ToastableDialog; fn class_init(klass: &mut Self::Class) { - Spinner::ensure_type(); - Self::bind_template(klass); Self::Type::bind_template_callbacks(klass); } diff --git a/src/components/dialogs/join_room.ui b/src/components/dialogs/join_room.ui index e49ca0d15..18caa56f8 100644 --- a/src/components/dialogs/join_room.ui +++ b/src/components/dialogs/join_room.ui @@ -110,10 +110,7 @@ loading - - center - center - + diff --git a/src/components/dialogs/user_profile.rs b/src/components/dialogs/user_profile.rs index 961e9542a..b9fac32ea 100644 --- a/src/components/dialogs/user_profile.rs +++ b/src/components/dialogs/user_profile.rs @@ -4,7 +4,7 @@ use ruma::OwnedUserId; use super::ToastableDialog; use crate::{ - components::{Spinner, UserPage}, + components::UserPage, prelude::*, session::model::{Member, RemoteUser, Session, User}, spawn, @@ -31,8 +31,6 @@ mod imp { type ParentType = ToastableDialog; fn class_init(klass: &mut Self::Class) { - Spinner::ensure_type(); - Self::bind_template(klass); Self::Type::bind_template_callbacks(klass); } diff --git a/src/components/dialogs/user_profile.ui b/src/components/dialogs/user_profile.ui index 65e9cd680..5f3d9cb94 100644 --- a/src/components/dialogs/user_profile.ui +++ b/src/components/dialogs/user_profile.ui @@ -9,10 +9,7 @@ loading - - center - center - + diff --git a/src/components/loading/bin.rs b/src/components/loading/bin.rs index 166c91c3b..31c0fd5c2 100644 --- a/src/components/loading/bin.rs +++ b/src/components/loading/bin.rs @@ -1,8 +1,6 @@ use adw::prelude::*; use gtk::{glib, subclass::prelude::*, CompositeTemplate}; -use super::Spinner; - mod imp { use std::marker::PhantomData; @@ -35,8 +33,6 @@ mod imp { fn class_init(klass: &mut Self::Class) { klass.set_layout_manager_type::(); - Spinner::ensure_type(); - Self::bind_template(klass); } diff --git a/src/components/loading/bin.ui b/src/components/loading/bin.ui index c8b4635b3..50501ed94 100644 --- a/src/components/loading/bin.ui +++ b/src/components/loading/bin.ui @@ -16,7 +16,7 @@ loading - + center center diff --git a/src/components/loading/mod.rs b/src/components/loading/mod.rs index ad2005a28..4b499c54e 100644 --- a/src/components/loading/mod.rs +++ b/src/components/loading/mod.rs @@ -1,5 +1,4 @@ mod bin; mod button; -mod spinner; -pub use self::{bin::LoadingBin, button::LoadingButton, spinner::Spinner}; +pub use self::{bin::LoadingBin, button::LoadingButton}; diff --git a/src/components/loading/spinner.rs b/src/components/loading/spinner.rs deleted file mode 100644 index b7fc35d9e..000000000 --- a/src/components/loading/spinner.rs +++ /dev/null @@ -1,71 +0,0 @@ -use gettextrs::gettext; -use gtk::{glib, prelude::*, subclass::prelude::*}; - -mod imp { - use super::*; - - #[derive(Debug, Default)] - pub struct Spinner { - inner: gtk::Spinner, - } - - #[glib::object_subclass] - impl ObjectSubclass for Spinner { - const NAME: &'static str = "Spinner"; - type Type = super::Spinner; - type ParentType = gtk::Widget; - - fn class_init(klass: &mut Self::Class) { - klass.set_layout_manager_type::(); - klass.set_css_name("spinner-wrapper"); - klass.set_accessible_role(gtk::AccessibleRole::Status); - } - } - - impl ObjectImpl for Spinner { - fn constructed(&self) { - self.parent_constructed(); - let obj = self.obj(); - - self.inner.set_parent(&*obj); - obj.update_property(&[gtk::accessible::Property::Label(&gettext("Loading"))]) - } - - fn dispose(&self) { - self.inner.unparent(); - } - } - - impl WidgetImpl for Spinner { - fn map(&self) { - self.parent_map(); - self.inner.start(); - } - - fn unmap(&self) { - self.inner.stop(); - self.parent_unmap(); - } - } - - impl AccessibleImpl for Spinner { - fn first_accessible_child(&self) -> Option { - // Hide the children in the a11y tree. - None - } - } -} - -glib::wrapper! { - /// A spinner. - /// - /// This is a wrapper around `GtkSpinner` that makes sure the spinner is stopped when it is not mapped. - pub struct Spinner(ObjectSubclass) - @extends gtk::Widget, @implements gtk::Accessible; -} - -impl Default for Spinner { - fn default() -> Self { - glib::Object::new() - } -} diff --git a/src/components/media/content_viewer.rs b/src/components/media/content_viewer.rs index a37bdecdb..e19d4e1a4 100644 --- a/src/components/media/content_viewer.rs +++ b/src/components/media/content_viewer.rs @@ -6,7 +6,6 @@ use tracing::warn; use super::{AnimatedImagePaintable, AudioPlayer, LocationViewer}; use crate::{ - components::Spinner, spawn, utils::{media::image::load_image, CountedRef}, }; @@ -59,8 +58,6 @@ mod imp { pub viewer: TemplateChild, #[template_child] pub fallback: TemplateChild, - #[template_child] - pub spinner: TemplateChild, /// Whether to play the media content automatically. #[property(get, construct_only)] pub autoplay: Cell, diff --git a/src/components/media/content_viewer.ui b/src/components/media/content_viewer.ui index c95c5ea0e..a760a201f 100644 --- a/src/components/media/content_viewer.ui +++ b/src/components/media/content_viewer.ui @@ -7,14 +7,7 @@ loading - - center - center - True - - + diff --git a/src/components/rows/switch_loading_row.rs b/src/components/rows/switch_loading_row.rs index 71eb42716..7da05d82d 100644 --- a/src/components/rows/switch_loading_row.rs +++ b/src/components/rows/switch_loading_row.rs @@ -1,7 +1,7 @@ -use adw::subclass::prelude::*; -use gtk::{glib, glib::clone, prelude::*, CompositeTemplate}; +use adw::{prelude::*, subclass::prelude::*}; +use gtk::{glib, glib::clone, CompositeTemplate}; -use crate::{components::Spinner, utils::bool_to_accessible_tristate}; +use crate::utils::bool_to_accessible_tristate; mod imp { use std::{cell::Cell, marker::PhantomData}; @@ -15,7 +15,7 @@ mod imp { #[properties(wrapper_type = super::SwitchLoadingRow)] pub struct SwitchLoadingRow { #[template_child] - pub spinner: TemplateChild, + pub spinner: TemplateChild, #[template_child] pub switch: TemplateChild, /// Whether the switch is active. diff --git a/src/components/rows/switch_loading_row.ui b/src/components/rows/switch_loading_row.ui index bab00200b..4646e6895 100644 --- a/src/components/rows/switch_loading_row.ui +++ b/src/components/rows/switch_loading_row.ui @@ -9,7 +9,7 @@ center 6 - + False status diff --git a/src/login/session_setup_view.ui b/src/login/session_setup_view.ui index 5f1ecc8a4..4453bd22c 100644 --- a/src/login/session_setup_view.ui +++ b/src/login/session_setup_view.ui @@ -30,12 +30,10 @@ vertical 18 - - center - - + + 64 + 64 + diff --git a/src/session/view/account_settings/notifications_page.rs b/src/session/view/account_settings/notifications_page.rs index b61ebf42f..fbaed0f21 100644 --- a/src/session/view/account_settings/notifications_page.rs +++ b/src/session/view/account_settings/notifications_page.rs @@ -4,9 +4,7 @@ use gtk::{gio, glib, glib::clone, CompositeTemplate}; use tracing::error; use crate::{ - components::{ - CheckLoadingRow, EntryAddRow, LoadingBin, RemovableRow, Spinner, SwitchLoadingRow, - }, + components::{CheckLoadingRow, EntryAddRow, RemovableRow, SwitchLoadingRow}, i18n::gettext_f, session::model::{NotificationsGlobalSetting, NotificationsSettings}, spawn, toast, @@ -14,11 +12,7 @@ use crate::{ }; mod imp { - use std::{ - cell::{Cell, RefCell}, - collections::HashMap, - marker::PhantomData, - }; + use std::{cell::Cell, marker::PhantomData}; use glib::subclass::InitializingObject; @@ -46,7 +40,6 @@ mod imp { pub keywords: TemplateChild, #[template_child] pub keywords_add_row: TemplateChild, - pub keywords_suffixes: RefCell>, /// The notifications settings of the current session. #[property(get, set = Self::set_notifications_settings, explicit_notify)] pub notifications_settings: BoundObjectWeakRef, @@ -68,8 +61,6 @@ mod imp { type ParentType = adw::PreferencesPage; fn class_init(klass: &mut Self::Class) { - Spinner::ensure_type(); - Self::bind_template(klass); Self::Type::bind_template_callbacks(klass); diff --git a/src/session/view/account_settings/user_sessions_page/mod.ui b/src/session/view/account_settings/user_sessions_page/mod.ui index 42872a75f..a41c3d989 100644 --- a/src/session/view/account_settings/user_sessions_page/mod.ui +++ b/src/session/view/account_settings/user_sessions_page/mod.ui @@ -11,13 +11,7 @@ loading - - center - center - - + diff --git a/src/session/view/content/explore/mod.rs b/src/session/view/content/explore/mod.rs index a49b12e0d..e56fa96d3 100644 --- a/src/session/view/content/explore/mod.rs +++ b/src/session/view/content/explore/mod.rs @@ -14,7 +14,7 @@ pub use self::{ servers_popover::ExploreServersPopover, }; use self::{server::Server, server_list::ServerList, server_row::ExploreServerRow}; -use crate::{components::Spinner, session::model::Session}; +use crate::session::model::Session; mod imp { use std::cell::RefCell; @@ -57,7 +57,6 @@ mod imp { PublicRoom::ensure_type(); PublicRoomList::ensure_type(); PublicRoomRow::ensure_type(); - Spinner::ensure_type(); Self::bind_template(klass); diff --git a/src/session/view/content/explore/mod.ui b/src/session/view/content/explore/mod.ui index 8830ad371..6418bea5c 100644 --- a/src/session/view/content/explore/mod.ui +++ b/src/session/view/content/explore/mod.ui @@ -42,7 +42,6 @@ - spinner crossfade - + diff --git a/src/session/view/content/explore/public_room_row.rs b/src/session/view/content/explore/public_room_row.rs index c27db894f..12aaffd86 100644 --- a/src/session/view/content/explore/public_room_row.rs +++ b/src/session/view/content/explore/public_room_row.rs @@ -5,7 +5,7 @@ use ruma::ServerName; use super::PublicRoom; use crate::{ - components::{Avatar, LoadingButton, Spinner}, + components::{Avatar, LoadingButton}, gettext_f, ngettext_f, prelude::*, spawn, toast, @@ -131,9 +131,11 @@ mod imp { self.update_button(); self.update_row(); } else if self.original_child.borrow().is_none() { - let spinner = Spinner::default(); + let spinner = adw::Spinner::new(); spinner.set_margin_top(12); spinner.set_margin_bottom(12); + spinner.set_width_request(24); + spinner.set_height_request(24); self.original_child.replace(obj.child()); obj.set_child(Some(&spinner)); } diff --git a/src/session/view/content/room_details/history_viewer/audio.ui b/src/session/view/content/room_details/history_viewer/audio.ui index e728113c8..ba5196130 100644 --- a/src/session/view/content/room_details/history_viewer/audio.ui +++ b/src/session/view/content/room_details/history_viewer/audio.ui @@ -16,14 +16,7 @@ loading Loading - - center - center - True - - + diff --git a/src/session/view/content/room_details/history_viewer/file.ui b/src/session/view/content/room_details/history_viewer/file.ui index 0e2cb5a00..d436a73cc 100644 --- a/src/session/view/content/room_details/history_viewer/file.ui +++ b/src/session/view/content/room_details/history_viewer/file.ui @@ -15,14 +15,7 @@ loading Loading - - center - center - True - - + diff --git a/src/session/view/content/room_details/history_viewer/visual_media.ui b/src/session/view/content/room_details/history_viewer/visual_media.ui index e1c01166f..0d21ca231 100644 --- a/src/session/view/content/room_details/history_viewer/visual_media.ui +++ b/src/session/view/content/room_details/history_viewer/visual_media.ui @@ -22,14 +22,7 @@ loading Loading - - center - center - True - - + diff --git a/src/session/view/content/room_details/invite_subpage/mod.rs b/src/session/view/content/room_details/invite_subpage/mod.rs index 12740362f..8c00554e6 100644 --- a/src/session/view/content/room_details/invite_subpage/mod.rs +++ b/src/session/view/content/room_details/invite_subpage/mod.rs @@ -13,7 +13,7 @@ use self::{ row::InviteRow, }; use crate::{ - components::{LoadingButton, PillSearchEntry, PillSource, Spinner}, + components::{LoadingButton, PillSearchEntry, PillSource}, prelude::*, session::model::{Room, User}, toast, @@ -50,8 +50,6 @@ mod imp { pub no_search_page: TemplateChild, #[template_child] pub error_page: TemplateChild, - #[template_child] - pub loading_page: TemplateChild, /// The room users will be invited to. #[property(get, set = Self::set_room, construct_only)] pub room: glib::WeakRef, diff --git a/src/session/view/content/room_details/invite_subpage/mod.ui b/src/session/view/content/room_details/invite_subpage/mod.ui index 383e3d2f1..172395143 100644 --- a/src/session/view/content/room_details/invite_subpage/mod.ui +++ b/src/session/view/content/room_details/invite_subpage/mod.ui @@ -148,13 +148,7 @@ loading Searching for Users - - center - center - - + diff --git a/src/session/view/content/room_history/item_row.rs b/src/session/view/content/room_history/item_row.rs index 6860ef4b3..03790be84 100644 --- a/src/session/view/content/room_history/item_row.rs +++ b/src/session/view/content/room_history/item_row.rs @@ -8,7 +8,7 @@ use tracing::error; use super::{DividerRow, MessageRow, RoomHistory, StateRow, TypingRow}; use crate::{ - components::{ContextMenuBin, ContextMenuBinExt, ContextMenuBinImpl, ReactionChooser, Spinner}, + components::{ContextMenuBin, ContextMenuBinExt, ContextMenuBinImpl, ReactionChooser}, prelude::*, session::{ model::{Event, EventKey, MessageState, TimelineItem, VirtualItem, VirtualItemKind}, @@ -308,10 +308,15 @@ mod imp { match &*item.kind() { VirtualItemKind::Spinner => { - if !obj.child().is_some_and(|widget| widget.is::()) { - let spinner = Spinner::default(); + if !obj + .child() + .is_some_and(|widget| widget.is::()) + { + let spinner = adw::Spinner::new(); spinner.set_margin_top(12); spinner.set_margin_bottom(12); + spinner.set_height_request(24); + spinner.set_width_request(24); obj.set_child(Some(&spinner)); } } diff --git a/src/session/view/content/room_history/message_row/audio.rs b/src/session/view/content/room_history/message_row/audio.rs index a1220d0eb..2e02552ea 100644 --- a/src/session/view/content/room_history/message_row/audio.rs +++ b/src/session/view/content/room_history/message_row/audio.rs @@ -9,7 +9,7 @@ use tracing::warn; use super::ContentFormat; use crate::{ - components::{AudioPlayer, Spinner}, + components::AudioPlayer, gettext_f, session::model::Session, spawn, @@ -41,7 +41,7 @@ mod imp { #[template_child] pub player: TemplateChild, #[template_child] - pub state_spinner: TemplateChild, + pub state_spinner: TemplateChild, #[template_child] pub state_error: TemplateChild, } diff --git a/src/session/view/content/room_history/message_row/audio.ui b/src/session/view/content/room_history/message_row/audio.ui index 7bbae71b5..ca01adc19 100644 --- a/src/session/view/content/room_history/message_row/audio.ui +++ b/src/session/view/content/room_history/message_row/audio.ui @@ -23,7 +23,10 @@ - + + 20 + 20 + diff --git a/src/session/view/content/room_history/message_row/message_state_stack.ui b/src/session/view/content/room_history/message_row/message_state_stack.ui index 9a4c491e6..164f1e759 100644 --- a/src/session/view/content/room_history/message_row/message_state_stack.ui +++ b/src/session/view/content/room_history/message_row/message_state_stack.ui @@ -8,8 +8,9 @@ sending - - center + + 20 + 20 Sending… diff --git a/src/session/view/content/room_history/message_row/visual_media.rs b/src/session/view/content/room_history/message_row/visual_media.rs index e2632092d..6f071e4a2 100644 --- a/src/session/view/content/room_history/message_row/visual_media.rs +++ b/src/session/view/content/room_history/message_row/visual_media.rs @@ -11,7 +11,7 @@ use tracing::warn; use super::ContentFormat; use crate::{ - components::{AnimatedImagePaintable, Spinner, VideoPlayer}, + components::{AnimatedImagePaintable, VideoPlayer}, gettext_f, session::model::Session, spawn, @@ -47,7 +47,7 @@ mod imp { #[template_child] pub overlay_error: TemplateChild, #[template_child] - pub overlay_spinner: TemplateChild, + pub overlay_spinner: TemplateChild, /// The intended display width of the media. #[property(get, set = Self::set_width, explicit_notify, default = -1, minimum = -1)] pub width: Cell, diff --git a/src/session/view/content/room_history/message_row/visual_media.ui b/src/session/view/content/room_history/message_row/visual_media.ui index f8edb83ae..ed4fbaff1 100644 --- a/src/session/view/content/room_history/message_row/visual_media.ui +++ b/src/session/view/content/room_history/message_row/visual_media.ui @@ -15,9 +15,7 @@ - - center - center + true diff --git a/src/session/view/content/room_history/mod.rs b/src/session/view/content/room_history/mod.rs index 8ce442f5a..ffc2dc47e 100644 --- a/src/session/view/content/room_history/mod.rs +++ b/src/session/view/content/room_history/mod.rs @@ -27,7 +27,7 @@ use self::{ }; use super::{room_details, RoomDetails}; use crate::{ - components::{confirm_leave_room_dialog, DragOverlay, ReactionChooser, Spinner}, + components::{confirm_leave_room_dialog, DragOverlay, ReactionChooser}, i18n::gettext_f, prelude::*, session::model::{ @@ -98,7 +98,7 @@ mod imp { #[template_child] pub message_toolbar: TemplateChild, #[template_child] - pub loading: TemplateChild, + pub loading: TemplateChild, #[template_child] pub error: TemplateChild, #[template_child] diff --git a/src/session/view/content/room_history/mod.ui b/src/session/view/content/room_history/mod.ui index de97bd814..ac345d7f6 100644 --- a/src/session/view/content/room_history/mod.ui +++ b/src/session/view/content/room_history/mod.ui @@ -175,14 +175,7 @@ loading Loading - - center - center - True - - + diff --git a/src/session/view/create_dm_dialog/mod.ui b/src/session/view/create_dm_dialog/mod.ui index f977bf32d..d478e280d 100644 --- a/src/session/view/create_dm_dialog/mod.ui +++ b/src/session/view/create_dm_dialog/mod.ui @@ -111,13 +111,7 @@ loading-page - - center - center - - + diff --git a/src/window.rs b/src/window.rs index 27c73b004..904cb9058 100644 --- a/src/window.rs +++ b/src/window.rs @@ -8,7 +8,7 @@ use tracing::{error, warn}; use crate::{ account_chooser_dialog::AccountChooserDialog, account_switcher::{AccountSwitcherButton, AccountSwitcherPopover}, - components::{OfflineBanner, Spinner}, + components::OfflineBanner, error_page::ErrorPage, intent, login::Login, @@ -59,8 +59,6 @@ mod imp { pub session: TemplateChild, #[template_child] pub toast_overlay: TemplateChild, - #[template_child] - pub spinner: TemplateChild, /// Whether the window should be in compact view. /// /// It means that the horizontal size is not large enough to hold all diff --git a/src/window.ui b/src/window.ui index 90d6263ac..918ebb3b9 100644 --- a/src/window.ui +++ b/src/window.ui @@ -10,7 +10,6 @@ - loading crossfade @@ -34,14 +33,9 @@ - - center - center + True - - + -- GitLab From cc5a737f219ca4e4c37cef572f74f9585ac4c416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Commaille?= Date: Wed, 18 Sep 2024 18:20:09 +0200 Subject: [PATCH 3/3] components: Rename ButtonRow to LoadingButtonRow and prefer AdwButtonRow where possible --- data/resources/style.css | 12 +-- src/components/loading/bin.rs | 5 +- src/components/rows/button_row.ui | 40 --------- .../{button_row.rs => loading_button_row.rs} | 46 ++++------ src/components/rows/loading_button_row.ui | 30 +++++++ src/components/rows/mod.rs | 8 +- src/components/user_page.rs | 34 +++----- src/components/user_page.ui | 83 +++++++------------ .../general_page/change_password_subpage.rs | 4 +- .../general_page/change_password_subpage.ui | 19 +++-- .../deactivate_account_subpage.rs | 51 +++--------- .../deactivate_account_subpage.ui | 31 ++++--- .../general_page/log_out_subpage.rs | 10 +-- .../general_page/log_out_subpage.ui | 66 ++++++++++----- .../view/account_settings/general_page/mod.rs | 4 +- .../view/account_settings/general_page/mod.ui | 24 +++--- .../import_export_keys_subpage.rs | 10 ++- .../import_export_keys_subpage.ui | 17 ++-- .../account_settings/security_page/mod.rs | 4 +- .../account_settings/security_page/mod.ui | 10 ++- .../view/content/room_details/general_page.rs | 3 +- .../view/content/room_details/general_page.ui | 14 +++- src/session/view/event_details_dialog.rs | 3 +- src/session/view/event_details_dialog.ui | 10 ++- src/ui-resources.gresource.xml | 2 +- 25 files changed, 251 insertions(+), 289 deletions(-) delete mode 100644 src/components/rows/button_row.ui rename src/components/rows/{button_row.rs => loading_button_row.rs} (72%) create mode 100644 src/components/rows/loading_button_row.ui diff --git a/data/resources/style.css b/data/resources/style.css index 0aa715c55..4aaa8e130 100644 --- a/data/resources/style.css +++ b/data/resources/style.css @@ -29,15 +29,6 @@ headerbar .suggested-action, .standalone-button { -gtk-icon-size: 128px; } -.extra-large-icon.error { - color: var(--error-bg-color); -} - -button.row { - min-height: 34px; - border-radius: 12px; -} - .round-corners { border-radius: 6px; } @@ -303,10 +294,9 @@ editable-avatar .cutout { padding: 7px; } -row.button-row box.header { +row.button loading-bin label.title { margin-left: 12px; margin-right: 12px; - border-spacing: 6px; min-height: 40px; } diff --git a/src/components/loading/bin.rs b/src/components/loading/bin.rs index 31c0fd5c2..672370b42 100644 --- a/src/components/loading/bin.rs +++ b/src/components/loading/bin.rs @@ -31,9 +31,10 @@ mod imp { type ParentType = gtk::Widget; fn class_init(klass: &mut Self::Class) { - klass.set_layout_manager_type::(); - Self::bind_template(klass); + + klass.set_layout_manager_type::(); + klass.set_css_name("loading-bin"); } fn instance_init(obj: &InitializingObject) { diff --git a/src/components/rows/button_row.ui b/src/components/rows/button_row.ui deleted file mode 100644 index 2af7aaf5d..000000000 --- a/src/components/rows/button_row.ui +++ /dev/null @@ -1,40 +0,0 @@ - - - - diff --git a/src/components/rows/button_row.rs b/src/components/rows/loading_button_row.rs similarity index 72% rename from src/components/rows/button_row.rs rename to src/components/rows/loading_button_row.rs index 58fc0b2e1..5a72cc2a8 100644 --- a/src/components/rows/button_row.rs +++ b/src/components/rows/loading_button_row.rs @@ -9,7 +9,7 @@ use gtk::{ use crate::components::LoadingBin; mod imp { - use std::{cell::Cell, marker::PhantomData}; + use std::marker::PhantomData; use glib::subclass::{InitializingObject, Signal}; use once_cell::sync::Lazy; @@ -17,27 +17,26 @@ mod imp { use super::*; #[derive(Debug, Default, CompositeTemplate, glib::Properties)] - #[template(resource = "/org/gnome/Fractal/ui/components/rows/button_row.ui")] - #[properties(wrapper_type = super::ButtonRow)] - pub struct ButtonRow { + #[template(resource = "/org/gnome/Fractal/ui/components/rows/loading_button_row.ui")] + #[properties(wrapper_type = super::LoadingButtonRow)] + pub struct LoadingButtonRow { #[template_child] pub loading_bin: TemplateChild, /// Whether the button row is loading. #[property(get = Self::is_loading, set = Self::set_is_loading)] pub is_loading: PhantomData, - /// Whether activating this button opens a subpage. - #[property(get, set = Self::set_to_subpage, explicit_notify)] - pub to_subpage: Cell, } #[glib::object_subclass] - impl ObjectSubclass for ButtonRow { - const NAME: &'static str = "ButtonRow"; - type Type = super::ButtonRow; + impl ObjectSubclass for LoadingButtonRow { + const NAME: &'static str = "LoadingButtonRow"; + type Type = super::LoadingButtonRow; type ParentType = adw::PreferencesRow; fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); + + klass.set_css_name("row"); } fn instance_init(obj: &InitializingObject) { @@ -46,7 +45,7 @@ mod imp { } #[glib::derived_properties] - impl ObjectImpl for ButtonRow { + impl ObjectImpl for LoadingButtonRow { fn signals() -> &'static [Signal] { static SIGNALS: Lazy> = Lazy::new(|| vec![Signal::builder("activated").build()]); @@ -72,11 +71,11 @@ mod imp { } } - impl WidgetImpl for ButtonRow {} - impl ListBoxRowImpl for ButtonRow {} - impl PreferencesRowImpl for ButtonRow {} + impl WidgetImpl for LoadingButtonRow {} + impl ListBoxRowImpl for LoadingButtonRow {} + impl PreferencesRowImpl for LoadingButtonRow {} - impl ButtonRow { + impl LoadingButtonRow { /// Whether the row is loading. fn is_loading(&self) -> bool { self.loading_bin.is_loading() @@ -91,30 +90,21 @@ mod imp { self.loading_bin.set_is_loading(loading); self.obj().notify_is_loading(); } - - /// Set whether activating this button opens a subpage. - fn set_to_subpage(&self, to_subpage: bool) { - if self.to_subpage.get() == to_subpage { - return; - } - - self.to_subpage.replace(to_subpage); - self.obj().notify_to_subpage(); - } } } glib::wrapper! { - /// An `AdwPreferencesRow` usable as a button. - pub struct ButtonRow(ObjectSubclass) + /// An `AdwPreferencesRow` usable as a button with a loading state. + pub struct LoadingButtonRow(ObjectSubclass) @extends gtk::Widget, gtk::ListBoxRow, adw::PreferencesRow, @implements gtk::Accessible; } -impl ButtonRow { +impl LoadingButtonRow { pub fn new() -> Self { glib::Object::new() } + /// Connect to the signal emitted when the row is activated. pub fn connect_activated(&self, f: F) -> glib::SignalHandlerId { self.connect_closure( "activated", diff --git a/src/components/rows/loading_button_row.ui b/src/components/rows/loading_button_row.ui new file mode 100644 index 000000000..f0764e47f --- /dev/null +++ b/src/components/rows/loading_button_row.ui @@ -0,0 +1,30 @@ + + + + diff --git a/src/components/rows/mod.rs b/src/components/rows/mod.rs index 4f5cb8907..77f6afa91 100644 --- a/src/components/rows/mod.rs +++ b/src/components/rows/mod.rs @@ -1,19 +1,19 @@ //! Subclasses of `GtkListBoxRow`. mod button_count_row; -mod button_row; mod check_loading_row; mod combo_loading_row; mod copyable_row; mod entry_add_row; +mod loading_button_row; mod loading_row; mod removable_row; mod substring_entry_row; mod switch_loading_row; pub use self::{ - button_count_row::ButtonCountRow, button_row::ButtonRow, check_loading_row::CheckLoadingRow, + button_count_row::ButtonCountRow, check_loading_row::CheckLoadingRow, combo_loading_row::ComboLoadingRow, copyable_row::CopyableRow, entry_add_row::EntryAddRow, - loading_row::LoadingRow, removable_row::RemovableRow, substring_entry_row::SubstringEntryRow, - switch_loading_row::SwitchLoadingRow, + loading_button_row::LoadingButtonRow, loading_row::LoadingRow, removable_row::RemovableRow, + substring_entry_row::SubstringEntryRow, switch_loading_row::SwitchLoadingRow, }; diff --git a/src/components/user_page.rs b/src/components/user_page.rs index 5b7564bc9..f7ed56651 100644 --- a/src/components/user_page.rs +++ b/src/components/user_page.rs @@ -7,7 +7,7 @@ use gtk::{ }; use ruma::{events::room::power_levels::PowerLevelUserAction, OwnedEventId}; -use super::{Avatar, ButtonRow, LoadingButton, PowerLevelSelectionRow}; +use super::{Avatar, LoadingButton, LoadingButtonRow, PowerLevelSelectionRow}; use crate::{ components::{ confirm_mute_room_member_dialog, confirm_room_member_destructive_action_dialog, @@ -37,7 +37,7 @@ mod imp { #[template_child] pub avatar: TemplateChild, #[template_child] - pub direct_chat_button: TemplateChild, + pub direct_chat_button: TemplateChild, #[template_child] pub verified_row: TemplateChild, #[template_child] @@ -55,21 +55,15 @@ mod imp { #[template_child] pub power_level_row: TemplateChild, #[template_child] - pub invite_button: TemplateChild, + pub invite_button: TemplateChild, #[template_child] - pub kick_box: TemplateChild, + pub kick_button: TemplateChild, #[template_child] - pub kick_button: TemplateChild, + pub ban_button: TemplateChild, #[template_child] - pub ban_box: TemplateChild, + pub unban_button: TemplateChild, #[template_child] - pub ban_button: TemplateChild, - #[template_child] - pub unban_button: TemplateChild, - #[template_child] - pub remove_messages_box: TemplateChild, - #[template_child] - pub remove_messages_button: TemplateChild, + pub remove_messages_button: TemplateChild, #[template_child] pub ignored_row: TemplateChild, #[template_child] @@ -301,12 +295,12 @@ impl UserPage { let direct_chat = user.direct_chat(); - let label = if direct_chat.is_some() { + let title = if direct_chat.is_some() { gettext("Open Direct Chat") } else { gettext("Create Direct Chat") }; - self.imp().direct_chat_button.set_content_label(label); + self.imp().direct_chat_button.set_title(&title); self.set_direct_chat_loading(false); } @@ -408,7 +402,7 @@ impl UserPage { let can_invite = matches!(membership, Membership::Knock) && permissions.can_invite(); if can_invite { - imp.invite_button.set_content_label(gettext("Allow Access")); + imp.invite_button.set_title(&gettext("Allow Access")); imp.invite_button.set_visible(true); } else { imp.invite_button.set_visible(false); @@ -426,21 +420,19 @@ impl UserPage { _ => gettext("Kick"), }; imp.kick_button.set_title(&label); - imp.kick_box.set_visible(true); - } else { - imp.kick_box.set_visible(false); } + imp.kick_button.set_visible(can_kick); let can_ban = membership != Membership::Ban && permissions.can_do_to_user(user_id, PowerLevelUserAction::Ban); - imp.ban_box.set_visible(can_ban); + imp.ban_button.set_visible(can_ban); let can_unban = matches!(membership, Membership::Ban) && permissions.can_do_to_user(user_id, PowerLevelUserAction::Unban); imp.unban_button.set_visible(can_unban); let can_redact = !member.is_own_user() && permissions.can_redact_other(); - imp.remove_messages_box.set_visible(can_redact); + imp.remove_messages_button.set_visible(can_redact); imp.room_box.set_visible(true); } diff --git a/src/components/user_page.ui b/src/components/user_page.ui index fc5452ed6..990432cf7 100644 --- a/src/components/user_page.ui +++ b/src/components/user_page.ui @@ -79,13 +79,18 @@ - + + false - false - true - user-page.open-direct-chat + group + + + true + user-page.open-direct-chat + + @@ -106,7 +111,7 @@ @@ -128,70 +133,40 @@ - - - - - - - - - - - - group - + + + + + + - - - - - - group - + Ban - - - - - - - Unban - - - - - - - group - + + + Unban + + + + + Remove Messages diff --git a/src/session/view/account_settings/general_page/change_password_subpage.rs b/src/session/view/account_settings/general_page/change_password_subpage.rs index 778890fa5..2891d1b6b 100644 --- a/src/session/view/account_settings/general_page/change_password_subpage.rs +++ b/src/session/view/account_settings/general_page/change_password_subpage.rs @@ -11,7 +11,7 @@ use matrix_sdk::ruma::{ use tracing::error; use crate::{ - components::{AuthDialog, AuthError, LoadingButton}, + components::{AuthDialog, AuthError, LoadingButtonRow}, session::model::Session, toast, utils::matrix::validate_password, @@ -46,7 +46,7 @@ mod imp { #[template_child] pub confirm_password_error: TemplateChild, #[template_child] - pub button: TemplateChild, + pub button: TemplateChild, } #[glib::object_subclass] diff --git a/src/session/view/account_settings/general_page/change_password_subpage.ui b/src/session/view/account_settings/general_page/change_password_subpage.ui index f5c5caa3d..4e335e809 100644 --- a/src/session/view/account_settings/general_page/change_password_subpage.ui +++ b/src/session/view/account_settings/general_page/change_password_subpage.ui @@ -139,14 +139,21 @@ - + - Continue - false - + group + + + + Continue + false + + + diff --git a/src/session/view/account_settings/general_page/deactivate_account_subpage.rs b/src/session/view/account_settings/general_page/deactivate_account_subpage.rs index 0190e5202..6904c40c9 100644 --- a/src/session/view/account_settings/general_page/deactivate_account_subpage.rs +++ b/src/session/view/account_settings/general_page/deactivate_account_subpage.rs @@ -1,17 +1,14 @@ use adw::{prelude::*, subclass::prelude::*}; use gettextrs::gettext; -use gtk::{ - glib::{self, clone}, - CompositeTemplate, -}; +use gtk::{glib, CompositeTemplate}; use matrix_sdk::ruma::{api::client::account::deactivate, assign}; use tracing::error; use crate::{ - components::{AuthDialog, LoadingButton}, + components::{AuthDialog, LoadingButtonRow}, prelude::*, session::model::Session, - spawn, toast, + toast, }; mod imp { @@ -31,7 +28,7 @@ mod imp { #[template_child] pub confirmation: TemplateChild, #[template_child] - pub button: TemplateChild, + pub button: TemplateChild, } #[glib::object_subclass] @@ -42,6 +39,7 @@ mod imp { fn class_init(klass: &mut Self::Class) { Self::bind_template(klass); + Self::Type::bind_template_callbacks(klass); } fn instance_init(obj: &InitializingObject) { @@ -50,39 +48,7 @@ mod imp { } #[glib::derived_properties] - impl ObjectImpl for DeactivateAccountSubpage { - fn constructed(&self) { - self.parent_constructed(); - let obj = self.obj(); - - self.confirmation.connect_entry_activated(clone!( - #[weak] - obj, - move |_| { - spawn!(async move { - obj.deactivate_account().await; - }); - } - )); - self.confirmation.connect_changed(clone!( - #[weak] - obj, - move |_| { - obj.update_button(); - } - )); - - self.button.connect_clicked(clone!( - #[weak] - obj, - move |_| { - spawn!(async move { - obj.deactivate_account().await; - }); - } - )); - } - } + impl ObjectImpl for DeactivateAccountSubpage {} impl WidgetImpl for DeactivateAccountSubpage {} impl NavigationPageImpl for DeactivateAccountSubpage {} @@ -104,11 +70,14 @@ glib::wrapper! { @extends gtk::Widget, adw::NavigationPage, @implements gtk::Accessible; } +#[gtk::template_callbacks] impl DeactivateAccountSubpage { pub fn new(session: &Session) -> Self { glib::Object::builder().property("session", session).build() } + /// Update the state of the button. + #[template_callback] fn update_button(&self) { self.imp() .button @@ -120,6 +89,8 @@ impl DeactivateAccountSubpage { confirmation.text() == confirmation.title() } + /// Deactivate the account of the current session. + #[template_callback] async fn deactivate_account(&self) { let Some(session) = self.session() else { return; diff --git a/src/session/view/account_settings/general_page/deactivate_account_subpage.ui b/src/session/view/account_settings/general_page/deactivate_account_subpage.ui index 5d49f8c8c..6d371836b 100644 --- a/src/session/view/account_settings/general_page/deactivate_account_subpage.ui +++ b/src/session/view/account_settings/general_page/deactivate_account_subpage.ui @@ -58,20 +58,27 @@ - + - - - - - - Continue - false + + + False + + + + + + + + Continue + false + + + diff --git a/src/session/view/account_settings/general_page/log_out_subpage.rs b/src/session/view/account_settings/general_page/log_out_subpage.rs index d5baa0c78..d3318ce9d 100644 --- a/src/session/view/account_settings/general_page/log_out_subpage.rs +++ b/src/session/view/account_settings/general_page/log_out_subpage.rs @@ -3,7 +3,7 @@ use gettextrs::gettext; use gtk::{glib, CompositeTemplate}; use crate::{ - components::LoadingButton, + components::LoadingButtonRow, session::{ model::{CryptoIdentityState, RecoveryState, Session, SessionVerificationState}, view::AccountSettings, @@ -32,13 +32,13 @@ mod imp { #[template_child] pub warning_description: TemplateChild, #[template_child] - pub warning_button: TemplateChild, + pub warning_button: TemplateChild, #[template_child] - pub logout_button: TemplateChild, + pub logout_button: TemplateChild, #[template_child] - pub try_again_button: TemplateChild, + pub try_again_button: TemplateChild, #[template_child] - pub remove_button: TemplateChild, + pub remove_button: TemplateChild, } #[glib::object_subclass] diff --git a/src/session/view/account_settings/general_page/log_out_subpage.ui b/src/session/view/account_settings/general_page/log_out_subpage.ui index acdc088c7..2319092fc 100644 --- a/src/session/view/account_settings/general_page/log_out_subpage.ui +++ b/src/session/view/account_settings/general_page/log_out_subpage.ui @@ -57,25 +57,37 @@ - + - True - Review Account Security - + group + + + False + Review Account Security + + + - + - Continue - + group + + + + Continue + + + @@ -117,13 +129,20 @@ - + - Try Again - + group + + + + Try Again + + + @@ -135,13 +154,20 @@ - + - Remove Session - + group + + + + Remove Session + + + diff --git a/src/session/view/account_settings/general_page/mod.rs b/src/session/view/account_settings/general_page/mod.rs index bb6d60d46..23852710a 100644 --- a/src/session/view/account_settings/general_page/mod.rs +++ b/src/session/view/account_settings/general_page/mod.rs @@ -17,7 +17,7 @@ pub use self::{ deactivate_account_subpage::DeactivateAccountSubpage, log_out_subpage::LogOutSubpage, }; use crate::{ - components::{ActionButton, ActionState, ButtonRow, CopyableRow, EditableAvatar}, + components::{ActionButton, ActionState, CopyableRow, EditableAvatar}, prelude::*, session::model::Session, spawn, spawn_tokio, toast, @@ -67,8 +67,6 @@ mod imp { type ParentType = adw::PreferencesPage; fn class_init(klass: &mut Self::Class) { - ButtonRow::ensure_type(); - Self::bind_template(klass); Self::Type::bind_template_callbacks(klass); TemplateCallbacks::bind_template_callbacks(klass); diff --git a/src/session/view/account_settings/general_page/mod.ui b/src/session/view/account_settings/general_page/mod.ui index 15356d822..0f2a9b333 100644 --- a/src/session/view/account_settings/general_page/mod.ui +++ b/src/session/view/account_settings/general_page/mod.ui @@ -54,9 +54,10 @@ - + + False Change Password - true + go-next-symbolic account-settings.show-subpage 'change-password' @@ -94,29 +95,28 @@ + True - + + False Log Out - true + go-next-symbolic account-settings.show-subpage 'log-out' - - - - - + + False Deactivate Account - true + go-next-symbolic account-settings.show-subpage 'deactivate-account' diff --git a/src/session/view/account_settings/security_page/import_export_keys_subpage.rs b/src/session/view/account_settings/security_page/import_export_keys_subpage.rs index cc6ca1cb7..1d493c56a 100644 --- a/src/session/view/account_settings/security_page/import_export_keys_subpage.rs +++ b/src/session/view/account_settings/security_page/import_export_keys_subpage.rs @@ -4,7 +4,9 @@ use gtk::{gio, glib, CompositeTemplate}; use matrix_sdk::encryption::{KeyExportError, RoomKeyImportError}; use tracing::{debug, error}; -use crate::{components::LoadingButton, ngettext_f, session::model::Session, spawn_tokio, toast}; +use crate::{ + components::LoadingButtonRow, ngettext_f, session::model::Session, spawn_tokio, toast, +}; #[derive(Debug, Default, Hash, Eq, PartialEq, Clone, Copy, glib::Enum)] #[repr(u32)] @@ -53,7 +55,7 @@ mod imp { #[template_child] pub file_button: TemplateChild, #[template_child] - pub proceed_button: TemplateChild, + pub proceed_button: TemplateChild, /// The path of the file for the encryption keys. #[property(get)] pub file_path: RefCell>, @@ -174,7 +176,7 @@ impl ImportExportKeysSubpage { "The backup must be stored in a safe place and must be protected with a strong passphrase that will be used to encrypt the data.", )); imp.confirm_passphrase_box.set_visible(true); - imp.proceed_button.set_content_label(gettext("Export Keys")); + imp.proceed_button.set_title(&gettext("Export Keys")); } else { // Translators: 'Room encryption keys' are encryption keys for all rooms. self.set_title(&gettext("Import Room Encryption Keys")); @@ -186,7 +188,7 @@ impl ImportExportKeysSubpage { "Enter the passphrase provided when the backup file was created.", )); imp.confirm_passphrase_box.set_visible(false); - imp.proceed_button.set_content_label(gettext("Import Keys")); + imp.proceed_button.set_title(&gettext("Import Keys")); } self.update_button(); diff --git a/src/session/view/account_settings/security_page/import_export_keys_subpage.ui b/src/session/view/account_settings/security_page/import_export_keys_subpage.ui index 2f9c74567..bb10456af 100644 --- a/src/session/view/account_settings/security_page/import_export_keys_subpage.ui +++ b/src/session/view/account_settings/security_page/import_export_keys_subpage.ui @@ -127,13 +127,20 @@ - + - false - + group + + + + false + + + diff --git a/src/session/view/account_settings/security_page/mod.rs b/src/session/view/account_settings/security_page/mod.rs index 0dd0f6054..cacf7ac14 100644 --- a/src/session/view/account_settings/security_page/mod.rs +++ b/src/session/view/account_settings/security_page/mod.rs @@ -10,7 +10,7 @@ pub use self::{ import_export_keys_subpage::{ImportExportKeysSubpage, ImportExportKeysSubpageMode}, }; use crate::{ - components::{ButtonCountRow, ButtonRow}, + components::ButtonCountRow, session::model::{CryptoIdentityState, RecoveryState, Session, SessionVerificationState}, utils::BoundObjectWeakRef, }; @@ -64,8 +64,6 @@ mod imp { type ParentType = adw::PreferencesPage; fn class_init(klass: &mut Self::Class) { - ButtonRow::ensure_type(); - Self::bind_template(klass); } diff --git a/src/session/view/account_settings/security_page/mod.ui b/src/session/view/account_settings/security_page/mod.ui index d5a24796c..3e6354723 100644 --- a/src/session/view/account_settings/security_page/mod.ui +++ b/src/session/view/account_settings/security_page/mod.ui @@ -162,19 +162,21 @@ - + + False Export Room Encryption Keys - true + go-next-symbolic account-settings.show-subpage 'export-keys' - + + False Import Room Encryption Keys - true + go-next-symbolic account-settings.show-subpage 'import-keys' diff --git a/src/session/view/content/room_details/general_page.rs b/src/session/view/content/room_details/general_page.rs index 5847f54f5..1bab23fc9 100644 --- a/src/session/view/content/room_details/general_page.rs +++ b/src/session/view/content/room_details/general_page.rs @@ -24,7 +24,7 @@ use tracing::error; use super::{room_upgrade_dialog::confirm_room_upgrade, RoomDetails}; use crate::{ components::{ - ButtonCountRow, ButtonRow, CheckLoadingRow, ComboLoadingRow, CopyableRow, LoadingButton, + ButtonCountRow, CheckLoadingRow, ComboLoadingRow, CopyableRow, LoadingButton, SwitchLoadingRow, }, gettext_f, @@ -127,7 +127,6 @@ mod imp { type ParentType = adw::PreferencesPage; fn class_init(klass: &mut Self::Class) { - ButtonRow::ensure_type(); CopyableRow::ensure_type(); Self::bind_template(klass); diff --git a/src/session/view/content/room_details/general_page.ui b/src/session/view/content/room_details/general_page.ui index 250c467ee..3a794454f 100644 --- a/src/session/view/content/room_details/general_page.ui +++ b/src/session/view/content/room_details/general_page.ui @@ -168,13 +168,19 @@ - + 12 - Copy Room Link - + group + + + False + Copy Room Link + + + diff --git a/src/session/view/event_details_dialog.rs b/src/session/view/event_details_dialog.rs index e95ce30e7..f201c1544 100644 --- a/src/session/view/event_details_dialog.rs +++ b/src/session/view/event_details_dialog.rs @@ -4,7 +4,7 @@ use gtk::{glib, CompositeTemplate}; use sourceview::prelude::*; use crate::{ - components::{ButtonRow, CopyableRow, ToastableDialog}, + components::{CopyableRow, ToastableDialog}, prelude::*, session::model::Event, toast, utils, @@ -39,7 +39,6 @@ mod imp { type ParentType = ToastableDialog; fn class_init(klass: &mut Self::Class) { - ButtonRow::ensure_type(); CopyableRow::ensure_type(); Self::bind_template(klass); diff --git a/src/session/view/event_details_dialog.ui b/src/session/view/event_details_dialog.ui index 5f4adc97d..606276e8e 100644 --- a/src/session/view/event_details_dialog.ui +++ b/src/session/view/event_details_dialog.ui @@ -112,14 +112,15 @@ - + EventDetailsDialog + False View Source - True + go-next-symbolic @@ -178,9 +179,10 @@ - + + False View Source - True + go-next-symbolic diff --git a/src/ui-resources.gresource.xml b/src/ui-resources.gresource.xml index 8c303a602..bd0f765e3 100644 --- a/src/ui-resources.gresource.xml +++ b/src/ui-resources.gresource.xml @@ -30,11 +30,11 @@ components/power_level_selection/row.ui components/reaction_chooser.ui components/rows/button_count_row.ui - components/rows/button_row.ui components/rows/check_loading_row.ui components/rows/combo_loading_row.ui components/rows/copyable_row.ui components/rows/entry_add_row.ui + components/rows/loading_button_row.ui components/rows/loading_row.ui components/rows/removable_row.ui components/rows/substring_entry_row.ui -- GitLab