diff --git a/data/gtk/image_page.ui b/data/gtk/image_page.ui
index 815b2494860d6f37def7f31d9b8bbc2c5938e49a..7053eaa44b12cfb6592d61dd5f04c43ddee933af 100644
--- a/data/gtk/image_page.ui
+++ b/data/gtk/image_page.ui
@@ -68,8 +68,8 @@
win.rotate-image
-->
-
- _Set as Wallpaper
- win.set-wallpaper
+ _Set as Background…
+ win.set-background
diff --git a/data/gtk/window.ui b/data/gtk/window.ui
index a1eeb1cf0ccc4191f8116e0a5a8fdb47d0509072..f1aa043646ee40a5f23b0289870eae3c68511b85 100644
--- a/data/gtk/window.ui
+++ b/data/gtk/window.ui
@@ -111,6 +111,10 @@
_New Window
app.new-window
+ -
+ _Open…
+ win.open
+
-
@@ -130,8 +134,8 @@
win.rotate-image
-->
-
- _Set as Wallpaper
- win.set-wallpaper
+ _Set as Background…
+ win.set-background
diff --git a/src/widgets/image_view.rs b/src/widgets/image_view.rs
index 49da4dc81606f381f7708cc8ae5fffd2a13c878e..8fb4d6edf419bdbfaed24f3a3f7838470e98c268 100644
--- a/src/widgets/image_view.rs
+++ b/src/widgets/image_view.rs
@@ -27,6 +27,8 @@ use gtk::CompositeTemplate;
use anyhow::{bail, Context};
use ashpd::desktop::wallpaper;
+use ashpd::desktop::ResponseError;
+use ashpd::Error;
use ashpd::WindowIdentifier;
use once_cell::sync::Lazy;
use std::cell::{Cell, RefCell};
@@ -360,33 +362,31 @@ impl LpImageView {
}
}
- pub fn set_wallpaper(&self) -> anyhow::Result<()> {
- let wallpaper = self.uri().context("No URI for current file")?;
+ pub fn set_background(&self) -> anyhow::Result<()> {
+ let background = self.uri().context("No URI for current file")?;
spawn!(clone!(@weak self as view => async move {
let id = WindowIdentifier::from_native(
&view.native().expect("View should have a GtkNative"),
)
.await;
- let status = match wallpaper::set_from_uri(
+ let _ = match wallpaper::set_from_uri(
&id,
- &wallpaper,
+ &background,
true,
wallpaper::SetOn::Background,
)
.await {
- Ok(_) => i18n("Set as wallpaper."),
- Err(_) => i18n("Could not set wallpaper."),
- };
-
- view.activate_action(
- "win.show-toast",
// We use `1` here because we can't pass enums directly as GVariants,
// so we need to use the C int value of the enum.
// `TOAST_PRIORITY_NORMAL = 0`, and `TOAST_PRIORITY_HIGH = 1`
- Some(&(status, 1).to_variant()),
- )
- .unwrap();
+ Ok(_) => view.activate_action("win.show-toast", Some(&(i18n("Set as background."), 1).to_variant())).unwrap(),
+ Err(err) => {
+ if !matches!(err, Error::Response(ResponseError::Cancelled)) {
+ view.activate_action("win.show-toast", Some(&(i18n("Could not set background."), 1).to_variant())).unwrap();
+ }
+ },
+ };
}));
Ok(())
diff --git a/src/window.rs b/src/window.rs
index 18e7e20fa0a5e21a8210ad93491d4253019be23b..25602a043cfbaca679043c1e3920cb99f2d32b05 100644
--- a/src/window.rs
+++ b/src/window.rs
@@ -102,8 +102,8 @@ mod imp {
win.open_with();
});
- klass.install_action("win.set-wallpaper", None, move |win, _, _| {
- win.set_wallpaper();
+ klass.install_action("win.set-background", None, move |win, _, _| {
+ win.set_background();
});
klass.install_action("win.print", None, move |win, _, _| {
@@ -274,11 +274,11 @@ impl LpWindow {
}
}
- fn set_wallpaper(&self) {
+ fn set_background(&self) {
let imp = self.imp();
- if let Err(e) = imp.image_view.set_wallpaper() {
- log::error!("Failed to set wallpaper: {}", e);
+ if let Err(e) = imp.image_view.set_background() {
+ log::error!("Failed to set background: {}", e);
}
}
@@ -329,7 +329,7 @@ impl LpWindow {
pub fn set_actions_enabled(&self, enabled: bool) {
self.action_set_enabled("win.open-with", enabled);
- self.action_set_enabled("win.set-wallpaper", enabled);
+ self.action_set_enabled("win.set-background", enabled);
self.action_set_enabled("win.toggle-fullscreen", enabled);
self.action_set_enabled("win.print", enabled);
self.action_set_enabled("win.copy", enabled);