git: 2465b9abe29c - main - security/authenticator: drop gtk4 < 4.10 workaround after a4aab0806301
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 20 Apr 2023 00:59:33 UTC
The branch main has been updated by jbeich: URL: https://cgit.FreeBSD.org/ports/commit/?id=2465b9abe29c24cfe9088f39b51dd9c0af99bd5d commit 2465b9abe29c24cfe9088f39b51dd9c0af99bd5d Author: Jan Beich <jbeich@FreeBSD.org> AuthorDate: 2023-04-19 23:50:58 +0000 Commit: Jan Beich <jbeich@FreeBSD.org> CommitDate: 2023-04-20 00:57:18 +0000 security/authenticator: drop gtk4 < 4.10 workaround after a4aab0806301 --- security/authenticator/Makefile | 2 +- security/authenticator/files/patch-gtk48 | 304 ------------------------------- 2 files changed, 1 insertion(+), 305 deletions(-) diff --git a/security/authenticator/Makefile b/security/authenticator/Makefile index b91eba3f5adb..77d86023ceb1 100644 --- a/security/authenticator/Makefile +++ b/security/authenticator/Makefile @@ -1,6 +1,6 @@ PORTNAME= authenticator DISTVERSION= 4.2.0 -PORTREVISION= 4 +PORTREVISION= 5 CATEGORIES= security MAINTAINER= jbeich@FreeBSD.org diff --git a/security/authenticator/files/patch-gtk48 b/security/authenticator/files/patch-gtk48 deleted file mode 100644 index 78a2ec962441..000000000000 --- a/security/authenticator/files/patch-gtk48 +++ /dev/null @@ -1,304 +0,0 @@ -Revert https://gitlab.gnome.org/World/Authenticator/-/commit/87dd3b224385 -until x11-toolkits/gtk40 >= 4.10. - -[gtk4-sys 0.5.4] Package dependency requirement 'gtk4 >= 4.9' could not be satisfied. -[gtk4-sys 0.5.4] Package 'gtk4' has version '4.8.3', required version is '>= 4.9' - ---- Cargo.toml.orig 2022-12-27 13:51:14 UTC -+++ Cargo.toml -@@ -13,7 +13,7 @@ gst4gtk = { package = "gst-plugin-gtk4", version = "0. - gettext-rs = {version = "0.7", features = ["gettext-system"]} - gst = {package = "gstreamer", version = "0.19"} - gst4gtk = { package = "gst-plugin-gtk4", version = "0.9", features = ["wayland", "x11egl", "x11glx"]} --gtk = {package = "gtk4", version = "0.5", features = ["v4_10"]} -+gtk = {package = "gtk4", version = "0.5"} - gtk-macros = "0.3" - search-provider = "0.4" - hex = { version = "0.4.3", features = [ "serde" ] } ---- src/widgets/accounts/details.rs.orig 2022-12-27 13:51:14 UTC -+++ src/widgets/accounts/details.rs -@@ -1,8 +1,8 @@ --use adw::prelude::*; - use gettextrs::gettext; - use gtk::{ - gdk, - glib::{self, clone}, -+ prelude::*, - subclass::prelude::*, - CompositeTemplate, - }; -@@ -161,24 +161,21 @@ impl AccountDetailsPage { - fn delete_account(&self) { - let parent = self.root().unwrap().downcast::<gtk::Window>().unwrap(); - -- let dialog = adw::MessageDialog::builder() -- .heading(&gettext("Are you sure you want to delete the account?")) -- .body(&gettext("This action is irreversible")) -+ let dialog = gtk::MessageDialog::builder() -+ .message_type(gtk::MessageType::Warning) -+ .buttons(gtk::ButtonsType::YesNo) -+ .text(&gettext("Are you sure you want to delete the account?")) -+ .secondary_text(&gettext("This action is irreversible")) - .modal(true) - .transient_for(&parent) - .build(); -- dialog.add_responses(&[("no", &gettext("No")), ("yes", &gettext("Yes"))]); -- dialog.set_response_appearance("yes", adw::ResponseAppearance::Destructive); -- dialog.connect_response( -- None, -- clone!(@weak self as page => move |dialog, response| { -- if response == "yes" { -- let account = page.imp().account.borrow().as_ref().unwrap().clone(); -- page.emit_by_name::<()>("removed", &[&account]); -- } -- dialog.close(); -- }), -- ); -+ dialog.connect_response(clone!(@weak self as page => move |dialog, response| { -+ if response == gtk::ResponseType::Yes { -+ let account = page.imp().account.borrow().as_ref().unwrap().clone(); -+ page.emit_by_name::<()>("removed", &[&account]); -+ } -+ dialog.close(); -+ })); - - dialog.show(); - } ---- src/widgets/preferences/window.rs.orig 2022-12-27 13:51:14 UTC -+++ src/widgets/preferences/window.rs -@@ -37,6 +37,7 @@ mod imp { - pub actions: gio::SimpleActionGroup, - pub backup_actions: gio::SimpleActionGroup, - pub restore_actions: gio::SimpleActionGroup, -+ pub file_chooser: RefCell<Option<gtk::FileChooserNative>>, - pub camera_page: CameraPage, - pub password_page: PasswordPage, - #[template_child] -@@ -83,6 +84,7 @@ mod imp { - backup_group: TemplateChild::default(), - restore_group: TemplateChild::default(), - dark_mode_group: TemplateChild::default(), -+ file_chooser: RefCell::default(), - key_entries: RefCell::default(), - } - } -@@ -289,16 +291,17 @@ impl PreferencesWindow { - imp.backup_actions, - &T::identifier(), - 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 { -+ let dialog = win.select_file(filters, Operation::Backup); -+ dialog.connect_response(clone!(@weak model, @weak win => move |d, response| { -+ if response == gtk::ResponseType::Accept { - let key = T::ENCRYPTABLE.then(|| { - win.encyption_key(Operation::Backup, &T::identifier()) - }).flatten(); -- if let Err(err) = T::backup(&model, &file, key.as_deref()) { -+ if let Err(err) = T::backup(&model, &d.file().unwrap(), key.as_deref()) { - tracing::warn!("Failed to create a backup {}", err); - } - } -+ d.destroy(); - })); - }) - ); -@@ -453,14 +456,14 @@ impl PreferencesWindow { - imp.restore_actions, - &T::identifier(), - 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 { -+ let dialog = win.select_file(filters, Operation::Restore); -+ dialog.connect_response(clone!(@weak win => move |d, response| { -+ if response == gtk::ResponseType::Accept { - let key = T::ENCRYPTABLE.then(|| { - win.encyption_key(Operation::Restore, &T::identifier()) - }).flatten(); - -- match T::restore_from_file(&file, key.as_deref()) { -+ match T::restore_from_file(&d.file().unwrap(), key.as_deref()) { - Ok(items) => { - win.restore_items::<T, T::Item>(items); - }, -@@ -469,6 +472,7 @@ impl PreferencesWindow { - } - } - } -+ d.destroy(); - })); - }) - ); -@@ -501,37 +505,42 @@ impl PreferencesWindow { - self.close(); - } - -- async fn select_file( -+ fn select_file( - &self, - filters: &'static [&str], - operation: Operation, -- ) -> Result<Option<gio::File>, glib::Error> { -- let filters_model = gio::ListStore::new(gtk::FileFilter::static_type()); -+ ) -> gtk::FileChooserNative { -+ let native = match operation { -+ Operation::Backup => gtk::FileChooserNative::new( -+ Some(&gettext("Backup")), -+ gtk::Window::NONE, -+ gtk::FileChooserAction::Save, -+ Some(&gettext("Select")), -+ Some(&gettext("Cancel")), -+ ), -+ Operation::Restore => gtk::FileChooserNative::new( -+ Some(&gettext("Restore")), -+ gtk::Window::NONE, -+ gtk::FileChooserAction::Open, -+ Some(&gettext("Select")), -+ Some(&gettext("Cancel")), -+ ), -+ }; -+ -+ native.set_modal(true); -+ native.set_transient_for(Some(self)); -+ - filters.iter().for_each(|f| { - let filter = gtk::FileFilter::new(); - filter.add_mime_type(f); - filter.set_name(Some(f)); -- filters_model.append(&filter); -+ native.add_filter(&filter); - }); - -- match operation { -- Operation::Backup => { -- let dialog = gtk::FileDialog::builder() -- .modal(true) -- .filters(&filters_model) -- .title(&gettext("Backup")) -- .build(); -- dialog.save_future(Some(self), gio::File::NONE, None).await -- } -- Operation::Restore => { -- let dialog = gtk::FileDialog::builder() -- .modal(true) -- .filters(&filters_model) -- .title(&gettext("Restore")) -- .build(); -- dialog.open_future(Some(self), gio::File::NONE).await -- } -- } -+ // Hold a reference to the file chooser -+ self.imp().file_chooser.replace(Some(native.clone())); -+ native.show(); -+ native - } - - fn setup_actions(&self) { ---- src/widgets/providers/page.rs.orig 2022-12-27 13:51:14 UTC -+++ src/widgets/providers/page.rs -@@ -1,6 +1,6 @@ use gettextrs::gettext; - use adw::prelude::*; - use gettextrs::gettext; --use glib::translate::IntoGlib; -+use glib::{clone, translate::IntoGlib}; - use gtk::{gdk_pixbuf, gio, glib, subclass::prelude::*, CompositeTemplate}; - - use crate::{ -@@ -55,6 +55,8 @@ mod imp { - #[template_child] - pub delete_button: TemplateChild<gtk::Button>, - pub selected_provider: RefCell<Option<Provider>>, -+ // We need to hold a reference to the native file chooser -+ pub file_chooser: RefCell<Option<gtk::FileChooserNative>>, - pub selected_image: RefCell<Option<gio::File>>, - #[template_child] - pub back_btn: TemplateChild<gtk::Button>, -@@ -92,6 +94,7 @@ mod imp { - methods_model, - algorithms_model, - selected_provider: RefCell::default(), -+ file_chooser: RefCell::default(), - selected_image: RefCell::default(), - } - } -@@ -116,8 +119,8 @@ mod imp { - klass.install_action("providers.reset_image", None, move |page, _, _| { - page.reset_image(); - }); -- klass.install_action_async("providers.select_image", None, |page, _, _| async move { -- page.open_select_image().await; -+ klass.install_action("providers.select_image", None, move |page, _, _| { -+ page.open_select_image(); - }); - } - -@@ -301,26 +304,34 @@ impl ProviderPage { - Ok(()) - } - -- async fn open_select_image(&self) { -+ fn open_select_image(&self) { -+ let imp = self.imp(); - let parent = self.root().unwrap().downcast::<gtk::Window>().unwrap(); - -+ let file_chooser = gtk::FileChooserNative::builder() -+ .accept_label(&gettext("Select")) -+ .cancel_label(&gettext("Cancel")) -+ .modal(true) -+ .action(gtk::FileChooserAction::Open) -+ .transient_for(&parent) -+ .build(); -+ - let images_filter = gtk::FileFilter::new(); - images_filter.set_name(Some(&gettext("Image"))); - images_filter.add_pixbuf_formats(); -- let model = gio::ListStore::new(gtk::FileFilter::static_type()); -- model.append(&images_filter); -+ file_chooser.add_filter(&images_filter); - -- let file_chooser = gtk::FileDialog::builder() -- .modal(true) -- .filters(&model) -- .build(); -+ file_chooser.connect_response(clone!(@weak self as page => move |dialog, response| { -+ if response == gtk::ResponseType::Accept { -+ let file = dialog.file().unwrap(); -+ page.set_image(file); -+ } -+ page.imp().file_chooser.replace(None); -+ dialog.destroy(); -+ })); - -- if let Ok(Some(file)) = file_chooser -- .open_future(Some(&parent), gio::File::NONE) -- .await -- { -- self.set_image(file); -- }; -+ file_chooser.show(); -+ imp.file_chooser.replace(Some(file_chooser)); - } - - fn set_image(&self, file: gio::File) { -@@ -356,7 +367,7 @@ impl ProviderPage { - // save action Note that we don't validate the urls other than: does `url` - // crate can parse it or not - #[template_callback] -- fn entry_validate(&self, _entry: adw::EntryRow) { -+ fn entry_validate(&self, _entry: gtk::Entry) { - let imp = self.imp(); - - let provider_name = imp.name_entry.text(); ---- src/widgets/window.rs.orig 2022-12-27 13:51:14 UTC -+++ src/widgets/window.rs -@@ -150,7 +150,7 @@ impl Window { - app.add_window(&window); - - if config::PROFILE == "Devel" { -- window.add_css_class("devel"); -+ window.style_context().add_class("devel"); - } - window.init(model, app); - window.setup_actions(app);