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);