diff --git a/loupe.changes b/loupe.changes index bf7c243..6b61f87 100644 --- a/loupe.changes +++ b/loupe.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Fri Sep 29 20:50:37 UTC 2023 - Bjørn Lie + +- Add loupe_glycin-loaders_sandbox.patch: Enable the glycin-loaders + sandbox. + https://gitlab.gnome.org/GNOME/loupe/-/merge_requests/299 +- Add loupe_print_fix.patch: print: Use same print operation + throughout. + https://gitlab.gnome.org/GNOME/loupe/-/merge_requests/302 + ------------------------------------------------------------------- Sun Sep 17 17:25:18 UTC 2023 - Bjørn Lie diff --git a/loupe.spec b/loupe.spec index c4be438..5c51d56 100644 --- a/loupe.spec +++ b/loupe.spec @@ -26,10 +26,16 @@ Source: %{name}-%{version}.tar.zst Source2: vendor.tar.zst Source3: cargo_config +# PATCH-FIX-UPSTREAM loupe_glycin-loaders_sandbox.patch -- Enable the glycin-loaders sandbox +Patch: loupe_glycin-loaders_sandbox.patch +# PATCH-FIX-UPSTREAM loupe_print_fix.patch -- print: Use same print operation throughout +Patch2: loupe_print_fix.patch + BuildRequires: appstream-glib BuildRequires: cargo-packaging >= 1.2.0+3 BuildRequires: desktop-file-utils -BuildRequires: meson itstool +BuildRequires: itstool +BuildRequires: meson BuildRequires: pkgconfig BuildRequires: pkgconfig(gtk4) >= 4.10 BuildRequires: pkgconfig(gweather4) >= 4.0.0 @@ -81,4 +87,3 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/org.gnome.Loupe.deskt %files lang -f %{name}.lang %changelog - diff --git a/loupe_glycin-loaders_sandbox.patch b/loupe_glycin-loaders_sandbox.patch new file mode 100644 index 0000000..bd0b5c3 --- /dev/null +++ b/loupe_glycin-loaders_sandbox.patch @@ -0,0 +1,27 @@ +From afc1e32c7dc0d36166f8cb200fe37ee9fbc39c02 Mon Sep 17 00:00:00 2001 +From: Michael Catanzaro +Date: Tue, 26 Sep 2023 17:07:02 -0500 +Subject: [PATCH] Enable the glycin-loaders sandbox + +We (presumably accidentally) shipped with the sandbox disabled by +default, so it's not doing any good. Enable it. Developers who want to +disable the sandbox can easily set the build option. +--- + meson_options.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/meson_options.txt b/meson_options.txt +index 2a4698c7..70fa9645 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -13,4 +13,5 @@ option( + 'disable-glycin-sandbox', + type: 'boolean', + description: 'Disable sandboxing of image loaders in glycin. Only intended for development purposes.', +-) +\ No newline at end of file ++ value: false ++) +-- +GitLab + diff --git a/loupe_print_fix.patch b/loupe_print_fix.patch new file mode 100644 index 0000000..0d3c6f1 --- /dev/null +++ b/loupe_print_fix.patch @@ -0,0 +1,138 @@ +From 3a11e9c9ce72e36c6124e9dc2f8379df4f004ea9 Mon Sep 17 00:00:00 2001 +From: Sophie Herold +Date: Thu, 28 Sep 2023 12:58:46 +0200 +Subject: [PATCH] print: Use same print operation throughout + +Use a hack to wait in print signal for the layout dialog to be ready +instead of creating a new print operation with the same settings. + +This works around a bug in GTK where the wrong printer gets selected +(issue #243), as well as the print dialog getting shown twice when +using the print portal (part of #61). +--- + src/widgets/print.rs | 60 +++++++++++++++++++++++++------------------- + 1 file changed, 34 insertions(+), 26 deletions(-) + +diff --git a/src/widgets/print.rs b/src/widgets/print.rs +index 2ad0efb4..7c8a4657 100644 +--- a/src/widgets/print.rs ++++ b/src/widgets/print.rs +@@ -53,6 +53,14 @@ enum VAlignment { + Bottom, + } + ++#[derive(Debug, Clone, Copy, Default)] ++enum Status { ++ #[default] ++ Prepare, ++ Print, ++ Abort, ++} ++ + /// Scope guard for non user ui changes + /// + /// Creates a context in which other signals know that changes are not user input. +@@ -250,6 +258,8 @@ mod imp { + pub(super) orientation: RefCell, + + pub(super) ui_updates: UiUpdates, ++ ++ pub(super) status: Cell, + } + + #[glib::object_subclass] +@@ -291,6 +301,11 @@ mod imp { + obj.set_transient_for(Some(&obj.parent_window())); + obj.set_modal(true); + ++ obj.connect_close_request(|obj| { ++ obj.imp().status.set(Status::Abort); ++ glib::Propagation::Proceed ++ }); ++ + self.alignment + .connect_selected_notify(glib::clone!(@weak obj => move |_| obj.draw_preview())); + +@@ -341,7 +356,7 @@ mod imp { + }); + + self.print_operation.connect_draw_page(glib::clone!(@weak obj => +- move |operation, _context, _page_nr| { ++ move |operation, context, _page_nr| { + let imp = obj.imp(); + + let basename = obj +@@ -394,8 +409,6 @@ mod imp { + } + } + +- imp.print_operation.cancel(); +- + let orientation = match obj.page_setup().orientation() { + gtk::PageOrientation::Portrait => "portrait", + gtk::PageOrientation::Landscape => "landscape", +@@ -404,6 +417,23 @@ mod imp { + obj.set_orientation(orientation); + + obj.present(); ++ ++ loop { ++ match imp.status.get() { ++ Status::Prepare => { ++ glib::MainContext::default().iteration(true); ++ } ++ Status::Print => { ++ log::debug!("Layout dialog confirmed"); ++ obj.draw_page(context); ++ break;} ++ Status::Abort => { ++ log::debug!("Layout dialog aborted"); ++ imp.print_operation.cancel(); ++ break; ++ } ++ } ++ } + } + )); + } +@@ -802,8 +832,6 @@ impl LpPrint { + fn print(&self) { + self.close(); + +- let print_operation = gtk::PrintOperation::new(); +- + let print_settings = self.print_operation().print_settings(); + + if let Some(print_settings) = &print_settings { +@@ -812,27 +840,7 @@ impl LpPrint { + } + } + +- print_operation.set_print_settings(print_settings.as_ref()); +- print_operation.set_default_page_setup(Some(&self.print_operation().default_page_setup())); +- +- print_operation.connect_begin_print(move |op, _ctx| { +- op.set_n_pages(1); +- }); +- +- print_operation.connect_draw_page( +- glib::clone!(@weak self as obj => move |_operation, context, _page_nr| { +- obj.draw_page(context); +- }), +- ); +- +- let res = print_operation.run( +- gtk::PrintOperationAction::Print, +- Some(&self.parent_window()), +- ); +- +- if let Err(err) = res { +- log::warn!("Print error: {err}"); +- } ++ self.imp().status.set(Status::Print); + } + + /// Draw PDF for printing +-- +GitLab +