general: Use spawn! less
Because widgets can install async actions, we can simply turn our callbacks into async functions.
This commit is contained in:
parent
6e632e7281
commit
7b7435f50a
2 changed files with 30 additions and 35 deletions
|
|
@ -534,42 +534,37 @@ impl LpImageView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_background(&self) -> anyhow::Result<()> {
|
pub async fn set_background(&self) -> anyhow::Result<()> {
|
||||||
let background = self.uri().context("No URI for current file")?;
|
let background = self.uri().context("No URI for current file")?;
|
||||||
spawn!(clone!(@weak self as view =>
|
let native = self.native().expect("View should have a GtkNative");
|
||||||
async move {
|
let id = WindowIdentifier::from_native(&native).await;
|
||||||
let id = WindowIdentifier::from_native(
|
|
||||||
&view.native().expect("View should have a GtkNative"),
|
|
||||||
)
|
|
||||||
.await;
|
|
||||||
|
|
||||||
match wallpaper::WallpaperRequest::default()
|
match wallpaper::WallpaperRequest::default()
|
||||||
.set_on(wallpaper::SetOn::Background)
|
.set_on(wallpaper::SetOn::Background)
|
||||||
.show_preview(true)
|
.show_preview(true)
|
||||||
.identifier(id)
|
.identifier(id)
|
||||||
.build_uri(&background)
|
.build_uri(&background)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
// We use `1` here because we can't pass enums directly as GVariants,
|
// 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.
|
// so we need to use the C int value of the enum.
|
||||||
// `TOAST_PRIORITY_NORMAL = 0`, and `TOAST_PRIORITY_HIGH = 1`
|
// `TOAST_PRIORITY_NORMAL = 0`, and `TOAST_PRIORITY_HIGH = 1`
|
||||||
Ok(_) => view
|
Ok(_) => self
|
||||||
.activate_action(
|
.activate_action(
|
||||||
|
"win.show-toast",
|
||||||
|
Some(&(i18n("Set as background."), 1).to_variant()),
|
||||||
|
)
|
||||||
|
.unwrap(),
|
||||||
|
Err(err) => {
|
||||||
|
if !matches!(err, Error::Response(ResponseError::Cancelled)) {
|
||||||
|
self.activate_action(
|
||||||
"win.show-toast",
|
"win.show-toast",
|
||||||
Some(&(i18n("Set as background."), 1).to_variant()),
|
Some(&(i18n("Could not set background."), 1).to_variant()),
|
||||||
)
|
)
|
||||||
.unwrap(),
|
.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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -146,8 +146,8 @@ mod imp {
|
||||||
win.rotate_image(angle.unwrap().get().unwrap());
|
win.rotate_image(angle.unwrap().get().unwrap());
|
||||||
});
|
});
|
||||||
|
|
||||||
klass.install_action("win.set-background", None, move |win, _, _| {
|
klass.install_action_async("win.set-background", None, |win, _, _| async move {
|
||||||
win.set_background();
|
win.set_background().await;
|
||||||
});
|
});
|
||||||
|
|
||||||
klass.install_action("win.print", None, move |win, _, _| {
|
klass.install_action("win.print", None, move |win, _, _| {
|
||||||
|
|
@ -397,10 +397,10 @@ impl LpWindow {
|
||||||
self.imp().image_view.rotate_image(angle)
|
self.imp().image_view.rotate_image(angle)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_background(&self) {
|
async fn set_background(&self) {
|
||||||
let imp = self.imp();
|
let imp = self.imp();
|
||||||
|
|
||||||
if let Err(e) = imp.image_view.set_background() {
|
if let Err(e) = imp.image_view.set_background().await {
|
||||||
log::error!("Failed to set background: {}", e);
|
log::error!("Failed to set background: {}", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue