mirror of
https://gitlab.gnome.org/World/Authenticator.git
synced 2025-03-04 08:44:40 +01:00
Merge branch 'wip/cdavis/remove-get' into 'master'
Update gtk-rs deps and template usage See merge request World/Authenticator!169
This commit is contained in:
commit
edd2553b33
12 changed files with 193 additions and 226 deletions
51
Cargo.lock
generated
51
Cargo.lock
generated
|
@ -377,7 +377,7 @@ checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba"
|
|||
[[package]]
|
||||
name = "cairo-rs"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cairo-sys-rs",
|
||||
|
@ -390,7 +390,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cairo-sys-rs"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"libc",
|
||||
|
@ -941,7 +941,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gdk-pixbuf"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"gdk-pixbuf-sys",
|
||||
"gio",
|
||||
|
@ -952,7 +952,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gdk-pixbuf-sys"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"gio-sys",
|
||||
"glib-sys",
|
||||
|
@ -964,7 +964,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gdk4"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#0f06879b6c4fb1870112d613e5837e8befea0d02"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cairo-rs",
|
||||
|
@ -979,7 +979,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gdk4-sys"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#0f06879b6c4fb1870112d613e5837e8befea0d02"
|
||||
dependencies = [
|
||||
"cairo-sys-rs",
|
||||
"gdk-pixbuf-sys",
|
||||
|
@ -994,7 +994,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gdk4-wayland"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#0f06879b6c4fb1870112d613e5837e8befea0d02"
|
||||
dependencies = [
|
||||
"gdk4",
|
||||
"gdk4-wayland-sys",
|
||||
|
@ -1007,7 +1007,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gdk4-wayland-sys"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#0f06879b6c4fb1870112d613e5837e8befea0d02"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"libc",
|
||||
|
@ -1017,7 +1017,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gdk4-x11"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#0f06879b6c4fb1870112d613e5837e8befea0d02"
|
||||
dependencies = [
|
||||
"gdk4",
|
||||
"gdk4-x11-sys",
|
||||
|
@ -1030,7 +1030,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gdk4-x11-sys"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#0f06879b6c4fb1870112d613e5837e8befea0d02"
|
||||
dependencies = [
|
||||
"gdk4-sys",
|
||||
"glib-sys",
|
||||
|
@ -1102,7 +1102,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gio"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"futures-channel",
|
||||
|
@ -1118,7 +1118,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gio-sys"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gobject-sys",
|
||||
|
@ -1130,7 +1130,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "glib"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"futures-channel",
|
||||
|
@ -1148,7 +1148,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "glib-macros"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"heck",
|
||||
|
@ -1163,7 +1163,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "glib-sys"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"system-deps",
|
||||
|
@ -1185,7 +1185,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gobject-sys"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"libc",
|
||||
|
@ -1195,7 +1195,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "graphene-rs"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"glib",
|
||||
"graphene-sys",
|
||||
|
@ -1205,7 +1205,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "graphene-sys"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"libc",
|
||||
|
@ -1216,7 +1216,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gsk4"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#0f06879b6c4fb1870112d613e5837e8befea0d02"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cairo-rs",
|
||||
|
@ -1231,7 +1231,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gsk4-sys"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#0f06879b6c4fb1870112d613e5837e8befea0d02"
|
||||
dependencies = [
|
||||
"cairo-sys-rs",
|
||||
"gdk4-sys",
|
||||
|
@ -1252,11 +1252,12 @@ checksum = "1874c48e670519ce192093ac906c08a6dde7cb2d18b28722ef237726a39c3a63"
|
|||
[[package]]
|
||||
name = "gtk4"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#0f06879b6c4fb1870112d613e5837e8befea0d02"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cairo-rs",
|
||||
"field-offset",
|
||||
"futures-channel",
|
||||
"gdk-pixbuf",
|
||||
"gdk4",
|
||||
"gio",
|
||||
|
@ -1273,7 +1274,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gtk4-macros"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#0f06879b6c4fb1870112d613e5837e8befea0d02"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"heck",
|
||||
|
@ -1288,7 +1289,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "gtk4-sys"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#397e7f9d6ea62b325e9e707dc76cd602a00e006e"
|
||||
source = "git+https://github.com/gtk-rs/gtk4-rs#0f06879b6c4fb1870112d613e5837e8befea0d02"
|
||||
dependencies = [
|
||||
"cairo-sys-rs",
|
||||
"gdk-pixbuf-sys",
|
||||
|
@ -1910,7 +1911,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "pango"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"glib",
|
||||
|
@ -1922,7 +1923,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "pango-sys"
|
||||
version = "0.13.0"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#0fc0f84f0e237689b8c051249539a0214c6f3d53"
|
||||
source = "git+https://github.com/gtk-rs/gtk-rs#e70aacff8ae34a7b5b57f9955490fa81f08e513c"
|
||||
dependencies = [
|
||||
"glib-sys",
|
||||
"gobject-sys",
|
||||
|
|
|
@ -6,7 +6,7 @@ use crate::{
|
|||
use anyhow::Result;
|
||||
use glib::{clone, signal::Inhibit};
|
||||
use gtk::subclass::prelude::*;
|
||||
use gtk::{gio, glib, prelude::*, CompositeTemplate};
|
||||
use gtk::{gdk, gio, glib, prelude::*, CompositeTemplate};
|
||||
use gtk_macros::{action, get_action};
|
||||
use once_cell::sync::OnceCell;
|
||||
|
||||
|
@ -90,14 +90,13 @@ mod imp {
|
|||
Self::bind_template_children(klass);
|
||||
klass.add_signal("added", glib::SignalFlags::ACTION, &[], glib::Type::Unit);
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for AccountAddDialog {
|
||||
fn constructed(&self, obj: &Self::Type) {
|
||||
fn instance_init(obj: &subclass::InitializingObject<Self::Type>) {
|
||||
obj.init_template();
|
||||
self.parent_constructed(obj);
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for AccountAddDialog {}
|
||||
impl WidgetImpl for AccountAddDialog {}
|
||||
impl WindowImpl for AccountAddDialog {}
|
||||
impl libhandy::subclass::window::WindowImpl for AccountAddDialog {}
|
||||
|
@ -121,8 +120,8 @@ impl AccountAddDialog {
|
|||
|
||||
fn validate(&self) {
|
||||
let self_ = imp::AccountAddDialog::from_instance(self);
|
||||
let username = self_.username_entry.get().get_text().unwrap();
|
||||
let token = self_.token_entry.get().get_text().unwrap();
|
||||
let username = self_.username_entry.get_text().unwrap();
|
||||
let token = self_.token_entry.get_text().unwrap();
|
||||
|
||||
let is_valid = !(username.is_empty() || token.is_empty());
|
||||
get_action!(self_.actions, @save).set_enabled(is_valid);
|
||||
|
@ -133,17 +132,15 @@ impl AccountAddDialog {
|
|||
|
||||
self_
|
||||
.username_entry
|
||||
.get()
|
||||
.connect_changed(clone!(@weak self as win => move |_| win.validate()));
|
||||
self_
|
||||
.token_entry
|
||||
.get()
|
||||
.connect_changed(clone!(@weak self as win => move |_| win.validate()));
|
||||
|
||||
let event_controller = gtk::EventControllerKey::new();
|
||||
event_controller.connect_key_pressed(
|
||||
clone!(@weak self as widget => @default-return Inhibit(false), move |_, k, _, _| {
|
||||
if k == 65307 {
|
||||
if k == gdk::keys::Key::from_name("Escape") {
|
||||
widget.close();
|
||||
}
|
||||
Inhibit(false)
|
||||
|
@ -167,8 +164,8 @@ impl AccountAddDialog {
|
|||
fn set_from_otp_uri(&self, otp_uri: OTPUri) {
|
||||
let self_ = imp::AccountAddDialog::from_instance(self);
|
||||
|
||||
self_.token_entry.get().set_text(&otp_uri.secret);
|
||||
self_.username_entry.get().set_text(&otp_uri.label);
|
||||
self_.token_entry.set_text(&otp_uri.secret);
|
||||
self_.username_entry.set_text(&otp_uri.label);
|
||||
|
||||
let provider = self_
|
||||
.model
|
||||
|
@ -192,8 +189,8 @@ impl AccountAddDialog {
|
|||
let self_ = imp::AccountAddDialog::from_instance(self);
|
||||
|
||||
if let Some(ref provider) = *self_.selected_provider.borrow() {
|
||||
let username = self_.username_entry.get().get_text().unwrap();
|
||||
let token = self_.token_entry.get().get_text().unwrap();
|
||||
let username = self_.username_entry.get_text().unwrap();
|
||||
let token = self_.token_entry.get_text().unwrap();
|
||||
|
||||
let account = Account::create(&username, &token, provider)?;
|
||||
|
||||
|
@ -206,47 +203,39 @@ impl AccountAddDialog {
|
|||
|
||||
fn set_provider(&self, provider: Provider) {
|
||||
let self_ = imp::AccountAddDialog::from_instance(self);
|
||||
self_.more_list.get().show();
|
||||
self_.provider_entry.get().set_text(&provider.name());
|
||||
self_
|
||||
.period_label
|
||||
.get()
|
||||
.set_text(&provider.period().to_string());
|
||||
self_.more_list.show();
|
||||
self_.provider_entry.set_text(&provider.name());
|
||||
self_.period_label.set_text(&provider.period().to_string());
|
||||
|
||||
self_.image.get().set_provider(&provider);
|
||||
self_.image.set_provider(&provider);
|
||||
|
||||
self_
|
||||
.method_label
|
||||
.get()
|
||||
.set_text(&provider.method().to_locale_string());
|
||||
|
||||
self_
|
||||
.algorithm_label
|
||||
.get()
|
||||
.set_text(&provider.algorithm().to_locale_string());
|
||||
|
||||
self_
|
||||
.digits_label
|
||||
.get()
|
||||
.set_text(&provider.digits().to_string());
|
||||
self_.digits_label.set_text(&provider.digits().to_string());
|
||||
|
||||
match provider.method() {
|
||||
OTPMethod::TOTP => {
|
||||
self_.counter_row.get().hide();
|
||||
self_.period_row.get().show();
|
||||
self_.counter_row.hide();
|
||||
self_.period_row.show();
|
||||
}
|
||||
OTPMethod::HOTP => {
|
||||
self_.counter_row.get().show();
|
||||
self_.period_row.get().hide();
|
||||
self_.counter_row.show();
|
||||
self_.period_row.hide();
|
||||
}
|
||||
OTPMethod::Steam => {}
|
||||
};
|
||||
|
||||
if let Some(ref website) = provider.website() {
|
||||
self_.provider_website_row.get().set_uri(website);
|
||||
self_.provider_website_row.set_uri(website);
|
||||
}
|
||||
if let Some(ref help_url) = provider.help_url() {
|
||||
self_.provider_help_row.get().set_uri(help_url);
|
||||
self_.provider_help_row.set_uri(help_url);
|
||||
}
|
||||
self_.selected_provider.borrow_mut().replace(provider);
|
||||
}
|
||||
|
@ -285,10 +274,9 @@ impl AccountAddDialog {
|
|||
let self_ = imp::AccountAddDialog::from_instance(self);
|
||||
self_
|
||||
.provider_completion
|
||||
.get()
|
||||
.set_model(Some(&self_.model.get().unwrap().completion_model()));
|
||||
|
||||
self_.provider_completion.get().connect_match_selected(
|
||||
self_.provider_completion.connect_match_selected(
|
||||
clone!(@weak self as dialog, @strong self_.model as model => move |_, store, iter| {
|
||||
let provider_id = store.get_value(iter, 0). get_some::<i32>().unwrap();
|
||||
let provider = model.get().unwrap().find_by_id(provider_id).unwrap();
|
||||
|
|
|
@ -49,11 +49,14 @@ mod imp {
|
|||
);
|
||||
Self::bind_template_children(klass);
|
||||
}
|
||||
|
||||
fn instance_init(obj: &subclass::InitializingObject<Self::Type>) {
|
||||
obj.init_template();
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for AccountDetailsPage {
|
||||
fn constructed(&self, obj: &Self::Type) {
|
||||
obj.init_template();
|
||||
obj.init_widgets();
|
||||
self.parent_constructed(obj);
|
||||
}
|
||||
|
@ -75,7 +78,6 @@ impl AccountDetailsPage {
|
|||
let self_ = imp::AccountDetailsPage::from_instance(self);
|
||||
self_
|
||||
.qrcode_picture
|
||||
.get()
|
||||
.set_paintable(Some(&self_.qrcode_paintable));
|
||||
}
|
||||
|
||||
|
@ -84,17 +86,14 @@ impl AccountDetailsPage {
|
|||
let qr_code = account.qr_code();
|
||||
self_.qrcode_paintable.set_qrcode(qr_code);
|
||||
|
||||
self_.account_label.get().set_text(&account.name());
|
||||
self_
|
||||
.provider_label
|
||||
.get()
|
||||
.set_text(&account.provider().name());
|
||||
self_.account_label.set_text(&account.name());
|
||||
self_.provider_label.set_text(&account.provider().name());
|
||||
|
||||
if let Some(ref website) = account.provider().website() {
|
||||
self_.website_row.get().set_uri(website);
|
||||
self_.website_row.get().show();
|
||||
self_.website_row.set_uri(website);
|
||||
self_.website_row.show();
|
||||
} else {
|
||||
self_.website_row.get().hide();
|
||||
self_.website_row.hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,6 +65,10 @@ mod imp {
|
|||
klass.add_signal("removed", glib::SignalFlags::ACTION, &[], glib::Type::Unit);
|
||||
klass.add_signal("shared", glib::SignalFlags::ACTION, &[], glib::Type::Unit);
|
||||
}
|
||||
|
||||
fn instance_init(obj: &subclass::InitializingObject<Self::Type>) {
|
||||
obj.init_template();
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for AccountRow {
|
||||
|
@ -80,7 +84,7 @@ mod imp {
|
|||
}
|
||||
}
|
||||
|
||||
fn get_property(&self, _obj: &Self::Type, id: usize) -> glib::Value {
|
||||
fn get_property(&self, obj: &Self::Type, id: usize) -> glib::Value {
|
||||
let prop = &PROPERTIES[id];
|
||||
match *prop {
|
||||
subclass::Property("account", ..) => self.account.borrow().to_value(),
|
||||
|
@ -89,7 +93,6 @@ mod imp {
|
|||
}
|
||||
|
||||
fn constructed(&self, obj: &Self::Type) {
|
||||
obj.init_template();
|
||||
obj.setup_actions();
|
||||
obj.setup_widgets();
|
||||
self.parent_constructed(obj);
|
||||
|
@ -116,37 +119,37 @@ impl AccountRow {
|
|||
fn setup_widgets(&self) {
|
||||
let self_ = imp::AccountRow::from_instance(self);
|
||||
self.account()
|
||||
.bind_property("name", &self_.name_label.get(), "label")
|
||||
.bind_property("name", &*self_.name_label, "label")
|
||||
.flags(glib::BindingFlags::DEFAULT | glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
|
||||
self.account()
|
||||
.bind_property("name", &self_.name_entry.get(), "text")
|
||||
.bind_property("name", &*self_.name_entry, "text")
|
||||
.flags(glib::BindingFlags::DEFAULT | glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
|
||||
self.account()
|
||||
.bind_property("otp", &self_.otp_label.get(), "label")
|
||||
.bind_property("otp", &*self_.otp_label, "label")
|
||||
.flags(glib::BindingFlags::DEFAULT | glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
|
||||
self_.name_entry.get().connect_changed(
|
||||
clone!(@weak self_.actions as actions => move |entry| {
|
||||
self_
|
||||
.name_entry
|
||||
.connect_changed(clone!(@weak self_.actions as actions => move |entry| {
|
||||
let name = entry.get_text().unwrap();
|
||||
get_action!(actions, @save).set_enabled(!name.is_empty());
|
||||
}),
|
||||
);
|
||||
self_.name_entry.get().connect_activate(
|
||||
clone!(@weak self_.actions as actions => move |_| {
|
||||
}));
|
||||
self_
|
||||
.name_entry
|
||||
.connect_activate(clone!(@weak self_.actions as actions => move |_| {
|
||||
actions.activate_action("save", None);
|
||||
}),
|
||||
);
|
||||
}));
|
||||
}
|
||||
|
||||
fn setup_actions(&self) {
|
||||
let self_ = imp::AccountRow::from_instance(self);
|
||||
self.insert_action_group("account", Some(&self_.actions));
|
||||
let copy_btn_stack = self_.copy_btn_stack.get();
|
||||
let copy_btn_stack = &*self_.copy_btn_stack;
|
||||
action!(
|
||||
self_.actions,
|
||||
"copy-otp",
|
||||
|
@ -176,8 +179,8 @@ impl AccountRow {
|
|||
})
|
||||
);
|
||||
|
||||
let edit_stack = self_.edit_stack.get();
|
||||
let name_entry = self_.name_entry.get();
|
||||
let edit_stack = &*self_.edit_stack;
|
||||
let name_entry = &*self_.name_entry;
|
||||
action!(
|
||||
self_.actions,
|
||||
"rename",
|
||||
|
|
|
@ -55,15 +55,13 @@ mod imp {
|
|||
);
|
||||
Self::bind_template_children(klass);
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for PasswordPage {
|
||||
fn constructed(&self, obj: &Self::Type) {
|
||||
fn instance_init(obj: &subclass::InitializingObject<Self::Type>) {
|
||||
obj.init_template();
|
||||
self.parent_constructed(obj);
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for PasswordPage {}
|
||||
impl WidgetImpl for PasswordPage {}
|
||||
impl BoxImpl for PasswordPage {}
|
||||
}
|
||||
|
@ -85,9 +83,9 @@ impl PasswordPage {
|
|||
fn validate(&self) {
|
||||
let self_ = imp::PasswordPage::from_instance(self);
|
||||
|
||||
let current_password = self_.current_password_entry.get().get_text().unwrap();
|
||||
let password = self_.password_entry.get().get_text().unwrap();
|
||||
let password_repeat = self_.confirm_password_entry.get().get_text().unwrap();
|
||||
let current_password = self_.current_password_entry.get_text().unwrap();
|
||||
let password = self_.password_entry.get_text().unwrap();
|
||||
let password_repeat = self_.confirm_password_entry.get_text().unwrap();
|
||||
|
||||
let is_valid = if self_.has_set_password.get() {
|
||||
password_repeat == password && current_password != password && password != ""
|
||||
|
@ -101,26 +99,20 @@ impl PasswordPage {
|
|||
fn setup_widgets(&self) {
|
||||
let self_ = imp::PasswordPage::from_instance(self);
|
||||
|
||||
self_
|
||||
.password_img
|
||||
.get()
|
||||
.set_from_icon_name(Some(config::APP_ID));
|
||||
self_.password_img.set_from_icon_name(Some(config::APP_ID));
|
||||
|
||||
self_
|
||||
.password_entry
|
||||
.get()
|
||||
.connect_changed(clone!(@weak self as page=> move |_| page.validate()));
|
||||
self_
|
||||
.confirm_password_entry
|
||||
.get()
|
||||
.connect_changed(clone!(@weak self as page => move |_| page.validate()));
|
||||
|
||||
if !self_.has_set_password.get() {
|
||||
self_.current_password_row.get().hide();
|
||||
self_.current_password_row.hide();
|
||||
} else {
|
||||
self_
|
||||
.current_password_entry
|
||||
.get()
|
||||
.connect_changed(clone!(@weak self as page => move |_| page.validate()));
|
||||
}
|
||||
}
|
||||
|
@ -156,7 +148,7 @@ impl PasswordPage {
|
|||
get_action!(actions, @close_page).activate(None);
|
||||
get_action!(actions, @save_password).set_enabled(false);
|
||||
get_action!(actions, @reset_password).set_enabled(false);
|
||||
self_.current_password_row.get().hide();
|
||||
self_.current_password_row.hide();
|
||||
self_.has_set_password.set(false);
|
||||
}
|
||||
}
|
||||
|
@ -165,8 +157,8 @@ impl PasswordPage {
|
|||
let self_ = imp::PasswordPage::from_instance(self);
|
||||
let actions = self_.actions.get().unwrap();
|
||||
|
||||
let current_password = self_.current_password_entry.get().get_text().unwrap();
|
||||
let password = self_.password_entry.get().get_text().unwrap();
|
||||
let current_password = self_.current_password_entry.get_text().unwrap();
|
||||
let password = self_.password_entry.get_text().unwrap();
|
||||
|
||||
if Keyring::has_set_password().unwrap_or(false)
|
||||
&& !Keyring::is_current_password(¤t_password).unwrap_or(false)
|
||||
|
@ -175,10 +167,10 @@ impl PasswordPage {
|
|||
}
|
||||
|
||||
if Keyring::set_password(&password).is_ok() {
|
||||
self_.current_password_row.get().show();
|
||||
self_.current_password_entry.get().set_text("");
|
||||
self_.password_entry.get().set_text("");
|
||||
self_.confirm_password_entry.get().set_text("");
|
||||
self_.current_password_row.show();
|
||||
self_.current_password_entry.set_text("");
|
||||
self_.password_entry.set_text("");
|
||||
self_.confirm_password_entry.set_text("");
|
||||
get_action!(actions, @save_password).set_enabled(false);
|
||||
get_action!(actions, @reset_password).set_enabled(true);
|
||||
get_action!(actions, @close_page).activate(None);
|
||||
|
|
|
@ -80,11 +80,14 @@ mod imp {
|
|||
glib::Type::Unit,
|
||||
);
|
||||
}
|
||||
|
||||
fn instance_init(obj: &subclass::InitializingObject<Self::Type>) {
|
||||
obj.init_template();
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for PreferencesWindow {
|
||||
fn constructed(&self, obj: &Self::Type) {
|
||||
obj.init_template();
|
||||
obj.setup_actions();
|
||||
self.parent_constructed(obj);
|
||||
}
|
||||
|
@ -114,17 +117,16 @@ impl PreferencesWindow {
|
|||
|
||||
self_
|
||||
.settings
|
||||
.bind("dark-theme", &self_.dark_theme.get(), "active")
|
||||
.bind("dark-theme", &*self_.dark_theme, "active")
|
||||
.build();
|
||||
self_
|
||||
.settings
|
||||
.bind("auto-lock", &self_.auto_lock.get(), "active")
|
||||
.bind("auto-lock", &*self_.auto_lock, "active")
|
||||
.build();
|
||||
|
||||
self_
|
||||
.auto_lock
|
||||
.get()
|
||||
.bind_property("active", &self_.lock_timeout.get(), "sensitive")
|
||||
.bind_property("active", &*self_.lock_timeout, "sensitive")
|
||||
.flags(glib::BindingFlags::DEFAULT | glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
|
||||
|
@ -163,7 +165,7 @@ impl PreferencesWindow {
|
|||
})
|
||||
);
|
||||
|
||||
self_.backup_group.get().add(&row);
|
||||
self_.backup_group.add(&row);
|
||||
}
|
||||
|
||||
fn register_restore<T: Restorable>(&self, filters: &'static [&str]) {
|
||||
|
@ -192,7 +194,7 @@ impl PreferencesWindow {
|
|||
})
|
||||
);
|
||||
|
||||
self_.restore_group.get().add(&row);
|
||||
self_.restore_group.add(&row);
|
||||
}
|
||||
|
||||
fn restore_items<T: Restorable>(&self, items: Vec<T::Item>) -> Result<()> {
|
||||
|
|
|
@ -2,7 +2,7 @@ use super::{ProviderPage, ProviderPageMode};
|
|||
use crate::models::{Provider, ProviderSorter, ProvidersModel};
|
||||
use glib::{clone, signal::Inhibit};
|
||||
use gtk::subclass::prelude::*;
|
||||
use gtk::{gio, glib, prelude::*, CompositeTemplate};
|
||||
use gtk::{gdk, gio, glib, prelude::*, CompositeTemplate};
|
||||
use row::ProviderActionRow;
|
||||
|
||||
mod imp {
|
||||
|
@ -54,6 +54,10 @@ mod imp {
|
|||
klass.set_template_from_resource("/com/belmoussaoui/Authenticator/providers_dialog.ui");
|
||||
Self::bind_template_children(klass);
|
||||
}
|
||||
|
||||
fn instance_init(obj: &subclass::InitializingObject<Self::Type>) {
|
||||
obj.init_template();
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for ProvidersDialog {
|
||||
|
@ -86,22 +90,20 @@ impl ProvidersDialog {
|
|||
self_.filter_model.set_model(Some(&model));
|
||||
self_
|
||||
.search_bar
|
||||
.get()
|
||||
.bind_property("search-mode-enabled", &self_.search_btn.get(), "active")
|
||||
.bind_property("search-mode-enabled", &*self_.search_btn, "active")
|
||||
.flags(glib::BindingFlags::BIDIRECTIONAL | glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
|
||||
self_.search_entry.get().connect_search_changed(
|
||||
clone!(@weak self as dialog => move |entry| {
|
||||
self_
|
||||
.search_entry
|
||||
.connect_search_changed(clone!(@weak self as dialog => move |entry| {
|
||||
let text = entry.get_text().unwrap().to_string();
|
||||
dialog.search(text);
|
||||
}),
|
||||
);
|
||||
}));
|
||||
|
||||
self_
|
||||
.search_btn
|
||||
.get()
|
||||
.bind_property("active", &self_.search_bar.get(), "search-mode-enabled")
|
||||
.bind_property("active", &*self_.search_bar, "search-mode-enabled")
|
||||
.flags(glib::BindingFlags::BIDIRECTIONAL | glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
|
||||
|
@ -121,14 +123,14 @@ impl ProvidersDialog {
|
|||
row.set_provider(provider);
|
||||
});
|
||||
|
||||
self_.providers_list.get().set_factory(Some(&factory));
|
||||
self_.providers_list.set_factory(Some(&factory));
|
||||
let sorter = ProviderSorter::new();
|
||||
let sort_model = gtk::SortListModel::new(Some(&self_.filter_model), Some(&sorter));
|
||||
|
||||
let selection_model = gtk::NoSelection::new(Some(&sort_model));
|
||||
self_.providers_list.get().set_model(Some(&selection_model));
|
||||
self_.providers_list.set_model(Some(&selection_model));
|
||||
|
||||
self_.providers_list.get().connect_activate(
|
||||
self_.providers_list.connect_activate(
|
||||
clone!(@weak self as dialog => move |listview, pos| {
|
||||
let model = listview.get_model().unwrap();
|
||||
let provider = model
|
||||
|
@ -140,13 +142,13 @@ impl ProvidersDialog {
|
|||
}),
|
||||
);
|
||||
|
||||
let deck_page = self_.deck.get().append(&self_.page).unwrap();
|
||||
let deck_page = self_.deck.append(&self_.page).unwrap();
|
||||
deck_page.set_name("provider");
|
||||
|
||||
let event_controller = gtk::EventControllerKey::new();
|
||||
event_controller.connect_key_pressed(
|
||||
clone!(@weak self as widget => @default-return Inhibit(false), move |_, k, _, _| {
|
||||
if k == 65307 {
|
||||
if k == gdk::keys::Key::from_name("Escape") {
|
||||
widget.close();
|
||||
}
|
||||
Inhibit(false)
|
||||
|
@ -158,8 +160,8 @@ impl ProvidersDialog {
|
|||
fn setup_actions(&self) {
|
||||
let self_ = imp::ProvidersDialog::from_instance(self);
|
||||
|
||||
let deck = self_.deck.get();
|
||||
let search_bar = self_.search_bar.get();
|
||||
let deck = &*self_.deck;
|
||||
let search_bar = &*self_.search_bar;
|
||||
gtk_macros::action!(
|
||||
self_.actions,
|
||||
"search",
|
||||
|
@ -201,13 +203,13 @@ impl ProvidersDialog {
|
|||
|
||||
fn add_provider(&self) {
|
||||
let self_ = imp::ProvidersDialog::from_instance(self);
|
||||
self_.deck.get().set_visible_child_name("provider");
|
||||
self_.deck.set_visible_child_name("provider");
|
||||
self_.page.set_mode(ProviderPageMode::Create);
|
||||
}
|
||||
|
||||
fn edit_provider(&self, provider: Provider) {
|
||||
let self_ = imp::ProvidersDialog::from_instance(self);
|
||||
self_.deck.get().set_visible_child_name("provider");
|
||||
self_.deck.set_visible_child_name("provider");
|
||||
self_.page.set_provider(provider);
|
||||
self_.page.set_mode(ProviderPageMode::Edit);
|
||||
}
|
||||
|
|
|
@ -78,11 +78,14 @@ mod imp {
|
|||
Self::bind_template_children(klass);
|
||||
klass.install_properties(&PROPERTIES);
|
||||
}
|
||||
|
||||
fn instance_init(obj: &subclass::InitializingObject<Self::Type>) {
|
||||
obj.init_template();
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for ProviderImage {
|
||||
fn constructed(&self, obj: &Self::Type) {
|
||||
obj.init_template();
|
||||
obj.setup_widgets();
|
||||
self.parent_constructed(obj);
|
||||
}
|
||||
|
@ -127,8 +130,8 @@ impl ProviderImage {
|
|||
|
||||
pub fn set_provider(&self, provider: &Provider) {
|
||||
let self_ = imp::ProviderImage::from_instance(self);
|
||||
self_.stack.get().set_visible_child_name("loading");
|
||||
self_.spinner.get().start();
|
||||
self_.stack.set_visible_child_name("loading");
|
||||
self_.spinner.start();
|
||||
|
||||
self.set_property("provider", &provider.clone()).unwrap();
|
||||
|
||||
|
@ -139,9 +142,8 @@ impl ProviderImage {
|
|||
if uri == "invalid" {
|
||||
self_
|
||||
.image
|
||||
.get()
|
||||
.set_from_icon_name(Some("image-missing-symbolic"));
|
||||
self_.stack.get().set_visible_child_name("image");
|
||||
self_.stack.set_visible_child_name("image");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -151,8 +153,8 @@ impl ProviderImage {
|
|||
return;
|
||||
}
|
||||
|
||||
self_.image.get().set_from_file(file.get_path().unwrap());
|
||||
self_.stack.get().set_visible_child_name("image");
|
||||
self_.image.set_from_file(file.get_path().unwrap());
|
||||
self_.stack.set_visible_child_name("image");
|
||||
}
|
||||
_ => {
|
||||
self.fetch();
|
||||
|
@ -163,8 +165,8 @@ impl ProviderImage {
|
|||
fn fetch(&self) {
|
||||
let self_ = imp::ProviderImage::from_instance(self);
|
||||
let sender = self_.sender.clone();
|
||||
self_.stack.get().set_visible_child_name("loading");
|
||||
self_.spinner.get().start();
|
||||
self_.stack.set_visible_child_name("loading");
|
||||
self_.spinner.start();
|
||||
let p = self.provider();
|
||||
gtk_macros::spawn!(async move {
|
||||
match p.favicon().await {
|
||||
|
@ -186,7 +188,7 @@ impl ProviderImage {
|
|||
None,
|
||||
clone!(@weak self as image => move |action| image.do_action(action)),
|
||||
);
|
||||
self.bind_property("size", &self_.image.get(), "pixel-size")
|
||||
self.bind_property("size", &*self_.image, "pixel-size")
|
||||
.flags(glib::BindingFlags::DEFAULT | glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
}
|
||||
|
@ -197,17 +199,16 @@ impl ProviderImage {
|
|||
ImageAction::Failed => {
|
||||
self_
|
||||
.image
|
||||
.get()
|
||||
.set_from_icon_name(Some("image-missing-symbolic"));
|
||||
self.provider().set_image_uri("invalid");
|
||||
}
|
||||
ImageAction::Ready(image) => {
|
||||
self_.image.get().set_from_file(image.get_path().unwrap());
|
||||
self_.image.set_from_file(image.get_path().unwrap());
|
||||
self.provider().set_image_uri(&image.get_uri());
|
||||
}
|
||||
}
|
||||
self_.stack.get().set_visible_child_name("image");
|
||||
self_.spinner.get().stop();
|
||||
self_.stack.set_visible_child_name("image");
|
||||
self_.spinner.stop();
|
||||
|
||||
glib::Continue(true)
|
||||
}
|
||||
|
|
|
@ -50,11 +50,14 @@ mod imp {
|
|||
glib::Type::Unit,
|
||||
);
|
||||
}
|
||||
|
||||
fn instance_init(obj: &subclass::InitializingObject<Self::Type>) {
|
||||
obj.init_template();
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for ProvidersList {
|
||||
fn constructed(&self, obj: &Self::Type) {
|
||||
obj.init_template();
|
||||
obj.setup_widgets();
|
||||
self.parent_constructed(obj);
|
||||
}
|
||||
|
@ -105,14 +108,11 @@ impl ProvidersList {
|
|||
fn setup_widgets(&self) {
|
||||
let self_ = imp::ProvidersList::from_instance(self);
|
||||
|
||||
self_
|
||||
.empty_img
|
||||
.get()
|
||||
.set_from_icon_name(Some(config::APP_ID));
|
||||
self_.empty_img.set_from_icon_name(Some(config::APP_ID));
|
||||
|
||||
let sort_model = gtk::SortListModel::new(Some(&self_.filter_model), Some(&self_.sorter));
|
||||
|
||||
self_.providers_list.get().bind_model(
|
||||
self_.providers_list.bind_model(
|
||||
Some(&sort_model),
|
||||
clone!(@weak self as list => move |obj| {
|
||||
let provider = obj.clone().downcast::<Provider>().unwrap();
|
||||
|
|
|
@ -87,11 +87,14 @@ mod imp {
|
|||
klass.set_template_from_resource("/com/belmoussaoui/Authenticator/provider_page.ui");
|
||||
Self::bind_template_children(klass);
|
||||
}
|
||||
|
||||
fn instance_init(obj: &subclass::InitializingObject<Self::Type>) {
|
||||
obj.init_template();
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for ProviderPage {
|
||||
fn constructed(&self, obj: &Self::Type) {
|
||||
obj.init_template();
|
||||
obj.setup_widgets();
|
||||
self.parent_constructed(obj);
|
||||
}
|
||||
|
@ -111,21 +114,18 @@ impl ProviderPage {
|
|||
|
||||
pub fn set_provider(&self, provider: Provider) {
|
||||
let self_ = imp::ProviderPage::from_instance(self);
|
||||
self_.name_entry.get().set_text(&provider.name());
|
||||
self_
|
||||
.period_spinbutton
|
||||
.get()
|
||||
.set_value(provider.period() as f64);
|
||||
self_.name_entry.set_text(&provider.name());
|
||||
self_.period_spinbutton.set_value(provider.period() as f64);
|
||||
|
||||
if let Some(ref website) = provider.website() {
|
||||
self_.provider_website_entry.get().set_text(website);
|
||||
self_.provider_website_entry.set_text(website);
|
||||
}
|
||||
|
||||
if let Some(ref website) = provider.help_url() {
|
||||
self_.provider_help_entry.get().set_text(website);
|
||||
self_.provider_help_entry.set_text(website);
|
||||
}
|
||||
|
||||
self_.algorithm_comborow.get().set_selected(
|
||||
self_.algorithm_comborow.set_selected(
|
||||
self_
|
||||
.algorithms_model
|
||||
.find_position(provider.algorithm().to_glib()),
|
||||
|
@ -134,22 +134,17 @@ impl ProviderPage {
|
|||
|
||||
self_
|
||||
.default_counter_spinbutton
|
||||
.get()
|
||||
.set_value(provider.default_counter() as f64);
|
||||
self_
|
||||
.digits_spinbutton
|
||||
.get()
|
||||
.set_value(provider.digits() as f64);
|
||||
self_.digits_spinbutton.set_value(provider.digits() as f64);
|
||||
|
||||
self_.method_comborow.get().set_selected(
|
||||
self_.method_comborow.set_selected(
|
||||
self_
|
||||
.methods_model
|
||||
.find_position(provider.method().to_glib()),
|
||||
);
|
||||
self_.image.get().set_provider(&provider);
|
||||
self_.image.set_provider(&provider);
|
||||
self_
|
||||
.title
|
||||
.get()
|
||||
.set_text(&format!("Editing provider: {}", provider.name()));
|
||||
}
|
||||
|
||||
|
@ -157,33 +152,28 @@ impl ProviderPage {
|
|||
let self_ = imp::ProviderPage::from_instance(self);
|
||||
self_
|
||||
.algorithm_comborow
|
||||
.get()
|
||||
.set_model(Some(&self_.algorithms_model));
|
||||
|
||||
self_
|
||||
.algorithm_comborow
|
||||
.get()
|
||||
.connect_property_selected_item_notify(clone!(@weak self as page => move |_| {
|
||||
page.on_algorithm_changed();
|
||||
}));
|
||||
self_
|
||||
.method_comborow
|
||||
.get()
|
||||
.set_model(Some(&self_.methods_model));
|
||||
self_.method_comborow.set_model(Some(&self_.methods_model));
|
||||
}
|
||||
|
||||
fn on_algorithm_changed(&self) {
|
||||
let self_ = imp::ProviderPage::from_instance(self);
|
||||
|
||||
let selected = OTPMethod::from(self_.method_comborow.get().get_selected());
|
||||
let selected = OTPMethod::from(self_.method_comborow.get_selected());
|
||||
match selected {
|
||||
OTPMethod::TOTP => {
|
||||
self_.default_counter_row.get().hide();
|
||||
self_.period_row.get().show();
|
||||
self_.default_counter_row.hide();
|
||||
self_.period_row.show();
|
||||
}
|
||||
OTPMethod::HOTP => {
|
||||
self_.default_counter_row.get().show();
|
||||
self_.period_row.get().hide();
|
||||
self_.default_counter_row.show();
|
||||
self_.period_row.hide();
|
||||
}
|
||||
OTPMethod::Steam => {}
|
||||
}
|
||||
|
@ -193,13 +183,13 @@ impl ProviderPage {
|
|||
let self_ = imp::ProviderPage::from_instance(self);
|
||||
match mode {
|
||||
ProviderPageMode::Create => {
|
||||
self_.title.get().set_label("New Provider");
|
||||
self_.name_entry.get().set_text("");
|
||||
self_.period_spinbutton.get().set_value(30_f64);
|
||||
self_.provider_website_entry.get().set_text("");
|
||||
self_.provider_help_entry.get().set_text("");
|
||||
self_.title.set_label("New Provider");
|
||||
self_.name_entry.set_text("");
|
||||
self_.period_spinbutton.set_value(30_f64);
|
||||
self_.provider_website_entry.set_text("");
|
||||
self_.provider_help_entry.set_text("");
|
||||
|
||||
self_.method_comborow.get().set_selected(0);
|
||||
self_.method_comborow.set_selected(0);
|
||||
}
|
||||
ProviderPageMode::Edit => {}
|
||||
}
|
||||
|
|
|
@ -83,6 +83,10 @@ mod imp {
|
|||
glib::Type::Unit,
|
||||
);
|
||||
}
|
||||
|
||||
fn instance_init(obj: &subclass::InitializingObject<Self::Type>) {
|
||||
obj.init_template();
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for ProviderRow {
|
||||
|
@ -112,7 +116,6 @@ mod imp {
|
|||
}
|
||||
|
||||
fn constructed(&self, obj: &Self::Type) {
|
||||
obj.init_template();
|
||||
obj.setup_widgets();
|
||||
self.parent_constructed(obj);
|
||||
}
|
||||
|
@ -142,7 +145,7 @@ impl ProviderRow {
|
|||
let self_ = imp::ProviderRow::from_instance(self);
|
||||
|
||||
self_.started_at.borrow_mut().replace(Instant::now());
|
||||
self_.progress.get().set_fraction(1_f64);
|
||||
self_.progress.set_fraction(1_f64);
|
||||
self.set_property("remaining-time", &(self.provider().period() as u64))
|
||||
.unwrap();
|
||||
}
|
||||
|
@ -173,7 +176,7 @@ impl ProviderRow {
|
|||
let remaining_time = started_at.elapsed().as_millis();
|
||||
let progress_fraction = (max - (remaining_time as f64)) / max;
|
||||
|
||||
self_.progress.get().set_fraction(progress_fraction);
|
||||
self_.progress.set_fraction(progress_fraction);
|
||||
if progress_fraction <= 0.0 {
|
||||
self.restart();
|
||||
}
|
||||
|
@ -184,7 +187,7 @@ impl ProviderRow {
|
|||
|
||||
self.add_css_class(&self.provider().method().to_string());
|
||||
|
||||
self_.image.get().set_provider(&self.provider());
|
||||
self_.image.set_provider(&self.provider());
|
||||
|
||||
self.restart();
|
||||
if self.provider().method() == OTPMethod::TOTP {
|
||||
|
@ -204,11 +207,11 @@ impl ProviderRow {
|
|||
}),
|
||||
);
|
||||
} else {
|
||||
self_.progress.get().hide();
|
||||
self_.progress.hide();
|
||||
}
|
||||
|
||||
self.provider()
|
||||
.bind_property("name", &self_.name_label.get(), "label")
|
||||
.bind_property("name", &*self_.name_label, "label")
|
||||
.flags(glib::BindingFlags::DEFAULT | glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
|
||||
|
@ -255,7 +258,6 @@ impl ProviderRow {
|
|||
|
||||
self_
|
||||
.accounts_list
|
||||
.get()
|
||||
.bind_model(Some(&sort_model), create_callback);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -78,16 +78,13 @@ mod imp {
|
|||
klass.set_template_from_resource("/com/belmoussaoui/Authenticator/window.ui");
|
||||
Self::bind_template_children(klass);
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for Window {
|
||||
fn constructed(&self, obj: &Self::Type) {
|
||||
fn instance_init(obj: &subclass::InitializingObject<Self::Type>) {
|
||||
obj.init_template();
|
||||
|
||||
self.parent_constructed(obj);
|
||||
}
|
||||
}
|
||||
|
||||
impl ObjectImpl for Window {}
|
||||
impl WidgetImpl for Window {}
|
||||
impl WindowImpl for Window {}
|
||||
impl ApplicationWindowImpl for Window {}
|
||||
|
@ -118,24 +115,21 @@ impl Window {
|
|||
let self_ = imp::Window::from_instance(self);
|
||||
match view {
|
||||
View::Login => {
|
||||
self_.deck.get().set_visible_child_name("login");
|
||||
self_.deck.get().set_can_swipe_back(false);
|
||||
self_
|
||||
.search_entry
|
||||
.get()
|
||||
.set_key_capture_widget(gtk::NONE_WIDGET);
|
||||
self_.password_entry.get().grab_focus();
|
||||
self_.deck.set_visible_child_name("login");
|
||||
self_.deck.set_can_swipe_back(false);
|
||||
self_.search_entry.set_key_capture_widget(gtk::NONE_WIDGET);
|
||||
self_.password_entry.grab_focus();
|
||||
}
|
||||
View::Accounts => {
|
||||
self_.deck.get().set_visible_child_name("accounts");
|
||||
self_.deck.get().set_can_swipe_back(false);
|
||||
self_.deck.set_visible_child_name("accounts");
|
||||
self_.deck.set_can_swipe_back(false);
|
||||
|
||||
//self_.search_entry.get().set_key_capture_widget(Some(self));
|
||||
//self_.search_entry.set_key_capture_widget(Some(self));
|
||||
}
|
||||
View::Account(account) => {
|
||||
self_.deck.get().set_visible_child_name("account");
|
||||
self_.deck.get().set_can_swipe_back(true);
|
||||
self_.account_details.get().set_account(&account);
|
||||
self_.deck.set_visible_child_name("account");
|
||||
self_.deck.set_can_swipe_back(true);
|
||||
self_.account_details.set_account(&account);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -185,10 +179,7 @@ impl Window {
|
|||
.unwrap();
|
||||
|
||||
self.set_icon_name(Some(config::APP_ID));
|
||||
self_
|
||||
.locked_img
|
||||
.get()
|
||||
.set_from_icon_name(Some(config::APP_ID));
|
||||
self_.locked_img.set_from_icon_name(Some(config::APP_ID));
|
||||
|
||||
// load latest window state
|
||||
window_state::load(&self, &self_.settings);
|
||||
|
@ -204,17 +195,16 @@ impl Window {
|
|||
gtk_macros::get_widget!(builder, gtk::ShortcutsWindow, shortcuts);
|
||||
self.set_help_overlay(Some(&shortcuts));
|
||||
|
||||
self_.container.get().append(&self_.providers);
|
||||
self_.container.append(&self_.providers);
|
||||
|
||||
self_
|
||||
.search_bar
|
||||
.get()
|
||||
.bind_property("search-mode-enabled", &self_.search_btn.get(), "active")
|
||||
.bind_property("search-mode-enabled", &*self_.search_btn, "active")
|
||||
.flags(glib::BindingFlags::BIDIRECTIONAL | glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
|
||||
let search_btn = self_.search_btn.get();
|
||||
self_.search_entry.get().connect_search_changed(
|
||||
let search_btn = &*self_.search_btn;
|
||||
self_.search_entry.connect_search_changed(
|
||||
clone!(@weak self_.providers as providers => move |entry| {
|
||||
let text = entry.get_text().unwrap().to_string();
|
||||
providers.search(text);
|
||||
|
@ -222,13 +212,11 @@ impl Window {
|
|||
);
|
||||
self_
|
||||
.search_entry
|
||||
.get()
|
||||
.connect_search_started(clone!(@weak search_btn => move |entry| {
|
||||
search_btn.set_active(true);
|
||||
}));
|
||||
self_
|
||||
.search_entry
|
||||
.get()
|
||||
.connect_stop_search(clone!(@weak search_btn => move |entry| {
|
||||
entry.set_text("");
|
||||
search_btn.set_active(false);
|
||||
|
@ -247,7 +235,7 @@ impl Window {
|
|||
|
||||
fn setup_actions(&self, app: &Application) {
|
||||
let self_ = imp::Window::from_instance(self);
|
||||
let search_btn = self_.search_btn.get();
|
||||
let search_btn = &*self_.search_btn;
|
||||
action!(
|
||||
self,
|
||||
"search",
|
||||
|
@ -276,7 +264,7 @@ impl Window {
|
|||
.flags(glib::BindingFlags::INVERT_BOOLEAN | glib::BindingFlags::SYNC_CREATE)
|
||||
.build();
|
||||
|
||||
let password_entry = self_.password_entry.get();
|
||||
let password_entry = &*self_.password_entry;
|
||||
action!(
|
||||
self,
|
||||
"unlock",
|
||||
|
@ -310,7 +298,6 @@ impl Window {
|
|||
|
||||
self_
|
||||
.password_entry
|
||||
.get()
|
||||
.connect_activate(clone!(@weak self as win => move |_| {
|
||||
win.activate_action("unlock", None);
|
||||
}));
|
||||
|
|
Loading…
Add table
Reference in a new issue