diff --git a/Cargo.toml b/Cargo.toml
index 779e9fa6493af6f8feb42247c3d55e03266ab95a..f7e2a21c3da3095d1a8ef86c4132da6ade2b2006 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/data/resources/style.css b/data/resources/style.css
index b3c34288803e6c1ee6c6ed7bb7f8b20d847dece4..4aaa8e1307c0ada41c36e5b2dca6445bbcdc1c4c 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;
}
@@ -255,11 +246,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;
@@ -308,10 +294,9 @@ spinner-wrapper.large spinner {
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/po/POTFILES.in b/po/POTFILES.in
index 05f2b9b748ef1f383d9a245e3a67067c94704fac..6fbbc4968bec17e74b0f5fe885128534a50cc721 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 5c6ed0f3812690ab3ee7e373a046e8a768df0d55..7f9f6b74f644cd0d1d67365b999c6e6fca5118e9 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 65a150bc9ff5ca45d098d150b43e4f352ce94a12..bc3677474e368306a1f17233f3896d33e7cf2131 100644
--- a/src/account_chooser_dialog/account_row.ui
+++ b/src/account_chooser_dialog/account_row.ui
@@ -38,7 +38,9 @@
diff --git a/src/account_switcher/session_item.ui b/src/account_switcher/session_item.ui
index fe824161752a367e074d71e924675357548c0a7f..b9d812bac6ebe0e2dafdb3ab875018371590f031 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 077b902d6165aefb48b415e91e7274f60c49dfbe..5495251192d29fea43370584350b2dccac2076d2 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 731ab896a33a4e4c6fc2c0f7d40fda6f52a5a31b..240dcc1a47440c898bec30ff8680ff60915f867b 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 56794ab65348f06674de59f777761da9eb49b802..bb0ef28fe99b87f4b590f94035c8cee84a5d47c4 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 e49ca0d15e6d4467bbea8c767d3ff0f360b68497..18caa56f826e3cd545d3bf4f723cd06554d64c46 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 961e9542a58f49861c0824360efd483e6396f7a6..b9fac32eac3e628051e062c04e0187f04c7a9e69 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 65e9cd6805b9688d9b3add9466eb2819fb6fb7c4..5f3d9cb94d5a9152959e9d1c1c53543db9df76c0 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 166c91c3bd6b7c7aafa633654f27262a13f6bd0a..672370b42b237dcba6b8a422f251d040b621e81c 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;
@@ -33,11 +31,10 @@ mod imp {
type ParentType = gtk::Widget;
fn class_init(klass: &mut Self::Class) {
- klass.set_layout_manager_type::();
-
- Spinner::ensure_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/loading/bin.ui b/src/components/loading/bin.ui
index c8b4635b3c01fc97373eedfd13f8fb573069f142..50501ed94d20c75489e18835bca6bd553c8d8024 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 ad2005a284cc868700a1e97e045e9e9c4ed27cbf..4b499c54e9a63525a9db5b8edeaa98b58254f31e 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 b7fc35d9ebff0593d83a1f5027fdc908af7d8b67..0000000000000000000000000000000000000000
--- 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 a37bdecdbbc86fb4f985909ca6ca6caa480f685b..e19d4e1a48acfd693989daa1356aaab6134fc074 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 c95c5ea0e92ce66fcee2b06eeee280abd00914f2..a760a201f137fd6ad92e78fd1fe9d44f7b14300c 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/button_row.ui b/src/components/rows/button_row.ui
deleted file mode 100644
index 2af7aaf5d8a0c185059694436eb6dfa9cf56ed2f..0000000000000000000000000000000000000000
--- a/src/components/rows/button_row.ui
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
- true
- false
- button
-
-
-
-
-
-
- 6
- center
- center
-
-
-
-
- end
-
-
-
-
-
- go-next-symbolic
-
-
-
-
-
-
-
-
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 58fc0b2e14f8c18dfed8f07c9b68954a872a54e1..5a72cc2a89e7a3e34dbe3c79751e6bba37fbd6b8 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 0000000000000000000000000000000000000000..f0764e47f8f97c1316eca27dc210f93b145d6c5b
--- /dev/null
+++ b/src/components/rows/loading_button_row.ui
@@ -0,0 +1,30 @@
+
+
+
+ true
+ false
+ button
+
+ title
+
+
+
+
+
+
+
+
+ end
+ LoadingButtonRow
+ 0.5
+ center
+
+
+
+
+
+
diff --git a/src/components/rows/mod.rs b/src/components/rows/mod.rs
index 4f5cb8907e79ee953341d2caaa44f67d2054f058..77f6afa913537b76d811951ee619f97ef4532add 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/rows/switch_loading_row.rs b/src/components/rows/switch_loading_row.rs
index 71eb42716070b6f222de62199c348f09f0102bd4..7da05d82d52509408db9b223fe84beb53f225637 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 bab00200b74d19649bf4365e4c92773310c737ab..4646e6895fa8d6c4e0cb3650a992db802110e2b6 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/components/user_page.rs b/src/components/user_page.rs
index 5b7564bc99d4b9c1122d12bca8d1bf7d42419380..f7ed56651161a534a3c4b3f2c053b0883b763621 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 fc5452ed6ead6e329f437a9b620745dc4c58cd99..990432cf71fbe9a916c25371f97b970fc36579c3 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/login/session_setup_view.ui b/src/login/session_setup_view.ui
index 5f1ecc8a4a8b11535ac0f0101147019f1cb7cd1e..4453bd22c6e2cdb480289da6650e8e35f1df60ba 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/general_page/change_password_subpage.rs b/src/session/view/account_settings/general_page/change_password_subpage.rs
index 778890fa56c25abf5d27fbbf1eec6cb7892f54a9..2891d1b6b3184355ffac7950e81942849a112fce 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 f5c5caa3de01f9b1ac4e94edfce00b4b4dc4f51c..4e335e80939ff461af55cd386fb8c82bf66ae873 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 0190e5202c1d8c1456fcd9fedf6504d7ba015797..6904c40c970ba84d57da5b77b7c6e1873431f0b0 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 5d49f8c8c3c56d969482bdac39d718de8b4a8d35..6d371836b901c00139cb02e098cf0e88a5bf8c9b 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 d5baa0c78860d709a843d7919c8ea8bcd4f05969..d3318ce9dfc29a2921e5103fb8b6660fd205e0b8 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 acdc088c70b4373ab76923e1d6f2b0da0eb6bada..2319092fc55cf1c5e4b50b912d739e01179b98fd 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 bb6d60d46bc5281972e0bd5ec5cb54a8904f6527..23852710a581ec4f5335bed0516f8a85179e469c 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 15356d82207dd474f414382b906207b676688bea..0f2a9b333d00f56d1e3309941eec55cad74f4d40 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/notifications_page.rs b/src/session/view/account_settings/notifications_page.rs
index b61ebf42f9544261d2d73d8f125fcfc298418a50..fbaed0f21d56b0d52ccfafb12ed247eb0dcda902 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/security_page/import_export_keys_subpage.rs b/src/session/view/account_settings/security_page/import_export_keys_subpage.rs
index cc6ca1cb7ac2219bfec21a8a38716fdb0565ef3b..1d493c56ae22b94e3510d01b321a51056f9cacd4 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
-
+
- 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 0dd0f60547c907c88a135b75b6ef8a74307e92e3..cacf7ac1419fc0446974cdba5d23e07f252f801f 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 d5a24796ce5ccb57ee03db04a920ff9ffca744f0..3e6354723d027c07939717f0ddfd8c40eba3db86 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/account_settings/user_sessions_page/mod.rs b/src/session/view/account_settings/user_sessions_page/mod.rs
index d23ed3d963bb49f00b301874bfab477b8764de4a..cade685502cdccc8092c8fd10e3afcc0548c1bf4 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/account_settings/user_sessions_page/mod.ui b/src/session/view/account_settings/user_sessions_page/mod.ui
index 42872a75fe6f087458b1643a9a7224727950feab..a41c3d98992e1274111082f76060aa0fdb015918 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 a49b12e0d2f4e7d37bb20a6c173d4dc3dd89039d..e56fa96d3ccf3f7594f51b9538c0eeab1fe65e01 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 8830ad37199be29c436a0f5cfbc556d605d444e4..6418bea5c58bed5684f185d773e85a6cf4f24b5b 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 c27db894feea6497504b81aa5b6a017044cb4f5c..12aaffd864642187822329d09a6c0af4dfda5f11 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/general_page.rs b/src/session/view/content/room_details/general_page.rs
index 5847f54f584e969e8388f772238de22474c851ae..1bab23fc9ad7b291c6dcdb3ffa934acec743b02c 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 250c467ee40042b71a8a1d2a7750e7e6fcd9207f..3a794454f251ca94e98e4d9a629670a22be96c18 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/content/room_details/history_viewer/audio.ui b/src/session/view/content/room_details/history_viewer/audio.ui
index e728113c85fdd1bc749e79636423e4a39d55019d..ba519613072d7d3ba975ecc71cd3eb31be11770f 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 0e2cb5a0004f392b428e741301d68ddd16bef4f1..d436a73cc4a30d3ce415e06ab071c3d6e42a1530 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 e1c01166f73783299fd00a9af0632dd1258b16c2..0d21ca231566479b5b409039e21c6c6dbae83465 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 12740362f49a009a6bf76ce11fdd6d1ff6558f7b..8c00554e6777835fa3b5328029bde5511414ec7d 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 383e3d2f13e74374bb6b7b3345d3057708f6e1e1..1723951437704048c1e3c56189f689a2f7a3dff4 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_details/mod.rs b/src/session/view/content/room_details/mod.rs
index 0146e26cfde1a1b699ff6b09ffbb2f851b9fa89b..fb8555257c197551d84a4663957d944846ede426 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/session/view/content/room_history/item_row.rs b/src/session/view/content/room_history/item_row.rs
index 6860ef4b3560243945b32b81c8088515913ee5dc..03790be848afd64dfa8d1c7a56e38734a2a2967c 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 a1220d0ebd384180f56ac6cbc6b59e5e4d01bf6f..2e02552eae59d4528048da1fd57305b99e48d234 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 7bbae71b50c9b93d5e6b7f617557eace7c0d053e..ca01adc19499419bd94811521e62e78def9fabe0 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 9a4c491e6217a2f1e78f17e3e8c6a29b8a19d388..164f1e759a1da1c35691e4a0fde9165a02791628 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 e2632092d72393cd537c30d3e6678157824c5a45..6f071e4a261e7dddc6ab5f99300bdcd4ef3cae12 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 f8edb83ae22bb0d3619ce9223aabbee668f25557..ed4fbaff1f0ababce534f31bd6a76ad704c2f987 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 8ce442f5a895ad174d2fe62bc44165e6caedd606..ffc2dc47eb744dbfb9b6f78f559a8ded39802c79 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 de97bd814681fac655827ea380ec0f0d3f5fa64e..ac345d7f69b0a1f2395b0881428d46c454b56062 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 f977bf32d27f863fed812e3c831fd3ec2f184672..d478e280d70f202a4d280ebeacceb4152eae7a06 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/session/view/event_details_dialog.rs b/src/session/view/event_details_dialog.rs
index e95ce30e7ef58a21275c73f8aa943a8792a0c4d3..f201c15441c78de5ab5f779bf9571c0a1dd2b3b1 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 5f4adc97daae81921f552dae12b427651f9d04f3..606276e8eb30c43ebaf3eaf2c41797e1e49bea58 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 8c303a602409d455395eac20a3014c4ca68ec4a1..bd0f765e30ef360379efd43324e3e13f134df458 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
diff --git a/src/utils/macros.rs b/src/utils/macros.rs
index a2fa4ac774ac690d10385b9131998a0e52c771ef..05f37aebe39c2549c58b42fc629b5b86c6482945 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);
diff --git a/src/window.rs b/src/window.rs
index 27c73b0042700b506cf485e992778b316528d1f7..904cb9058210eeb599264131bc9325b6842a5b30 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 90d6263acf73b4b05e5a1d84cb708a34f39c1109..918ebb3b9cf76b7192a7d878916d2431fae8e0fb 100644
--- a/src/window.ui
+++ b/src/window.ui
@@ -10,7 +10,6 @@
- loading
crossfade
@@ -34,14 +33,9 @@
-
- center
- center
+
True
-
-
+