Browse Source

account-settings: Use AdwEntryRow

merge-requests/1327/merge
Kévin Commaille 4 years ago
parent
commit
0b9519e370
No known key found for this signature in database
GPG Key ID: DD507DAE96E8245C
  1. 4
      data/resources/ui/account-settings-deactivate-account-subpage.ui
  2. 10
      data/resources/ui/account-settings-user-page.ui
  3. 11
      src/session/account_settings/user_page/deactivate_account_subpage.rs
  4. 63
      src/session/account_settings/user_page/mod.rs

4
data/resources/ui/account-settings-deactivate-account-subpage.ui

@ -75,9 +75,7 @@
<child>
<object class="AdwPreferencesGroup">
<child>
<object class="ComponentsEntryRow" id="confirmation">
<property name="title" translatable="yes">Matrix User ID</property>
</object>
<object class="AdwEntryRow" id="confirmation"/>
</child>
</object>
</child>

10
data/resources/ui/account-settings-user-page.ui

@ -34,7 +34,7 @@
<child>
<object class="AdwPreferencesGroup">
<child>
<object class="ComponentsEntryRow" id="display_name">
<object class="AdwEntryRow" id="display_name">
<property name="title" translatable="yes">Name</property>
<binding name="text">
<lookup name="display-name">
@ -43,6 +43,14 @@
</lookup>
</lookup>
</binding>
<signal name="entry-activated" handler="handle_change_display_name" swapped="yes"/>
<child type="suffix">
<object class="ComponentsActionButton" id="display_name_button">
<property name="visible">False</property>
<property name="state">confirm</property>
<signal name="clicked" handler="handle_change_display_name" swapped="yes"/>
</object>
</child>
</object>
</child>
</object>

11
src/session/account_settings/user_page/deactivate_account_subpage.rs

@ -8,7 +8,7 @@ use log::error;
use matrix_sdk::ruma::{api::client::account::deactivate, assign};
use crate::{
components::{AuthDialog, EntryRow, SpinnerButton},
components::{AuthDialog, SpinnerButton},
session::{Session, UserExt},
spawn, toast,
};
@ -24,7 +24,7 @@ mod imp {
pub struct DeactivateAccountSubpage {
pub session: OnceCell<WeakRef<Session>>,
#[template_child]
pub confirmation: TemplateChild<EntryRow>,
pub confirmation: TemplateChild<adw::EntryRow>,
#[template_child]
pub button: TemplateChild<SpinnerButton>,
}
@ -36,7 +36,6 @@ mod imp {
type ParentType = gtk::Box;
fn class_init(klass: &mut Self::Class) {
EntryRow::static_type();
Self::bind_template(klass);
}
@ -85,7 +84,7 @@ mod imp {
self.parent_constructed(obj);
self.confirmation
.connect_activated(clone!(@weak obj => move|_| {
.connect_entry_activated(clone!(@weak obj => move|_| {
spawn!(
clone!(@weak obj => async move {
obj.deactivate_account().await;
@ -134,9 +133,7 @@ impl DeactivateAccountSubpage {
if let Some(session) = session {
let priv_ = self.imp();
priv_.session.set(session.downgrade()).unwrap();
priv_
.confirmation
.set_placeholder_text(Some(&self.user_id()));
priv_.confirmation.set_title(&self.user_id());
}
}

63
src/session/account_settings/user_page/mod.rs

@ -17,7 +17,7 @@ use change_password_subpage::ChangePasswordSubpage;
use deactivate_account_subpage::DeactivateAccountSubpage;
use crate::{
components::{ActionState, ButtonRow, EditableAvatar, EntryRow},
components::{ActionButton, ActionState, ButtonRow, EditableAvatar},
session::{Session, User, UserExt},
spawn, spawn_tokio, toast,
utils::TemplateCallbacks,
@ -37,7 +37,9 @@ mod imp {
#[template_child]
pub avatar: TemplateChild<EditableAvatar>,
#[template_child]
pub display_name: TemplateChild<EntryRow>,
pub display_name: TemplateChild<adw::EntryRow>,
#[template_child]
pub display_name_button: TemplateChild<ActionButton>,
#[template_child]
pub change_password_group: TemplateChild<adw::PreferencesGroup>,
#[template_child]
@ -63,7 +65,6 @@ mod imp {
fn class_init(klass: &mut Self::Class) {
EditableAvatar::static_type();
EntryRow::static_type();
ButtonRow::static_type();
ChangePasswordSubpage::static_type();
DeactivateAccountSubpage::static_type();
@ -342,31 +343,17 @@ impl UserPage {
}
fn init_display_name(&self) {
let entry = &*self.imp().display_name;
entry.connect_focused(clone!(@weak self as obj => move|entry, focused| {
if entry.entry_sensitive() {
if focused {
entry.set_action_state(ActionState::Confirm);
} else if entry.text() == obj.user().display_name() {
entry.set_action_state(ActionState::Default);
}
}
}));
entry.connect_activated(clone!(@weak self as obj => move|_| {
spawn!(
clone!(@weak obj => async move {
obj.change_display_name().await;
})
);
}));
entry.connect_cancel(clone!(@weak self as obj => move|entry| {
entry.set_text(&obj.user().display_name());
let priv_ = self.imp();
let entry = &priv_.display_name;
entry.connect_changed(clone!(@weak self as obj => move|entry| {
obj.imp().display_name_button.set_visible(entry.text() != obj.user().display_name());
}));
}
fn display_name_changed(&self, name: &str) {
let priv_ = self.imp();
let entry = &*priv_.display_name;
let entry = &priv_.display_name;
let button = &priv_.display_name_button;
let to_display_name = priv_
.changing_display_name_to
@ -376,23 +363,20 @@ impl UserPage {
if to_display_name == name {
priv_.changing_display_name_to.take();
entry.remove_css_class("error");
entry.set_action_state(ActionState::Success);
entry.set_entry_sensitive(true);
entry.set_sensitive(true);
button.hide();
button.set_state(ActionState::Confirm);
toast!(self, gettext("Name changed successfully"));
glib::timeout_add_local_once(
Duration::from_secs(2),
clone!(@weak entry => move || {
entry.set_action_state(ActionState::Default);
}),
);
}
}
async fn change_display_name(&self) {
let priv_ = self.imp();
let entry = &*priv_.display_name;
entry.set_action_state(ActionState::Loading);
entry.set_entry_sensitive(false);
let entry = &priv_.display_name;
let button = &priv_.display_name_button;
entry.set_sensitive(false);
button.set_state(ActionState::Loading);
let display_name = entry.text();
priv_
@ -415,9 +399,9 @@ impl UserPage {
Err(err) => {
error!("Couldn’t change user display name: {}", err);
toast!(self, gettext("Could not change display name"));
entry.set_action_state(ActionState::Retry);
button.set_state(ActionState::Retry);
entry.add_css_class("error");
entry.set_entry_sensitive(true);
entry.set_sensitive(true);
}
}
}
@ -442,6 +426,13 @@ impl UserPage {
);
}
#[template_callback]
fn handle_change_display_name(&self) {
spawn!(clone!(@weak self as obj => async move {
obj.change_display_name().await;
}));
}
#[template_callback]
fn show_change_password(&self) {
self.root()

Loading…
Cancel
Save