The package rpms/rust-image-roll.git has added or updated architecture specific content in
its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/rust-image-roll.git/commit/?id=91....
Change:
+%ifarch s390x
Thanks.
Full change:
============
commit 91b1863c2aa8b5a6562b2b961f981047f9031661
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Thu Feb 24 12:34:27 2022 -0500
Patch for rust-gtk 0.15 support
diff --git a/0001-updated-gtk-rs-version-added-zooming-with-mouse-scro.patch
b/0001-updated-gtk-rs-version-added-zooming-with-mouse-scro.patch
new file mode 100644
index 0000000..154dc7b
--- /dev/null
+++ b/0001-updated-gtk-rs-version-added-zooming-with-mouse-scro.patch
@@ -0,0 +1,946 @@
+diff --git a/src/app.rs b/src/app.rs
+index 9c200cf..beabab2 100644
+--- a/src/app.rs
++++ b/src/app.rs
+@@ -160,8 +160,12 @@ impl App {
+ self.image_list.clone(),
+ self.selection_coords.clone(),
+ ),
+- Event::PreviewSmaller => action::preview_smaller(&self.sender,
&self.settings),
+- Event::PreviewLarger => action::preview_larger(&self.sender,
&self.settings),
++ Event::PreviewSmaller(value) => {
++ action::preview_smaller(&self.sender, &self.settings, value)
++ }
++ Event::PreviewLarger(value) => {
++ action::preview_larger(&self.sender, &self.settings, value)
++ }
+ Event::PreviewFitScreen => action::preview_fit_screen(&self.sender),
+ Event::NextImage => {
+ action::next_image(&self.sender, self.image_list.clone(), &mut
self.file_list)
+diff --git a/src/file_list.rs b/src/file_list.rs
+index 15bc3fe..bcf7688 100644
+--- a/src/file_list.rs
++++ b/src/file_list.rs
+@@ -41,7 +41,7 @@ impl FileList {
+ )
+ })?;
+ let folder_monitor = current_folder
+- .monitor_directory::<Cancellable>(FileMonitorFlags::NONE, None)
++ .monitor_directory(FileMonitorFlags::NONE,
<Option<&Cancellable>>::None)
+ .ok();
+
+ if folder_monitor.is_none() {
+@@ -69,7 +69,7 @@ impl FileList {
+
+ pub fn refresh(&mut self) -> Result<()> {
+ if let Some(current_folder) = &self.current_folder {
+- if !current_folder.query_exists::<Cancellable>(None) {
++ if
!current_folder.query_exists(<Option<&Cancellable>>::None) {
+ self.file_list = Vec::new();
+ self.current_file = None;
+ self.current_folder = None;
+@@ -163,7 +163,11 @@ impl FileList {
+
+ fn enumerate_files(folder: &gio::File) ->
Result<Vec<gio::FileInfo>> {
+ Ok(folder
+- .enumerate_children::<Cancellable>("standard::*",
FileQueryInfoFlags::NONE, None)?
++ .enumerate_children(
++ "standard::*",
++ FileQueryInfoFlags::NONE,
++ <Option<&Cancellable>>::None,
++ )?
+ .into_iter()
+ .filter_map(|file| file.ok())
+ .filter(|file| file.file_type() == FileType::Regular)
+diff --git a/src/image.rs b/src/image.rs
+index 8dcdcbb..d5cc064 100644
+--- a/src/image.rs
++++ b/src/image.rs
+@@ -286,46 +286,86 @@ impl From<PreviewSize> for String {
+ }
+
+ impl PreviewSize {
+- pub fn smaller(self) -> PreviewSize {
++ pub fn smaller(self) -> Option<PreviewSize> {
+ match self {
+- PreviewSize::BestFit(_, _) => PreviewSize::OriginalSize,
+- PreviewSize::OriginalSize => PreviewSize::Resized(75),
+- PreviewSize::Resized(value) if value == 500 =>
PreviewSize::Resized(200),
+- PreviewSize::Resized(value) if value == 200 =>
PreviewSize::Resized(150),
+- PreviewSize::Resized(value) if value == 150 =>
PreviewSize::Resized(133),
+- PreviewSize::Resized(value) if value == 133 =>
PreviewSize::OriginalSize,
+- PreviewSize::Resized(value) if value == 75 => PreviewSize::Resized(66),
+- PreviewSize::Resized(value) if value == 66 => PreviewSize::Resized(50),
+- PreviewSize::Resized(value) if value == 50 => PreviewSize::Resized(33),
+- PreviewSize::Resized(value) if value == 33 => PreviewSize::Resized(25),
+- PreviewSize::Resized(value) if value == 25 => PreviewSize::Resized(10),
+- PreviewSize::Resized(value) if value == 10 => PreviewSize::Resized(5),
+- PreviewSize::Resized(_) => panic!("Preview size with given scale is
not supported"),
++ PreviewSize::BestFit(_, _) => Some(PreviewSize::OriginalSize),
++ PreviewSize::OriginalSize => Some(PreviewSize::Resized(75)),
++ PreviewSize::Resized(value) if value > 200 =>
Some(PreviewSize::Resized(200)),
++ PreviewSize::Resized(value) if value > 150 =>
Some(PreviewSize::Resized(150)),
++ PreviewSize::Resized(value) if value > 133 =>
Some(PreviewSize::Resized(133)),
++ PreviewSize::Resized(value) if value > 100 =>
Some(PreviewSize::OriginalSize),
++ PreviewSize::Resized(value) if value > 75 =>
Some(PreviewSize::Resized(75)),
++ PreviewSize::Resized(value) if value > 66 =>
Some(PreviewSize::Resized(66)),
++ PreviewSize::Resized(value) if value > 50 =>
Some(PreviewSize::Resized(50)),
++ PreviewSize::Resized(value) if value > 33 =>
Some(PreviewSize::Resized(33)),
++ PreviewSize::Resized(value) if value > 25 =>
Some(PreviewSize::Resized(25)),
++ PreviewSize::Resized(value) if value > 10 =>
Some(PreviewSize::Resized(10)),
++ PreviewSize::Resized(value) if value > 5 =>
Some(PreviewSize::Resized(5)),
++ PreviewSize::Resized(_) => None,
+ }
+ }
+
++ pub fn smaller_by(self, value: u32) -> Option<PreviewSize> {
++ let old_value = match self {
++ PreviewSize::BestFit(_, _) => return Some(PreviewSize::OriginalSize),
++ PreviewSize::OriginalSize => 100,
++ PreviewSize::Resized(value) => value,
++ };
++
++ old_value
++ .checked_sub(value)
++ .filter(|value| value >= &5)
++ .map(|value| {
++ if value == 100 {
++ PreviewSize::OriginalSize
++ } else {
++ PreviewSize::Resized(value)
++ }
++ })
++ }
++
+ pub fn can_be_smaller(&self) -> bool {
+ !matches!(self, PreviewSize::Resized(value) if value <= &5)
+ }
+
+- pub fn larger(self) -> PreviewSize {
++ pub fn larger(self) -> Option<PreviewSize> {
+ match self {
+- PreviewSize::BestFit(_, _) => PreviewSize::OriginalSize,
+- PreviewSize::OriginalSize => PreviewSize::Resized(133),
+- PreviewSize::Resized(value) if value == 5 => PreviewSize::Resized(10),
+- PreviewSize::Resized(value) if value == 10 => PreviewSize::Resized(25),
+- PreviewSize::Resized(value) if value == 25 => PreviewSize::Resized(33),
+- PreviewSize::Resized(value) if value == 33 => PreviewSize::Resized(50),
+- PreviewSize::Resized(value) if value == 50 => PreviewSize::Resized(66),
+- PreviewSize::Resized(value) if value == 66 => PreviewSize::Resized(75),
+- PreviewSize::Resized(value) if value == 75 => PreviewSize::OriginalSize,
+- PreviewSize::Resized(value) if value == 133 =>
PreviewSize::Resized(150),
+- PreviewSize::Resized(value) if value == 150 =>
PreviewSize::Resized(200),
+- PreviewSize::Resized(value) if value == 200 =>
PreviewSize::Resized(500),
+- PreviewSize::Resized(_) => panic!("Preview size with given scale is
not supported"),
++ PreviewSize::BestFit(_, _) => Some(PreviewSize::OriginalSize),
++ PreviewSize::OriginalSize => Some(PreviewSize::Resized(133)),
++ PreviewSize::Resized(value) if value < 10 =>
Some(PreviewSize::Resized(10)),
++ PreviewSize::Resized(value) if value < 25 =>
Some(PreviewSize::Resized(25)),
++ PreviewSize::Resized(value) if value < 33 =>
Some(PreviewSize::Resized(33)),
++ PreviewSize::Resized(value) if value < 50 =>
Some(PreviewSize::Resized(50)),
++ PreviewSize::Resized(value) if value < 66 =>
Some(PreviewSize::Resized(66)),
++ PreviewSize::Resized(value) if value < 75 =>
Some(PreviewSize::Resized(75)),
++ PreviewSize::Resized(value) if value < 100 =>
Some(PreviewSize::OriginalSize),
++ PreviewSize::Resized(value) if value < 133 =>
Some(PreviewSize::Resized(133)),
++ PreviewSize::Resized(value) if value < 150 =>
Some(PreviewSize::Resized(150)),
++ PreviewSize::Resized(value) if value < 200 =>
Some(PreviewSize::Resized(200)),
++ PreviewSize::Resized(value) if value < 500 =>
Some(PreviewSize::Resized(500)),
++ PreviewSize::Resized(_) => None,
+ }
+ }
+
++ pub fn larger_by(self, value: u32) -> Option<PreviewSize> {
++ let old_value = match self {
++ PreviewSize::BestFit(_, _) => return Some(PreviewSize::OriginalSize),
++ PreviewSize::OriginalSize => 100,
++ PreviewSize::Resized(value) => value,
++ };
++
++ old_value
++ .checked_add(value)
++ .filter(|value| value <= &500)
++ .map(|value| {
++ if value == 100 {
++ PreviewSize::OriginalSize
++ } else {
++ PreviewSize::Resized(value)
++ }
++ })
++ }
++
+ pub fn can_be_larger(&self) -> bool {
+ !matches!(self, PreviewSize::Resized(value) if value >= &500)
+ }
+diff --git a/src/image_list.rs b/src/image_list.rs
+index f0cd27b..9afffc9 100644
+--- a/src/image_list.rs
++++ b/src/image_list.rs
+@@ -98,7 +98,7 @@ impl ImageList {
+ .map(|file_name| file_name.to_str())
+ .flatten()
+ .ok_or_else(|| anyhow!("Current image file name is not a valid
name"))?;
+- current_image_file.trash::<Cancellable>(None)?;
++ current_image_file.trash(<Option<&Cancellable>>::None)?;
+ self.images.remove(current_image_path);
+ Ok(current_image_name.to_string())
+ }
+diff --git a/src/resources/cargo-sources.json b/src/resources/cargo-sources.json
+index a4f0388..05b8802 100644
+--- a/src/resources/cargo-sources.json
++++ b/src/resources/cargo-sources.json
+@@ -28,27 +28,27 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/atk/atk-0.14.0.crate",
+- "sha256":
"a83b21d2aa75e464db56225e1bda2dd5993311ba1095acaa8fa03d1ae67026ba",
+- "dest": "cargo/vendor/atk-0.14.0"
++ "url":
"https://static.crates.io/crates/atk/atk-0.15.1.crate",
++ "sha256":
"2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd",
++ "dest": "cargo/vendor/atk-0.15.1"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22a83b21d2aa75e464db56225e1bda2dd5993311ba1095acaa8fa03d1ae67026ba%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/atk-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%222c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/atk-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/atk-sys/atk-sys-0.14.0.crate",
+- "sha256":
"badcf670157c84bb8b1cf6b5f70b650fed78da2033c9eed84c4e49b11cbe83ea",
+- "dest": "cargo/vendor/atk-sys-0.14.0"
++ "url":
"https://static.crates.io/crates/atk-sys/atk-sys-0.15.1.crate",
++ "sha256":
"58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6",
++ "dest": "cargo/vendor/atk-sys-0.15.1"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22badcf670157c84bb8b1cf6b5f70b650fed78da2033c9eed84c4e49b11cbe83ea%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/atk-sys-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%2258aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/atk-sys-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -80,14 +80,14 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/bitflags/bitflags-1.2.1.crate",
+- "sha256":
"cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693",
+- "dest": "cargo/vendor/bitflags-1.2.1"
++ "url":
"https://static.crates.io/crates/bitflags/bitflags-1.3.2.crate",
++ "sha256":
"bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a",
++ "dest": "cargo/vendor/bitflags-1.3.2"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/bitflags-1.2.1",
++ "url":
"data:%7B%22package%22%3A%20%22bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/bitflags-1.3.2",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -106,27 +106,27 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/cairo-rs/cairo-rs-0.14.1.crate",
+- "sha256":
"a408c13bbc04c3337b94194c1a4d04067097439b79dbc1dcbceba299d828b9ea",
+- "dest": "cargo/vendor/cairo-rs-0.14.1"
++ "url":
"https://static.crates.io/crates/cairo-rs/cairo-rs-0.15.1.crate",
++ "sha256":
"b869e97a87170f96762f9f178eae8c461147e722ba21dd8814105bf5716bf14a",
++ "dest": "cargo/vendor/cairo-rs-0.15.1"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22a408c13bbc04c3337b94194c1a4d04067097439b79dbc1dcbceba299d828b9ea%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/cairo-rs-0.14.1",
++ "url":
"data:%7B%22package%22%3A%20%22b869e97a87170f96762f9f178eae8c461147e722ba21dd8814105bf5716bf14a%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/cairo-rs-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/cairo-sys-rs/cairo-sys-rs-0.14.0.crate",
+- "sha256":
"d7c9c3928781e8a017ece15eace05230f04b647457d170d2d9641c94a444ff80",
+- "dest": "cargo/vendor/cairo-sys-rs-0.14.0"
++ "url":
"https://static.crates.io/crates/cairo-sys-rs/cairo-sys-rs-0.15.1.crate",
++ "sha256":
"3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8",
++ "dest": "cargo/vendor/cairo-sys-rs-0.15.1"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22d7c9c3928781e8a017ece15eace05230f04b647457d170d2d9641c94a444ff80%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/cairo-sys-rs-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%223c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/cairo-sys-rs-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -145,14 +145,14 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/cfg-expr/cfg-expr-0.8.1.crate",
+- "sha256":
"b412e83326147c2bb881f8b40edfbf9905b9b8abaebd0e47ca190ba62fda8f0e",
+- "dest": "cargo/vendor/cfg-expr-0.8.1"
++ "url":
"https://static.crates.io/crates/cfg-expr/cfg-expr-0.10.1.crate",
++ "sha256":
"295b6eb918a60a25fec0b23a5e633e74fddbaf7bb04411e65a10c366aca4b5cd",
++ "dest": "cargo/vendor/cfg-expr-0.10.1"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22b412e83326147c2bb881f8b40edfbf9905b9b8abaebd0e47ca190ba62fda8f0e%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/cfg-expr-0.8.1",
++ "url":
"data:%7B%22package%22%3A%20%22295b6eb918a60a25fec0b23a5e633e74fddbaf7bb04411e65a10c366aca4b5cd%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/cfg-expr-0.10.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -288,53 +288,53 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/gdk/gdk-0.14.0.crate",
+- "sha256":
"679e22651cd15888e7acd01767950edca2ee9fcd6421fbf5b3c3b420d4e88bb0",
+- "dest": "cargo/vendor/gdk-0.14.0"
++ "url":
"https://static.crates.io/crates/gdk/gdk-0.15.2.crate",
++ "sha256":
"614258e81ec35ed8770e64a0838f3a47f95b398bc51e724d3b3fa09c1ee0f8d5",
++ "dest": "cargo/vendor/gdk-0.15.2"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22679e22651cd15888e7acd01767950edca2ee9fcd6421fbf5b3c3b420d4e88bb0%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gdk-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%22614258e81ec35ed8770e64a0838f3a47f95b398bc51e724d3b3fa09c1ee0f8d5%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gdk-0.15.2",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/gdk-pixbuf/gdk-pixbuf-0.14.0.crate",
+- "sha256":
"534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f",
+- "dest": "cargo/vendor/gdk-pixbuf-0.14.0"
++ "url":
"https://static.crates.io/crates/gdk-pixbuf/gdk-pixbuf-0.15.4.crate",
++ "sha256":
"73aa2f5de1b45710da90a55863276667dc3a3264aaf6a2aeace62bb015244d49",
++ "dest": "cargo/vendor/gdk-pixbuf-0.15.4"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gdk-pixbuf-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%2273aa2f5de1b45710da90a55863276667dc3a3264aaf6a2aeace62bb015244d49%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gdk-pixbuf-0.15.4",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/gdk-pixbuf-sys/gdk-pixbuf-sys-0.14.0.crate",
+- "sha256":
"f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590",
+- "dest": "cargo/vendor/gdk-pixbuf-sys-0.14.0"
++ "url":
"https://static.crates.io/crates/gdk-pixbuf-sys/gdk-pixbuf-sys-0.15.1.crate",
++ "sha256":
"413424d9818621fa3cfc8a3a915cdb89a7c3c507d56761b4ec83a9a98e587171",
++ "dest": "cargo/vendor/gdk-pixbuf-sys-0.15.1"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gdk-pixbuf-sys-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%22413424d9818621fa3cfc8a3a915cdb89a7c3c507d56761b4ec83a9a98e587171%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gdk-pixbuf-sys-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/gdk-sys/gdk-sys-0.14.0.crate",
+- "sha256":
"0e091b3d3d6696949ac3b3fb3c62090e5bfd7bd6850bef5c3c5ea701de1b1f1e",
+- "dest": "cargo/vendor/gdk-sys-0.14.0"
++ "url":
"https://static.crates.io/crates/gdk-sys/gdk-sys-0.15.1.crate",
++ "sha256":
"32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88",
++ "dest": "cargo/vendor/gdk-sys-0.15.1"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%220e091b3d3d6696949ac3b3fb3c62090e5bfd7bd6850bef5c3c5ea701de1b1f1e%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gdk-sys-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%2232e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gdk-sys-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -353,131 +353,131 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/gio/gio-0.14.0.crate",
+- "sha256":
"86c6823b39d46d22cac2466de261f28d7f049ebc18f7b35296a42c7ed8a88325",
+- "dest": "cargo/vendor/gio-0.14.0"
++ "url":
"https://static.crates.io/crates/gio/gio-0.15.5.crate",
++ "sha256":
"59105fa464928adf56b159c8d980cc11fbfbe414befb904caac5163d383049bf",
++ "dest": "cargo/vendor/gio-0.15.5"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%2286c6823b39d46d22cac2466de261f28d7f049ebc18f7b35296a42c7ed8a88325%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gio-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%2259105fa464928adf56b159c8d980cc11fbfbe414befb904caac5163d383049bf%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gio-0.15.5",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/gio-sys/gio-sys-0.14.0.crate",
+- "sha256":
"c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa",
+- "dest": "cargo/vendor/gio-sys-0.14.0"
++ "url":
"https://static.crates.io/crates/gio-sys/gio-sys-0.15.5.crate",
++ "sha256":
"4f0bc4cfc9ebcdd05cc5057bc51b99c32f8f9bf246274f6a556ffd27279f8fe3",
++ "dest": "cargo/vendor/gio-sys-0.15.5"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gio-sys-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%224f0bc4cfc9ebcdd05cc5057bc51b99c32f8f9bf246274f6a556ffd27279f8fe3%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gio-sys-0.15.5",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/glib/glib-0.14.2.crate",
+- "sha256":
"dbecad7a3a898ee749d491ce2ae0decb0bce9e736f9747bc49159b1cea5d37f4",
+- "dest": "cargo/vendor/glib-0.14.2"
++ "url":
"https://static.crates.io/crates/glib/glib-0.15.5.crate",
++ "sha256":
"41dcfbdb6cc6c02aee163339465d8a40d6f3f64c3a43f729a4195f0e153338b7",
++ "dest": "cargo/vendor/glib-0.15.5"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22dbecad7a3a898ee749d491ce2ae0decb0bce9e736f9747bc49159b1cea5d37f4%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/glib-0.14.2",
++ "url":
"data:%7B%22package%22%3A%20%2241dcfbdb6cc6c02aee163339465d8a40d6f3f64c3a43f729a4195f0e153338b7%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/glib-0.15.5",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/glib-macros/glib-macros-0.14.1.crate",
+- "sha256":
"2aad66361f66796bfc73f530c51ef123970eb895ffba991a234fcf7bea89e518",
+- "dest": "cargo/vendor/glib-macros-0.14.1"
++ "url":
"https://static.crates.io/crates/glib-macros/glib-macros-0.15.3.crate",
++ "sha256":
"e58b262ff65ef771003873cea8c10e0fe854f1c508d48d62a4111a1ff163f7d1",
++ "dest": "cargo/vendor/glib-macros-0.15.3"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%222aad66361f66796bfc73f530c51ef123970eb895ffba991a234fcf7bea89e518%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/glib-macros-0.14.1",
++ "url":
"data:%7B%22package%22%3A%20%22e58b262ff65ef771003873cea8c10e0fe854f1c508d48d62a4111a1ff163f7d1%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/glib-macros-0.15.3",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/glib-sys/glib-sys-0.14.0.crate",
+- "sha256":
"1c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae",
+- "dest": "cargo/vendor/glib-sys-0.14.0"
++ "url":
"https://static.crates.io/crates/glib-sys/glib-sys-0.15.5.crate",
++ "sha256":
"fa1d4e1a63d8574541e5b92931e4e669ddc87ffa85d58e84e631dba13ad2e10c",
++ "dest": "cargo/vendor/glib-sys-0.15.5"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%221c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/glib-sys-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%22fa1d4e1a63d8574541e5b92931e4e669ddc87ffa85d58e84e631dba13ad2e10c%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/glib-sys-0.15.5",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/gobject-sys/gobject-sys-0.14.0.crate",
+- "sha256":
"aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5",
+- "dest": "cargo/vendor/gobject-sys-0.14.0"
++ "url":
"https://static.crates.io/crates/gobject-sys/gobject-sys-0.15.5.crate",
++ "sha256":
"df6859463843c20cf3837e3a9069b6ab2051aeeadf4c899d33344f4aea83189a",
++ "dest": "cargo/vendor/gobject-sys-0.15.5"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gobject-sys-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%22df6859463843c20cf3837e3a9069b6ab2051aeeadf4c899d33344f4aea83189a%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gobject-sys-0.15.5",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/gtk/gtk-0.14.3.crate",
+- "sha256":
"2eb51122dd3317e9327ec1e4faa151d1fa0d95664cd8fb8dcfacf4d4d29ac70c",
+- "dest": "cargo/vendor/gtk-0.14.3"
++ "url":
"https://static.crates.io/crates/gtk/gtk-0.15.3.crate",
++ "sha256":
"c7978eaec05bea63947c801d29a21372f2ed39aec0bf56bf7725d3599094675e",
++ "dest": "cargo/vendor/gtk-0.15.3"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%222eb51122dd3317e9327ec1e4faa151d1fa0d95664cd8fb8dcfacf4d4d29ac70c%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gtk-0.14.3",
++ "url":
"data:%7B%22package%22%3A%20%22c7978eaec05bea63947c801d29a21372f2ed39aec0bf56bf7725d3599094675e%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gtk-0.15.3",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/gtk-sys/gtk-sys-0.14.0.crate",
+- "sha256":
"8c14c8d3da0545785a7c5a120345b3abb534010fb8ae0f2ef3f47c027fba303e",
+- "dest": "cargo/vendor/gtk-sys-0.14.0"
++ "url":
"https://static.crates.io/crates/gtk-sys/gtk-sys-0.15.3.crate",
++ "sha256":
"d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84",
++ "dest": "cargo/vendor/gtk-sys-0.15.3"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%228c14c8d3da0545785a7c5a120345b3abb534010fb8ae0f2ef3f47c027fba303e%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gtk-sys-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%22d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gtk-sys-0.15.3",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/gtk3-macros/gtk3-macros-0.14.0.crate",
+- "sha256":
"21de1da96dc117443fb03c2e270b2d34b7de98d0a79a19bbb689476173745b79",
+- "dest": "cargo/vendor/gtk3-macros-0.14.0"
++ "url":
"https://static.crates.io/crates/gtk3-macros/gtk3-macros-0.15.1.crate",
++ "sha256":
"8c891188af69e77a1e8a0b1746fbd03b9b396e7d34d518c5331b15950259f541",
++ "dest": "cargo/vendor/gtk3-macros-0.15.1"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%2221de1da96dc117443fb03c2e270b2d34b7de98d0a79a19bbb689476173745b79%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/gtk3-macros-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%228c891188af69e77a1e8a0b1746fbd03b9b396e7d34d518c5331b15950259f541%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/gtk3-macros-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/heck/heck-0.3.3.crate",
+- "sha256":
"6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c",
+- "dest": "cargo/vendor/heck-0.3.3"
++ "url":
"https://static.crates.io/crates/heck/heck-0.4.0.crate",
++ "sha256":
"2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9",
++ "dest": "cargo/vendor/heck-0.4.0"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%226d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/heck-0.3.3",
++ "url":
"data:%7B%22package%22%3A%20%222540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/heck-0.4.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -600,27 +600,27 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/pango/pango-0.14.0.crate",
+- "sha256":
"415823a4fb9f1789785cd6e2d2413816f2ecff92380382969aaca9c400e13a19",
+- "dest": "cargo/vendor/pango-0.14.0"
++ "url":
"https://static.crates.io/crates/pango/pango-0.15.2.crate",
++ "sha256":
"79211eff430c29cc38c69e0ab54bc78fa1568121ca9737707eee7f92a8417a94",
++ "dest": "cargo/vendor/pango-0.15.2"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22415823a4fb9f1789785cd6e2d2413816f2ecff92380382969aaca9c400e13a19%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/pango-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%2279211eff430c29cc38c69e0ab54bc78fa1568121ca9737707eee7f92a8417a94%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/pango-0.15.2",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/pango-sys/pango-sys-0.14.0.crate",
+- "sha256":
"2367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe",
+- "dest": "cargo/vendor/pango-sys-0.14.0"
++ "url":
"https://static.crates.io/crates/pango-sys/pango-sys-0.15.1.crate",
++ "sha256":
"7022c2fb88cd2d9d55e1a708a8c53a3ae8678234c4a54bf623400aeb7f31fac2",
++ "dest": "cargo/vendor/pango-sys-0.15.1"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%222367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/pango-sys-0.14.0",
++ "url":
"data:%7B%22package%22%3A%20%227022c2fb88cd2d9d55e1a708a8c53a3ae8678234c4a54bf623400aeb7f31fac2%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/pango-sys-0.15.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -909,32 +909,6 @@
+ "dest": "cargo/vendor/smallvec-1.6.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+- {
+- "type": "archive",
+- "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/strum/strum-0.21.0.crate",
+- "sha256":
"aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2",
+- "dest": "cargo/vendor/strum-0.21.0"
+- },
+- {
+- "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/strum-0.21.0",
+- "dest-filename": ".cargo-checksum.json"
+- },
+- {
+- "type": "archive",
+- "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/strum_macros/strum_macros-0.21.1.crate",
+- "sha256":
"d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec",
+- "dest": "cargo/vendor/strum_macros-0.21.1"
+- },
+- {
+- "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/strum_macros-0.21.1",
+- "dest-filename": ".cargo-checksum.json"
+- },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+@@ -951,14 +925,14 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/system-deps/system-deps-3.2.0.crate",
+- "sha256":
"480c269f870722b3b08d2f13053ce0c2ab722839f472863c3e2d61ff3a1c2fa6",
+- "dest": "cargo/vendor/system-deps-3.2.0"
++ "url":
"https://static.crates.io/crates/system-deps/system-deps-6.0.2.crate",
++ "sha256":
"a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709",
++ "dest": "cargo/vendor/system-deps-6.0.2"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%22480c269f870722b3b08d2f13053ce0c2ab722839f472863c3e2d61ff3a1c2fa6%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/system-deps-3.2.0",
++ "url":
"data:%7B%22package%22%3A%20%22a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/system-deps-6.0.2",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+@@ -1026,19 +1000,6 @@
+ "dest": "cargo/vendor/ucd-trie-0.1.3",
+ "dest-filename": ".cargo-checksum.json"
+ },
+- {
+- "type": "archive",
+- "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/unicode-segmentation/unicode-segmentation-1.8.0.crate",
+- "sha256":
"8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b",
+- "dest": "cargo/vendor/unicode-segmentation-1.8.0"
+- },
+- {
+- "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%228895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/unicode-segmentation-1.8.0",
+- "dest-filename": ".cargo-checksum.json"
+- },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+@@ -1068,14 +1029,14 @@
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+- "url":
"https://static.crates.io/crates/version-compare/version-compare-0.0.11.crate",
+- "sha256":
"1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b",
+- "dest": "cargo/vendor/version-compare-0.0.11"
++ "url":
"https://static.crates.io/crates/version-compare/version-compare-0.1.0.crate",
++ "sha256":
"fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73",
++ "dest": "cargo/vendor/version-compare-0.1.0"
+ },
+ {
+ "type": "file",
+- "url":
"data:%7B%22package%22%3A%20%221c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b%22%2C%20%22files%22%3A%20%7B%7D%7D",
+- "dest": "cargo/vendor/version-compare-0.0.11",
++ "url":
"data:%7B%22package%22%3A%20%22fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73%22%2C%20%22files%22%3A%20%7B%7D%7D",
++ "dest": "cargo/vendor/version-compare-0.1.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+diff --git a/src/ui/action.rs b/src/ui/action.rs
+index 56708a4..54b21c9 100644
+--- a/src/ui/action.rs
++++ b/src/ui/action.rs
+@@ -146,7 +146,7 @@ pub fn image_viewport_resize(
+ allocation: gdk::Rectangle,
+ ) {
+ if let PreviewSize::BestFit(_, _) = settings.scale() {
+- let new_scale = PreviewSize::BestFit(allocation.width as u32, allocation.height
as u32);
++ let new_scale = PreviewSize::BestFit(allocation.width() as u32,
allocation.height() as u32);
+ settings.set_scale(new_scale);
+ post_event(sender, Event::RefreshPreview(new_scale));
+ }
+@@ -177,22 +177,32 @@ pub fn change_preview_size(
+ if let PreviewSize::BestFit(_, _) = preview_size {
+ let viewport_allocation = widgets.image_viewport().allocation();
+ preview_size = PreviewSize::BestFit(
+- viewport_allocation.width as u32,
+- viewport_allocation.height as u32,
++ viewport_allocation.width() as u32,
++ viewport_allocation.height() as u32,
+ );
+ }
+ settings.set_scale(preview_size);
+ post_event(sender, Event::RefreshPreview(preview_size));
+ }
+
+-pub fn preview_smaller(sender: &Sender<Event>, settings: &Settings) {
+- let new_scale = settings.scale().smaller();
+- post_event(sender, Event::ChangePreviewSize(new_scale));
++pub fn preview_smaller(sender: &Sender<Event>, settings: &Settings, value:
Option<u32>) {
++ let new_scale = match value {
++ None => settings.scale().smaller(),
++ Some(value) => settings.scale().smaller_by(value),
++ };
++ if let Some(new_scale) = new_scale {
++ post_event(sender, Event::ChangePreviewSize(new_scale));
++ }
+ }
+
+-pub fn preview_larger(sender: &Sender<Event>, settings: &Settings) {
+- let new_scale = settings.scale().larger();
+- post_event(sender, Event::ChangePreviewSize(new_scale));
++pub fn preview_larger(sender: &Sender<Event>, settings: &Settings, value:
Option<u32>) {
++ let new_scale = match value {
++ None => settings.scale().larger(),
++ Some(value) => settings.scale().larger_by(value),
++ };
++ if let Some(new_scale) = new_scale {
++ post_event(sender, Event::ChangePreviewSize(new_scale));
++ }
+ }
+
+ pub fn preview_fit_screen(sender: &Sender<Event>) {
+@@ -226,8 +236,8 @@ pub fn start_selection(
+ let (position_x, position_y) = position;
+ let event_box_allocation = widgets.image_event_box().allocation();
+ let (image_coords_position_x, image_coords_position_y) = (
+- position_x as i32 - ((event_box_allocation.width - image_width as i32) /
2),
+- position_y as i32 - ((event_box_allocation.height - image_height as i32) /
2),
++ position_x as i32 - ((event_box_allocation.width() - image_width as i32) /
2),
++ position_y as i32 - ((event_box_allocation.height() - image_height as i32) /
2),
+ );
+ if image_coords_position_x >= 0
+ && image_coords_position_x < image_width as i32
+@@ -252,8 +262,8 @@ pub fn drag_selection(
+ let (position_x, position_y) = position;
+ let event_box_allocation = widgets.image_event_box().allocation();
+ let (image_coords_position_x, image_coords_position_y) = (
+- position_x as i32 - ((event_box_allocation.width - image_width as i32) /
2),
+- position_y as i32 - ((event_box_allocation.height - image_height as i32)
/ 2),
++ position_x as i32 - ((event_box_allocation.width() - image_width as i32)
/ 2),
++ position_y as i32 - ((event_box_allocation.height() - image_height as
i32) / 2),
+ );
+ if image_coords_position_x >= 0
+ && image_coords_position_x < image_width as i32
+@@ -283,12 +293,13 @@ pub fn end_selection(
+ let (image_width, image_height) =
current_image.preview_image_buffer_size().unwrap();
+ let event_box_allocation = widgets.image_event_box().allocation();
+ let (image_coords_start_position_x, image_coords_start_position_y) = (
+- start_position_x as i32 - ((event_box_allocation.width - image_width as
i32) / 2),
+- start_position_y as i32 - ((event_box_allocation.height - image_height
as i32) / 2),
++ start_position_x as i32 - ((event_box_allocation.width() - image_width
as i32) / 2),
++ start_position_y as i32
++ - ((event_box_allocation.height() - image_height as i32) / 2),
+ );
+ let (image_coords_end_position_x, image_coords_end_position_y) = (
+- end_position_x as i32 - ((event_box_allocation.width - image_width as
i32) / 2),
+- end_position_y as i32 - ((event_box_allocation.height - image_height as
i32) / 2),
++ end_position_x as i32 - ((event_box_allocation.width() - image_width as
i32) / 2),
++ end_position_y as i32 - ((event_box_allocation.height() - image_height
as i32) / 2),
+ );
+
+ let crop_operation = ImageOperation::Crop(
+diff --git a/src/ui/event.rs b/src/ui/event.rs
+index d428149..ad4a653 100644
+--- a/src/ui/event.rs
++++ b/src/ui/event.rs
+@@ -1,5 +1,5 @@
+ use gtk::{
+- gdk::{self, Rectangle},
++ gdk::{self, Rectangle, ScrollDirection},
+ gdk_pixbuf::PixbufRotation,
+ gio::{self, SimpleAction},
+ glib::{self, Sender},
+@@ -7,7 +7,7 @@ use gtk::{
+ ActionMapExt, ButtonExt, FileChooserExt, GdkContextExt, InfoBarExt,
NativeDialogExt,
+ PopoverExt, SpinButtonExt, ToggleButtonExt, WidgetExt, WidgetExtManual,
+ },
+- MessageType, SpinButtonSignals,
++ MessageType, SpinButtonSignals, Window,
+ };
+ use std::{
+ cell::{Cell, RefCell},
+@@ -37,8 +37,8 @@ pub enum Event {
+ SaveCurrentImage(Option<PathBuf>),
+ DeleteCurrentImage,
+ EndSelection,
+- PreviewSmaller,
+- PreviewLarger,
++ PreviewSmaller(Option<u32>),
++ PreviewLarger(Option<u32>),
+ PreviewFitScreen,
+ NextImage,
+ PreviousImage,
+@@ -99,7 +99,8 @@ pub fn connect_events(
+ connect_info_bar_response(widgets.clone());
+ connect_window_resized(widgets.clone(), settings);
+ connect_toggle_fullscreen(widgets.clone(), sender.clone());
+- connect_quit(application, sender);
++ connect_quit(application, sender.clone());
++ connect_image_scrolled_window_scroll_event(widgets.clone(), sender);
+
+ widgets.window().show_all();
+ }
+@@ -112,7 +113,7 @@ fn connect_open_menu_button_clicked(widgets: Widgets, sender:
Sender<Event>) {
+ widgets.popover_menu().popdown();
+ let file_chooser = gtk::FileChooserNative::new(
+ Some("Open file"),
+- gtk::NONE_WINDOW,
++ <Option<&Window>>::None,
+ gtk::FileChooserAction::Open,
+ None,
+ None,
+@@ -173,13 +174,13 @@ fn connect_image_viewport_size_allocate(widgets: Widgets, sender:
Sender<Event>)
+
+ fn connect_preview_smaller_button_clicked(widgets: Widgets, sender: Sender<Event>)
{
+ widgets.preview_smaller_button().connect_clicked(move |_| {
+- post_event(&sender, Event::PreviewSmaller);
++ post_event(&sender, Event::PreviewSmaller(None));
+ });
+ }
+
+ fn connect_preview_larger_button_clicked(widgets: Widgets, sender: Sender<Event>)
{
+ widgets.preview_larger_button().connect_clicked(move |_| {
+- post_event(&sender, Event::PreviewLarger);
++ post_event(&sender, Event::PreviewLarger(None));
+ });
+ }
+
+@@ -263,9 +264,9 @@ fn connect_image_widget_draw(
+ let image_buffer = current_image.preview_image_buffer().unwrap();
+ cairo_context.set_source_pixbuf(
+ image_buffer,
+- (image_widget.allocation().width as f64 - image_buffer.width()
as f64)
++ (image_widget.allocation().width() as f64 - image_buffer.width()
as f64)
+ / 2.0,
+- (image_widget.allocation().height as f64 - image_buffer.height()
as f64)
++ (image_widget.allocation().height() as f64 -
image_buffer.height() as f64)
+ / 2.0,
+ );
+ if let Err(error) = cairo_context.paint() {
+@@ -360,7 +361,7 @@ fn connect_save_as_menu_button_clicked(
+ widgets.popover_menu().popdown();
+ let file_chooser = gtk::FileChooserNative::new(
+ Some("Save as..."),
+- gtk::NONE_WINDOW,
++ <Option<&Window>>::None,
+ gtk::FileChooserAction::Save,
+ None,
+ None,
+@@ -441,7 +442,7 @@ fn connect_window_resized(widgets: Widgets, settings: Settings) {
+ widgets
+ .window()
+ .connect_size_allocate(move |_, allocation| {
+- settings.set_window_size((allocation.width as u32, allocation.height as
u32));
++ settings.set_window_size((allocation.width() as u32, allocation.height() as
u32));
+ });
+ }
+
+@@ -460,3 +461,18 @@ fn connect_quit(application: gtk::Application, sender:
Sender<Event>) {
+ });
+ application.add_action(&action_quit);
+ }
++
++fn connect_image_scrolled_window_scroll_event(widgets: Widgets, sender:
Sender<Event>) {
++ widgets
++ .image_scrolled_window()
++ .connect_scroll_event(move |_, scroll_event| {
++ if scroll_event.direction() == ScrollDirection::Up || scroll_event.delta().1
< 0.0 {
++ post_event(&sender, Event::PreviewLarger(Some(5)));
++ }
++ if scroll_event.direction() == ScrollDirection::Down ||
scroll_event.delta().1 > 0.0 {
++ post_event(&sender, Event::PreviewSmaller(Some(5)));
++ }
++
++ gtk::Inhibit(true)
++ });
++}
+diff --git a/src/ui/widgets.rs b/src/ui/widgets.rs
+index acc67b5..05b92b3 100644
+--- a/src/ui/widgets.rs
++++ b/src/ui/widgets.rs
+@@ -13,6 +13,7 @@ pub struct Widgets {
+ previous_button: gtk::Button,
+ preview_smaller_button: gtk::Button,
+ preview_larger_button: gtk::Button,
++ image_scrolled_window: gtk::ScrolledWindow,
+ image_viewport: gtk::Viewport,
+ preview_size_label: gtk::Label,
+ image_event_box: gtk::EventBox,
+@@ -68,6 +69,10 @@ impl Widgets {
+ .object("preview_larger_button")
+ .expect("Couldn't get preview_larger_button");
+
++ let image_scrolled_window: gtk::ScrolledWindow = builder
++ .object("image_scrolled_window")
++ .expect("Couldn't get image_scrolled_window");
++
+ let image_viewport: gtk::Viewport = builder
+ .object("image_viewport")
+ .expect("Couldn't get image_viewport");
+@@ -156,6 +161,7 @@ impl Widgets {
+ previous_button,
+ preview_smaller_button,
+ preview_larger_button,
++ image_scrolled_window,
+ image_viewport,
+ preview_size_label,
+ image_event_box,
+@@ -318,4 +324,9 @@ impl Widgets {
+ pub fn preview_size_label(&self) -> >k::Label {
+ &self.preview_size_label
+ }
++
++ /// Get a reference to the widgets's image scrolled window.
++ pub fn image_scrolled_window(&self) -> >k::ScrolledWindow {
++ &self.image_scrolled_window
++ }
+ }
+--
+2.35.1
+
diff --git a/image-roll-fix-metadata.diff b/image-roll-fix-metadata.diff
index f564d33..b6a6f8e 100644
--- a/image-roll-fix-metadata.diff
+++ b/image-roll-fix-metadata.diff
@@ -1,11 +1,18 @@
--- image-roll-1.5.0/Cargo.toml 1970-01-01T00:00:01+00:00
-+++ image-roll-1.5.0/Cargo.toml 2022-02-24T07:46:47.269285+00:00
-@@ -39,7 +39,7 @@
++++ image-roll-1.5.0/Cargo.toml 2022-02-24T17:15:37.591701+00:00
+@@ -33,13 +33,13 @@
+ version = "0.9.0"
+
+ [dependencies.gtk]
+-version = "0.14.3"
++version = "0.15"
+ features = ["v3_22_29"]
+
[dependencies.log]
version = "0.4.14"
[dev-dependencies.infer]
-version = "0.6.0"
-+version = "0.7.0"
++version = "0.7"
[dev-dependencies.itertools]
version = "0.10.3"
diff --git a/rust-image-roll.spec b/rust-image-roll.spec
index e92f358..ddb02fd 100644
--- a/rust-image-roll.spec
+++ b/rust-image-roll.spec
@@ -1,5 +1,11 @@
# Generated by rust2rpm 20
+# Deactivate test on s390x due to endianess problem
+#
https://github.com/weclaw1/image-roll/issues/40
+%ifarch s390x
+%bcond_with check
+%else
%bcond_without check
+%endif
%global crate image-roll
@@ -13,9 +19,12 @@ License: MIT and CC0
URL:
https://crates.io/crates/image-roll
Source: %{crates_source}
# Initial patched metadata
-# * Update infer to version 0.7.0
-#
https://github.com/weclaw1/image-roll/pull/39
+# * Update infer to version 0.7
+# * Update gtk to version 0.15
+# *
https://github.com/weclaw1/image-roll/pull/39
Patch0: image-roll-fix-metadata.diff
+# * Backport gtk version 0.15 support
+Patch1: 0001-updated-gtk-rs-version-added-zooming-with-mouse-scro.patch
ExclusiveArch: %{rust_arches}
commit fbfe6a6dba533af54728594cef6ebc93bf3c68d9
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Thu Feb 24 11:54:05 2022 -0500
Revert "Update to version 1.6.0; Fixes RHBZ#2049188"
This reverts commit 0c376fe9462d42541b59f8efb5b167c06d95092d.
diff --git a/image-roll-fix-metadata.diff b/image-roll-fix-metadata.diff
index 80c4f92..f564d33 100644
--- a/image-roll-fix-metadata.diff
+++ b/image-roll-fix-metadata.diff
@@ -1,6 +1,6 @@
---- image-roll-1.6.0/Cargo.toml 1970-01-01T00:00:01+00:00
-+++ image-roll-1.6.0/Cargo.toml 2022-02-24T08:09:57.607803+00:00
-@@ -42,7 +42,7 @@
+--- image-roll-1.5.0/Cargo.toml 1970-01-01T00:00:01+00:00
++++ image-roll-1.5.0/Cargo.toml 2022-02-24T07:46:47.269285+00:00
+@@ -39,7 +39,7 @@
[dependencies.log]
version = "0.4.14"
[dev-dependencies.infer]
diff --git a/rust-image-roll.spec b/rust-image-roll.spec
index 5b3c13d..e92f358 100644
--- a/rust-image-roll.spec
+++ b/rust-image-roll.spec
@@ -4,7 +4,7 @@
%global crate image-roll
Name: rust-%{crate}
-Version: 1.6.0
+Version: 1.5.0
Release: %autorelease
Summary: Image Roll is a simple and fast GTK image viewer
commit 814f9c017dff5266525c2c147e8271a0dcd0c495
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Thu Feb 24 11:53:38 2022 -0500
Revert "Update source"
This reverts commit ed69ba2630c09f18a41ff5b23ae27ba9e556c051.
diff --git a/.gitignore b/.gitignore
index eed9bec..68493a5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,4 +5,3 @@
/image-roll-1.4.0.crate
/image-roll-1.4.1.crate
/image-roll-1.5.0.crate
-/image-roll-1.6.0.crate
diff --git a/sources b/sources
index 8a28b0e..eff4917 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (image-roll-1.6.0.crate) =
2078ab130956527f494ee86f89834c7e74cceac7a1cc7cdf47edbdf097983606d99d654c107c6211665a40f869824a87730a43638a5b584d756d35f205fd90f5
+SHA512 (image-roll-1.5.0.crate) =
08e0af7f8e3a04510b3b9b72b81410d6985b633963aa60c9dcdcf8d560e2ea6688af80620d5dcf5b88b51a40cad7e21f7453a961d5a29c42e4f01749faa6d2fc
commit ed69ba2630c09f18a41ff5b23ae27ba9e556c051
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Thu Feb 24 03:38:48 2022 -0500
Update source
diff --git a/.gitignore b/.gitignore
index 68493a5..eed9bec 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
/image-roll-1.4.0.crate
/image-roll-1.4.1.crate
/image-roll-1.5.0.crate
+/image-roll-1.6.0.crate
diff --git a/sources b/sources
index eff4917..8a28b0e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (image-roll-1.5.0.crate) =
08e0af7f8e3a04510b3b9b72b81410d6985b633963aa60c9dcdcf8d560e2ea6688af80620d5dcf5b88b51a40cad7e21f7453a961d5a29c42e4f01749faa6d2fc
+SHA512 (image-roll-1.6.0.crate) =
2078ab130956527f494ee86f89834c7e74cceac7a1cc7cdf47edbdf097983606d99d654c107c6211665a40f869824a87730a43638a5b584d756d35f205fd90f5
commit 0c376fe9462d42541b59f8efb5b167c06d95092d
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Thu Feb 24 03:32:57 2022 -0500
Update to version 1.6.0; Fixes RHBZ#2049188
diff --git a/image-roll-fix-metadata.diff b/image-roll-fix-metadata.diff
index f564d33..80c4f92 100644
--- a/image-roll-fix-metadata.diff
+++ b/image-roll-fix-metadata.diff
@@ -1,6 +1,6 @@
---- image-roll-1.5.0/Cargo.toml 1970-01-01T00:00:01+00:00
-+++ image-roll-1.5.0/Cargo.toml 2022-02-24T07:46:47.269285+00:00
-@@ -39,7 +39,7 @@
+--- image-roll-1.6.0/Cargo.toml 1970-01-01T00:00:01+00:00
++++ image-roll-1.6.0/Cargo.toml 2022-02-24T08:09:57.607803+00:00
+@@ -42,7 +42,7 @@
[dependencies.log]
version = "0.4.14"
[dev-dependencies.infer]
diff --git a/rust-image-roll.spec b/rust-image-roll.spec
index e92f358..5b3c13d 100644
--- a/rust-image-roll.spec
+++ b/rust-image-roll.spec
@@ -4,7 +4,7 @@
%global crate image-roll
Name: rust-%{crate}
-Version: 1.5.0
+Version: 1.6.0
Release: %autorelease
Summary: Image Roll is a simple and fast GTK image viewer
commit 96eb64051fd2b5ea1613935237dae03eb090aa89
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Thu Feb 24 03:08:14 2022 -0500
Add patch to update infer to version 0.7.0
diff --git a/image-roll-fix-metadata.diff b/image-roll-fix-metadata.diff
new file mode 100644
index 0000000..f564d33
--- /dev/null
+++ b/image-roll-fix-metadata.diff
@@ -0,0 +1,11 @@
+--- image-roll-1.5.0/Cargo.toml 1970-01-01T00:00:01+00:00
++++ image-roll-1.5.0/Cargo.toml 2022-02-24T07:46:47.269285+00:00
+@@ -39,7 +39,7 @@
+ [dependencies.log]
+ version = "0.4.14"
+ [dev-dependencies.infer]
+-version = "0.6.0"
++version = "0.7.0"
+
+ [dev-dependencies.itertools]
+ version = "0.10.3"
diff --git a/rust-image-roll.spec b/rust-image-roll.spec
index 24f4f22..e92f358 100644
--- a/rust-image-roll.spec
+++ b/rust-image-roll.spec
@@ -12,6 +12,10 @@ Summary: Image Roll is a simple and fast GTK image viewer
License: MIT and CC0
URL:
https://crates.io/crates/image-roll
Source: %{crates_source}
+# Initial patched metadata
+# * Update infer to version 0.7.0
+#
https://github.com/weclaw1/image-roll/pull/39
+Patch0: image-roll-fix-metadata.diff
ExclusiveArch: %{rust_arches}
commit 9956b1798b30048523f5193161d48aa5d44637c0
Author: Rémi Lauzier <remilauzier(a)protonmail.com>
Date: Mon Feb 14 18:37:48 2022 -0500
Update to version 1.5.0; Fixes RHBZ#2049188
diff --git a/.gitignore b/.gitignore
index 3534499..68493a5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/image-roll-1.3.1.crate
/image-roll-1.4.0.crate
/image-roll-1.4.1.crate
+/image-roll-1.5.0.crate
diff --git a/rust-image-roll.spec b/rust-image-roll.spec
index a81ae28..24f4f22 100644
--- a/rust-image-roll.spec
+++ b/rust-image-roll.spec
@@ -4,7 +4,7 @@
%global crate image-roll
Name: rust-%{crate}
-Version: 1.4.1
+Version: 1.5.0
Release: %autorelease
Summary: Image Roll is a simple and fast GTK image viewer
diff --git a/sources b/sources
index 6b4eee0..eff4917 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (image-roll-1.4.1.crate) =
78a5a318eacdfc9f7db3ff01a002bff4d7cbb22070519e6d0e7d471744134dcbebb0338db7b3f0d2c525c81dff38af0fee8bc881f4b49cb5e73a441c0f99bde6
+SHA512 (image-roll-1.5.0.crate) =
08e0af7f8e3a04510b3b9b72b81410d6985b633963aa60c9dcdcf8d560e2ea6688af80620d5dcf5b88b51a40cad7e21f7453a961d5a29c42e4f01749faa6d2fc