diff --git a/Cargo.lock b/Cargo.lock index 6f32ded..f49ac2b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1439,12 +1439,6 @@ dependencies = [ "system-deps", ] -[[package]] -name = "gtk-macros" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da5bf7748fd4cd0b2490df8debcc911809dbcbee4ece9531b96c29a9c729de5a" - [[package]] name = "gtk4" version = "0.6.4" @@ -1903,7 +1897,6 @@ dependencies = [ "futures", "gettext-rs", "gio", - "gtk-macros", "gtk4", "image", "indexmap", diff --git a/Cargo.toml b/Cargo.toml index f8e372b..db48793 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,7 +14,6 @@ anyhow = { version = "1.0.66", features = ["backtrace"] } arc-swap = "1.6.0" env_logger = "0.10.0" futures = "0.3.25" -gtk-macros = "0.3.0" indexmap = "1.9.2" kamadak-exif = "0.5.5" libgweather = "4.2.0" diff --git a/src/util.rs b/src/util.rs index bc2a93d..85d16f7 100644 --- a/src/util.rs +++ b/src/util.rs @@ -198,3 +198,10 @@ pub fn contrast_ratio(color1: &gdk::RGBA, color2: &gdk::RGBA) -> f32 { (l1 + 0.05) / (l2 + 0.05) } + +pub fn spawn + 'static>( + f: F, +) -> glib::JoinHandle { + let ctx = glib::MainContext::default(); + ctx.spawn_local(f) +} diff --git a/src/widgets/image.rs b/src/widgets/image.rs index 4d4f236..0c16cfb 100644 --- a/src/widgets/image.rs +++ b/src/widgets/image.rs @@ -35,10 +35,10 @@ use crate::i18n::i18n; use crate::image_metadata::LpImageMetadata; use crate::util::Gesture; +use crate::util::spawn; use adw::{prelude::*, subclass::prelude::*}; use arc_swap::ArcSwap; use futures::prelude::*; -use gtk_macros::spawn; use once_cell::sync::Lazy; use once_cell::unsync::OnceCell; @@ -765,7 +765,7 @@ impl LpImage { }; let weak_obj = self.downgrade(); - spawn!(async move { + spawn(async move { while let Some(update) = decoder_update.next().await { if let Some(obj) = weak_obj.upgrade() { obj.update(update); @@ -811,7 +811,7 @@ impl LpImage { new_tiles }); if imp.background_color.borrow().is_none() { - spawn!(glib::clone!(@weak self as obj => async move { + spawn(glib::clone!(@weak self as obj => async move { let color = obj.background_color_guess().await; obj.set_background_color(color); if obj.is_mapped() { @@ -962,7 +962,9 @@ impl LpImage { let obj = self.clone(); let file = file_a.clone(); // TODO: error handling is missing - spawn! {async move { obj.load(&file.path().unwrap()).await; }}; + spawn(async move { + obj.load(&file.path().unwrap()).await; + }); } gio::FileMonitorEvent::Deleted | gio::FileMonitorEvent::MovedOut diff --git a/src/widgets/image_page.rs b/src/widgets/image_page.rs index 3a5ed58..72c5c38 100644 --- a/src/widgets/image_page.rs +++ b/src/widgets/image_page.rs @@ -24,11 +24,11 @@ use crate::deps::*; use crate::widgets::LpImage; +use crate::util::spawn; use adw::subclass::prelude::*; use glib::clone; use gtk::prelude::*; use gtk::CompositeTemplate; -use gtk_macros::spawn; use once_cell::sync::Lazy; use std::path::{Path, PathBuf}; @@ -155,7 +155,7 @@ impl LpImagePage { obj.imp().image.set_file(&file); - spawn!(clone!(@weak obj, @strong path => async move { + spawn(clone!(@weak obj, @strong path => async move { let imp = obj.imp(); imp.image.load(&path).await; })); diff --git a/src/widgets/image_view.rs b/src/widgets/image_view.rs index 463eba0..df8a958 100644 --- a/src/widgets/image_view.rs +++ b/src/widgets/image_view.rs @@ -31,6 +31,7 @@ use crate::i18n::*; use crate::util::{Direction, Position}; use crate::widgets::{LpImage, LpImagePage, LpSlidingView}; +use crate::util::spawn; use adw::prelude::*; use adw::subclass::prelude::*; use anyhow::Context; @@ -40,7 +41,6 @@ use ashpd::Error; use ashpd::WindowIdentifier; use glib::clone; use gtk::CompositeTemplate; -use gtk_macros::spawn; use once_cell::sync::Lazy; use std::cell::{Cell, RefCell}; @@ -268,7 +268,7 @@ impl LpImageView { // List other files in directory if let Some(directory) = directory { let path = path.to_path_buf(); - spawn!(glib::clone!(@weak self as obj, @strong path => async move { + spawn(glib::clone!(@weak self as obj, @strong path => async move { if let Err(err) = obj.model().load_directory(directory).await { log::warn!("Failed to load directory: {err}"); obj.activate_action("win.show-toast", Some(&(err.to_string(), 1).to_variant())) diff --git a/src/widgets/properties_view.rs b/src/widgets/properties_view.rs index e1aa6de..d09639e 100644 --- a/src/widgets/properties_view.rs +++ b/src/widgets/properties_view.rs @@ -30,7 +30,7 @@ use futures::future::{AbortHandle, Abortable}; use once_cell::sync::Lazy; use std::cell::RefCell; -use gtk_macros::spawn; +use crate::util::spawn; use crate::image_metadata::LpImageMetadata; use crate::widgets::image::LpImage; @@ -234,7 +234,7 @@ impl LpPropertiesView { imp.info_handle.replace(Some(handle)); // ...then spawn the future. - spawn!(async { + spawn(async { let _ = fut.await; }); } diff --git a/src/window.rs b/src/window.rs index 6f2a9a5..c47fb51 100644 --- a/src/window.rs +++ b/src/window.rs @@ -20,11 +20,11 @@ use crate::deps::*; use crate::i18n::*; +use crate::util::spawn; use adw::prelude::*; use adw::subclass::prelude::*; use glib::clone; use gtk::CompositeTemplate; -use gtk_macros::spawn; use std::path::{Path, PathBuf}; @@ -501,7 +501,7 @@ impl LpWindow { .build(); toast.connect_button_clicked(glib::clone!(@weak self as win => move |_| { let path = path.clone(); - spawn!(async move { + spawn(async move { let result = crate::util::untrash(&path).await; match result { Ok(()) => win.image_view().set_image_from_path(&path),