From d2652ae9fe02137ae6a914a8bbf27ab5cbf19798 Mon Sep 17 00:00:00 2001 From: oreo639 Date: Sat, 1 Apr 2023 01:26:30 -0700 Subject: [PATCH] gnome-authenticator: fix crash with gtk4 4.10 --- ...5826e517c002b39aa2a291d60a127d47b13a.patch | 493 ++++++++++++++++++ srcpkgs/gnome-authenticator/template | 2 +- 2 files changed, 494 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/gnome-authenticator/patches/cb2b5826e517c002b39aa2a291d60a127d47b13a.patch diff --git a/srcpkgs/gnome-authenticator/patches/cb2b5826e517c002b39aa2a291d60a127d47b13a.patch b/srcpkgs/gnome-authenticator/patches/cb2b5826e517c002b39aa2a291d60a127d47b13a.patch new file mode 100644 index 000000000000..cbed19cf4c7e --- /dev/null +++ b/srcpkgs/gnome-authenticator/patches/cb2b5826e517c002b39aa2a291d60a127d47b13a.patch @@ -0,0 +1,493 @@ +From cb2b5826e517c002b39aa2a291d60a127d47b13a Mon Sep 17 00:00:00 2001 +From: Bilal Elmoussaoui +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) { + 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, glib::Error> { ++ ) -> Result { + 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) { + 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 + diff --git a/srcpkgs/gnome-authenticator/template b/srcpkgs/gnome-authenticator/template index db6d2317e57d..e43023e08b5a 100644 --- a/srcpkgs/gnome-authenticator/template +++ b/srcpkgs/gnome-authenticator/template @@ -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