gnome-authenticator: fix crash with gtk4 4.10

This commit is contained in:
oreo639 2023-04-01 01:26:30 -07:00 committed by Michal Vasilek
parent db08d1c017
commit 00c184c9d1
2 changed files with 494 additions and 1 deletions

View file

@ -0,0 +1,493 @@
From cb2b5826e517c002b39aa2a291d60a127d47b13a Mon Sep 17 00:00:00 2001
From: Bilal Elmoussaoui <belmouss@redhat.com>
Date: Tue, 3 Jan 2023 11:01:32 +0100
Subject: [PATCH] Bump gtk4-rs and replace more deprecated APIs
---
Cargo.lock | 50 +++++++++++++++----------------
src/application.rs | 4 +--
src/widgets/accounts/add.rs | 10 +++----
src/widgets/accounts/details.rs | 18 +++++------
src/widgets/camera_paintable.rs | 3 +-
src/widgets/camera_row.rs | 2 +-
src/widgets/error_revealer.rs | 4 +--
src/widgets/preferences/window.rs | 10 +++----
src/widgets/providers/page.rs | 21 ++++++-------
src/widgets/providers/row.rs | 2 +-
src/widgets/url_row.rs | 12 ++++++--
src/widgets/window.rs | 2 +-
12 files changed, 71 insertions(+), 67 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index aa0ff53f..4e62dc35 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1110,9 +1110,9 @@ dependencies = [
[[package]]
name = "gdk4"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "272db1bbb9b152ea1fea946f9d464085c86cfe14cafba450d7defa433caff8ec"
+checksum = "bb2181330ebf9d091f8ea7fed6877f7adc92114128592e1fdaeb1da28e0d01e9"
dependencies = [
"bitflags",
"cairo-rs",
@@ -1126,9 +1126,9 @@ dependencies = [
[[package]]
name = "gdk4-sys"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45b571f36b889ab529b2e173248dafe83d75c703f5685b9845e490c7994ae309"
+checksum = "de55cb49432901fe2b3534177fa06844665b9b0911d85d8601a8d8b88b7791db"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@@ -1143,9 +1143,9 @@ dependencies = [
[[package]]
name = "gdk4-wayland"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dee24d5a659ecca2170642c0db211446e7fdbc7ebcf1e63be99405df6f541c15"
+checksum = "b9998dedfee371c33356809f24790a1593c4751367ace7f66256dd759173701a"
dependencies = [
"gdk4",
"gdk4-wayland-sys",
@@ -1156,9 +1156,9 @@ dependencies = [
[[package]]
name = "gdk4-wayland-sys"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbb03e044a5f6ae9270823a8ef89739808845120d47b2be83de785e044c83386"
+checksum = "7017f59dc8c3a0c25756d617be038540642be64b9f229a531507b8f8e3e645ea"
dependencies = [
"glib-sys",
"libc",
@@ -1375,9 +1375,9 @@ dependencies = [
[[package]]
name = "gsk4"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4053293b79099bdfecd9ab0d811d118a0eafce613dfe0b26075419d955f1f652"
+checksum = "591239f5c52ca803b222124ac9c47f230cd180cee9b114c4d672e4a94b74f491"
dependencies = [
"bitflags",
"cairo-rs",
@@ -1391,9 +1391,9 @@ dependencies = [
[[package]]
name = "gsk4-sys"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08e0642edffdb35028d7d67b830678da98844216b6442e11eee52c91ad2a6dc2"
+checksum = "195a63f0be42529f98c3eb3bae0decfd0428ba2cc683b3e20ced88f340904ec5"
dependencies = [
"cairo-sys-rs",
"gdk4-sys",
@@ -1643,9 +1643,9 @@ checksum = "da5bf7748fd4cd0b2490df8debcc911809dbcbee4ece9531b96c29a9c729de5a"
[[package]]
name = "gtk4"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8954da3659ff1cb35aa95110021b33fadcd8e306e8fe41f32146ffa009665a79"
+checksum = "fd89dba65def483a233dc4fdd3f3dab01576e3d83f80f6c9303ebe421661855e"
dependencies = [
"bitflags",
"cairo-rs",
@@ -1666,9 +1666,9 @@ dependencies = [
[[package]]
name = "gtk4-macros"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58138cd3c595e04f82df050390aa7d2bd093795ce569e5f1d49eb496ef67fe7b"
+checksum = "832687a415d9d8bc11fe9c17dda1bf13ee262c41b995dd4df1d1cce33cead405"
dependencies = [
"anyhow",
"proc-macro-crate",
@@ -1680,9 +1680,9 @@ dependencies = [
[[package]]
name = "gtk4-sys"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef29e09e055b2f2550eb1882caa6961a1ae3c971a70bcb25cb9d5ab6cbd63821"
+checksum = "e370564e3fdacff7cffc99f7366b6a4689feb44e819d3ccee598a9a215b71605"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@@ -2265,9 +2265,9 @@ dependencies = [
[[package]]
name = "nom"
-version = "7.1.1"
+version = "7.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
+checksum = "e5507769c4919c998e69e49c839d9dc6e693ede4cc4290d6ad8b41d4f09c548c"
dependencies = [
"memchr",
"minimal-lexical",
@@ -2411,9 +2411,9 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.16.0"
+version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860"
+checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
[[package]]
name = "oo7"
@@ -2514,9 +2514,9 @@ dependencies = [
[[package]]
name = "ordered-stream"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01ca8c99d73c6e92ac1358f9f692c22c0bfd9c4701fa086f5d365c0d4ea818ea"
+checksum = "d4eb9ba3f3e42dbdd3b7b122de5ca169c81e93d561eb900da3a8c99bcfcf381a"
dependencies = [
"futures-core",
"pin-project-lite",
@@ -4042,7 +4042,7 @@ dependencies = [
"hex",
"nix 0.25.1",
"once_cell",
- "ordered-stream 0.1.2",
+ "ordered-stream 0.1.3",
"rand",
"serde",
"serde_repr",
diff --git a/src/application.rs b/src/application.rs
index ec618352..4a027651 100644
--- a/src/application.rs
+++ b/src/application.rs
@@ -106,7 +106,7 @@ mod imp {
app.set_can_be_locked(state);
}));
preferences.set_transient_for(Some(&window));
- preferences.show();
+ preferences.present();
}).build();
// About
@@ -147,7 +147,7 @@ mod imp {
window.providers().refilter();
}));
providers.set_transient_for(Some(&window));
- providers.show();
+ providers.present();
})
.build();
diff --git a/src/widgets/accounts/add.rs b/src/widgets/accounts/add.rs
index 59996bb2..86f73f41 100644
--- a/src/widgets/accounts/add.rs
+++ b/src/widgets/accounts/add.rs
@@ -290,7 +290,7 @@ impl AccountAddDialog {
fn set_provider(&self, provider: Option<Provider>) {
let imp = self.imp();
if let Some(provider) = provider {
- imp.more_list.show();
+ imp.more_list.set_visible(true);
imp.provider_entry.set_text(&provider.name());
imp.period_label.set_text(&provider.period().to_string());
@@ -306,12 +306,12 @@ impl AccountAddDialog {
match provider.method() {
OTPMethod::TOTP | OTPMethod::Steam => {
- imp.counter_row.hide();
- imp.period_row.show();
+ imp.counter_row.set_visible(false);
+ imp.period_row.set_visible(true);
}
OTPMethod::HOTP => {
- imp.counter_row.show();
- imp.period_row.hide();
+ imp.counter_row.set_visible(true);
+ imp.period_row.set_visible(false);
}
};
diff --git a/src/widgets/accounts/details.rs b/src/widgets/accounts/details.rs
index 36ed74f0..f2061aca 100644
--- a/src/widgets/accounts/details.rs
+++ b/src/widgets/accounts/details.rs
@@ -180,7 +180,7 @@ impl AccountDetailsPage {
}),
);
- dialog.show();
+ dialog.present();
}
pub fn set_account(&self, account: &Account) {
@@ -211,25 +211,25 @@ impl AccountDetailsPage {
imp.method_label
.set_text(&provider.method().to_locale_string());
if provider.method() == OTPMethod::HOTP {
- imp.counter_row.show();
- imp.period_row.hide();
+ imp.counter_row.set_visible(true);
+ imp.period_row.set_visible(false);
} else {
- imp.counter_row.hide();
- imp.period_row.show();
+ imp.counter_row.set_visible(false);
+ imp.period_row.set_visible(true);
imp.period_label.set_text(&provider.period().to_string());
}
imp.digits_label.set_text(&provider.digits().to_string());
if let Some(ref help) = provider.help_url() {
imp.help_row.set_uri(help);
- imp.help_row.show();
+ imp.help_row.set_visible(true);
} else {
- imp.help_row.hide();
+ imp.help_row.set_visible(false);
}
if let Some(ref website) = provider.website() {
imp.website_row.set_uri(website);
- imp.website_row.show();
+ imp.website_row.set_visible(true);
} else {
- imp.website_row.hide();
+ imp.website_row.set_visible(false);
}
imp.selected_provider.replace(Some(provider));
}
diff --git a/src/widgets/camera_paintable.rs b/src/widgets/camera_paintable.rs
index 8b061fbb..33c10898 100644
--- a/src/widgets/camera_paintable.rs
+++ b/src/widgets/camera_paintable.rs
@@ -156,8 +156,7 @@ impl CameraPaintable {
{
gst::ElementFactory::make("glsinkbin")
.property("sink", &sink)
- .build()
- .unwrap()
+ .build()?
} else {
let bin = gst::Bin::default();
let convert = gst::ElementFactory::make_with_name("videoconvert", None)?;
diff --git a/src/widgets/camera_row.rs b/src/widgets/camera_row.rs
index a0c7cea2..5b2b6fa8 100644
--- a/src/widgets/camera_row.rs
+++ b/src/widgets/camera_row.rs
@@ -30,7 +30,7 @@ mod imp {
obj.set_spacing(6);
self.checkmark.set_icon_name(Some("object-select-symbolic"));
- self.checkmark.hide();
+ self.checkmark.set_visible(false);
obj.append(&self.label);
obj.append(&self.checkmark);
diff --git a/src/widgets/error_revealer.rs b/src/widgets/error_revealer.rs
index de3f36b7..c0d3d34c 100644
--- a/src/widgets/error_revealer.rs
+++ b/src/widgets/error_revealer.rs
@@ -50,13 +50,13 @@ impl ErrorRevealer {
pub fn popup(&self, text: &str) {
let imp = self.imp();
imp.label.set_text(text);
- self.show();
+ self.set_visible(true);
imp.revealer.set_reveal_child(true);
glib::timeout_add_seconds_local(
2,
glib::clone!(@weak self as error_revealer => @default-return glib::Continue(false), move || {
error_revealer.imp().revealer.set_reveal_child(false);
- error_revealer.hide();
+ error_revealer.set_visible(false);
glib::Continue(false)
}),
);
diff --git a/src/widgets/preferences/window.rs b/src/widgets/preferences/window.rs
index c9c98829..faba1ba9 100644
--- a/src/widgets/preferences/window.rs
+++ b/src/widgets/preferences/window.rs
@@ -291,7 +291,7 @@ impl PreferencesWindow {
clone!(@weak self as win, @weak model => move |_, _| {
let ctx = glib::MainContext::default();
ctx.spawn_local(clone!(@weak win, @weak model => async move {
- if let Ok(Some(file)) = win.select_file(filters, Operation::Backup).await {
+ if let Ok(file) = win.select_file(filters, Operation::Backup).await {
let key = T::ENCRYPTABLE.then(|| {
win.encyption_key(Operation::Backup, &T::identifier())
}).flatten();
@@ -455,7 +455,7 @@ impl PreferencesWindow {
clone!(@weak self as win => move |_, _| {
let ctx = glib::MainContext::default();
ctx.spawn_local(clone!(@weak win => async move {
- if let Ok(Some(file)) = win.select_file(filters, Operation::Restore).await {
+ if let Ok(file) = win.select_file(filters, Operation::Restore).await {
let key = T::ENCRYPTABLE.then(|| {
win.encyption_key(Operation::Restore, &T::identifier())
}).flatten();
@@ -505,7 +505,7 @@ impl PreferencesWindow {
&self,
filters: &'static [&str],
operation: Operation,
- ) -> Result<Option<gio::File>, glib::Error> {
+ ) -> Result<gio::File, glib::Error> {
let filters_model = gio::ListStore::new(gtk::FileFilter::static_type());
filters.iter().for_each(|f| {
let filter = gtk::FileFilter::new();
@@ -521,7 +521,7 @@ impl PreferencesWindow {
.filters(&filters_model)
.title(&gettext("Backup"))
.build();
- dialog.save_future(Some(self), gio::File::NONE, None).await
+ dialog.save_future(Some(self)).await
}
Operation::Restore => {
let dialog = gtk::FileDialog::builder()
@@ -529,7 +529,7 @@ impl PreferencesWindow {
.filters(&filters_model)
.title(&gettext("Restore"))
.build();
- dialog.open_future(Some(self), gio::File::NONE).await
+ dialog.open_future(Some(self)).await
}
}
}
diff --git a/src/widgets/providers/page.rs b/src/widgets/providers/page.rs
index 023cce1d..d2c2e688 100644
--- a/src/widgets/providers/page.rs
+++ b/src/widgets/providers/page.rs
@@ -167,7 +167,7 @@ impl ProviderPage {
pub fn set_provider(&self, provider: Option<Provider>) {
let imp = self.imp();
if let Some(provider) = provider {
- imp.delete_button.show();
+ imp.delete_button.set_visible(true);
imp.name_entry.set_text(&provider.name());
imp.period_spinbutton.set_value(provider.period() as f64);
@@ -202,7 +202,7 @@ impl ProviderPage {
imp.selected_provider.replace(Some(provider));
} else {
imp.name_entry.set_text("");
- imp.delete_button.hide();
+ imp.delete_button.set_visible(false);
imp.period_spinbutton
.set_value(otp::TOTP_DEFAULT_PERIOD as f64);
imp.provider_website_entry.set_text("");
@@ -315,10 +315,7 @@ impl ProviderPage {
.filters(&model)
.build();
- if let Ok(Some(file)) = file_chooser
- .open_future(Some(&parent), gio::File::NONE)
- .await
- {
+ if let Ok(file) = file_chooser.open_future(Some(&parent)).await {
self.set_image(file);
};
}
@@ -377,22 +374,22 @@ impl ProviderPage {
let selected = OTPMethod::from(combo_row.selected());
match selected {
OTPMethod::TOTP => {
- imp.default_counter_row.hide();
- imp.period_row.show();
+ imp.default_counter_row.set_visible(false);
+ imp.period_row.set_visible(true);
imp.digits_spinbutton.set_value(otp::DEFAULT_DIGITS as f64);
imp.period_spinbutton
.set_value(otp::TOTP_DEFAULT_PERIOD as f64);
}
OTPMethod::HOTP => {
- imp.default_counter_row.show();
- imp.period_row.hide();
+ imp.default_counter_row.set_visible(true);
+ imp.period_row.set_visible(false);
imp.default_counter_spinbutton
.set_value(otp::HOTP_DEFAULT_COUNTER as f64);
imp.digits_spinbutton.set_value(otp::DEFAULT_DIGITS as f64);
}
OTPMethod::Steam => {
- imp.default_counter_row.hide();
- imp.period_row.show();
+ imp.default_counter_row.set_visible(false);
+ imp.period_row.set_visible(true);
imp.digits_spinbutton
.set_value(otp::STEAM_DEFAULT_DIGITS as f64);
imp.period_spinbutton
diff --git a/src/widgets/providers/row.rs b/src/widgets/providers/row.rs
index 893b0565..3ef1d027 100644
--- a/src/widgets/providers/row.rs
+++ b/src/widgets/providers/row.rs
@@ -162,7 +162,7 @@ impl ProviderRow {
imp.image.set_provider(Some(&provider));
if provider.method() == OTPMethod::HOTP {
- imp.progress_icon.hide();
+ imp.progress_icon.set_visible(false);
} else {
// Update the progress bar whnever the remaining-time is updated
self.tick_progressbar();
diff --git a/src/widgets/url_row.rs b/src/widgets/url_row.rs
index 19e656a4..4e6fdf2f 100644
--- a/src/widgets/url_row.rs
+++ b/src/widgets/url_row.rs
@@ -1,5 +1,6 @@
use adw::prelude::*;
use gtk::{
+ gio,
glib::{self, clone},
subclass::prelude::*,
};
@@ -54,8 +55,15 @@ mod imp {
let obj = self.obj();
let gesture = gtk::GestureClick::new();
gesture.connect_pressed(clone!(@weak obj as row => move |_,_,_,_| {
- if let Some(ref uri) = *row.imp().uri.borrow() {
- gtk::show_uri(gtk::Window::NONE, uri, 0);
+ if let Some(uri) = row.imp().uri.borrow().clone() {
+ let ctx = glib::MainContext::default();
+ ctx.spawn_local(async move {
+ let file = gio::File::for_uri(&uri);
+ let launcher = gtk::FileLauncher::new(Some(&file));
+ if let Err(err) = launcher.launch_future(gtk::Window::NONE).await {
+ tracing::error!("Failed to open URI {err}");
+ }
+ });
};
}));
diff --git a/src/widgets/window.rs b/src/widgets/window.rs
index 0cff942b..3a53d559 100644
--- a/src/widgets/window.rs
+++ b/src/widgets/window.rs
@@ -218,7 +218,7 @@ impl Window {
dialog.connect_added(clone!(@weak self as win => move |_| {
win.providers().refilter();
}));
- dialog.show();
+ dialog.present();
}
pub fn providers(&self) -> ProvidersList {
--
GitLab

View file

@ -1,7 +1,7 @@
# Template file for 'gnome-authenticator'
pkgname=gnome-authenticator
version=4.2.0
revision=1
revision=2
build_style=meson
build_helper="rust"
hostmakedepends="pkg-config gettext glib-devel itstool cargo desktop-file-utils