From 43037a6a41b2472d5fed523d991371d020466463 Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Sat, 27 Dec 2025 15:28:16 +0900 Subject: [PATCH] use freedesktop instead of gtk --- Cargo.lock | 624 +++++------------------ Cargo.toml | 2 + dash-frontend/Cargo.toml | 13 +- dash-frontend/src/tab/apps.rs | 1 - dash-frontend/src/util/desktop_finder.rs | 82 +-- wlx-capture/Cargo.toml | 2 +- wlx-common/Cargo.toml | 18 +- wlx-common/src/cache_dir.rs | 14 +- wlx-overlay-s/Cargo.toml | 2 +- wlx-overlay-s/src/config_io.rs | 12 +- 10 files changed, 180 insertions(+), 590 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f2bf18c..0dd7958 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -479,29 +479,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "atk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "241b621213072e993be4f6f3a9e4b45f65b7e6faad43001be957184b7bb1824b" -dependencies = [ - "atk-sys", - "glib 0.18.5", - "libc", -] - -[[package]] -name = "atk-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e48b684b0ca77d2bbadeef17424c2ea3c897d44d566a1617e7e8f30614d086" -dependencies = [ - "glib-sys 0.18.1", - "gobject-sys 0.18.0", - "libc", - "system-deps 6.2.2", -] - [[package]] name = "atomic-waker" version = "1.1.2" @@ -839,31 +816,6 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" -[[package]] -name = "cairo-rs" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" -dependencies = [ - "bitflags 2.10.0", - "cairo-sys-rs", - "glib 0.18.5", - "libc", - "once_cell", - "thiserror 1.0.69", -] - -[[package]] -name = "cairo-sys-rs" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" -dependencies = [ - "glib-sys 0.18.1", - "libc", - "system-deps 6.2.2", -] - [[package]] name = "calloop" version = "0.13.0" @@ -917,9 +869,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.50" +version = "1.2.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f50d563227a1c37cc0a263f64eca3334388c01c5e4c4861a9def205c614383c" +checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" dependencies = [ "find-msvc-tools", "jobserver", @@ -949,17 +901,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" dependencies = [ "smallvec", - "target-lexicon 0.12.16", -] - -[[package]] -name = "cfg-expr" -version = "0.20.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21be0e1ce6cdb2ee7fff840f922fb04ead349e5cfb1e750b769132d44ce04720" -dependencies = [ - "smallvec", - "target-lexicon 0.13.3", + "target-lexicon", ] [[package]] @@ -1125,7 +1067,7 @@ dependencies = [ "serde_core", "serde_json", "toml 0.9.10+spec-1.1.0", - "winnow 0.7.14", + "winnow", "yaml-rust2", ] @@ -1485,9 +1427,8 @@ dependencies = [ "anyhow", "async-native-tls", "chrono", - "gio 0.21.5", + "freedesktop", "glam", - "gtk", "http-body-util", "hyper", "keyvalues-parser", @@ -1569,6 +1510,27 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "dirs" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.61.2", +] + [[package]] name = "dispatch" version = "0.2.0" @@ -1894,21 +1856,11 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "field-offset" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f" -dependencies = [ - "memoffset", - "rustc_version", -] - [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" [[package]] name = "fixedbitset" @@ -2039,6 +1991,43 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "freedesktop" +version = "0.0.3" +source = "git+https://github.com/galister/freedesktop.git?rev=2c1e653#2c1e653afcd025c3254a25dcdd5e8750e263eebf" +dependencies = [ + "freedesktop-apps", + "freedesktop-core", + "freedesktop-icon", +] + +[[package]] +name = "freedesktop-apps" +version = "0.0.3" +source = "git+https://github.com/galister/freedesktop.git?rev=2c1e653#2c1e653afcd025c3254a25dcdd5e8750e263eebf" +dependencies = [ + "freedesktop-core", + "libc", + "regex", +] + +[[package]] +name = "freedesktop-core" +version = "0.0.3" +source = "git+https://github.com/galister/freedesktop.git?rev=2c1e653#2c1e653afcd025c3254a25dcdd5e8750e263eebf" +dependencies = [ + "dirs", +] + +[[package]] +name = "freedesktop-icon" +version = "0.0.3" +source = "git+https://github.com/galister/freedesktop.git?rev=2c1e653#2c1e653afcd025c3254a25dcdd5e8750e263eebf" +dependencies = [ + "freedesktop-core", + "rust-ini", +] + [[package]] name = "futures" version = "0.3.31" @@ -2141,64 +2130,6 @@ dependencies = [ "slab", ] -[[package]] -name = "gdk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f245958c627ac99d8e529166f9823fb3b838d1d41fd2b297af3075093c2691" -dependencies = [ - "cairo-rs", - "gdk-pixbuf", - "gdk-sys", - "gio 0.18.4", - "glib 0.18.5", - "libc", - "pango", -] - -[[package]] -name = "gdk-pixbuf" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" -dependencies = [ - "gdk-pixbuf-sys", - "gio 0.18.4", - "glib 0.18.5", - "libc", - "once_cell", -] - -[[package]] -name = "gdk-pixbuf-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" -dependencies = [ - "gio-sys 0.18.1", - "glib-sys 0.18.1", - "gobject-sys 0.18.0", - "libc", - "system-deps 6.2.2", -] - -[[package]] -name = "gdk-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c2d13f38594ac1e66619e188c6d5a1adb98d11b2fcf7894fc416ad76aa2f3f7" -dependencies = [ - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gio-sys 0.18.1", - "glib-sys 0.18.1", - "gobject-sys 0.18.0", - "libc", - "pango-sys", - "pkg-config", - "system-deps 6.2.2", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -2258,68 +2189,6 @@ version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" -[[package]] -name = "gio" -version = "0.18.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys 0.18.1", - "glib 0.18.5", - "libc", - "once_cell", - "pin-project-lite", - "smallvec", - "thiserror 1.0.69", -] - -[[package]] -name = "gio" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5ff48bf600c68b476e61dc6b7c762f2f4eb91deef66583ba8bb815c30b5811a" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-util", - "gio-sys 0.21.5", - "glib 0.21.5", - "libc", - "pin-project-lite", - "smallvec", -] - -[[package]] -name = "gio-sys" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" -dependencies = [ - "glib-sys 0.18.1", - "gobject-sys 0.18.0", - "libc", - "system-deps 6.2.2", - "winapi", -] - -[[package]] -name = "gio-sys" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0071fe88dba8e40086c8ff9bbb62622999f49628344b1d1bf490a48a29d80f22" -dependencies = [ - "glib-sys 0.21.5", - "gobject-sys 0.21.5", - "libc", - "system-deps 7.0.7", - "windows-sys 0.61.2", -] - [[package]] name = "glam" version = "0.30.9" @@ -2330,183 +2199,18 @@ dependencies = [ "serde_core", ] -[[package]] -name = "glib" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" -dependencies = [ - "bitflags 2.10.0", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys 0.18.1", - "glib-macros 0.18.5", - "glib-sys 0.18.1", - "gobject-sys 0.18.0", - "libc", - "memchr", - "once_cell", - "smallvec", - "thiserror 1.0.69", -] - -[[package]] -name = "glib" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16de123c2e6c90ce3b573b7330de19be649080ec612033d397d72da265f1bd8b" -dependencies = [ - "bitflags 2.10.0", - "futures-channel", - "futures-core", - "futures-executor", - "futures-task", - "futures-util", - "gio-sys 0.21.5", - "glib-macros 0.21.5", - "glib-sys 0.21.5", - "gobject-sys 0.21.5", - "libc", - "memchr", - "smallvec", -] - -[[package]] -name = "glib-macros" -version = "0.18.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" -dependencies = [ - "heck 0.4.1", - "proc-macro-crate 2.0.2", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "glib-macros" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf59b675301228a696fe01c3073974643365080a76cc3ed5bc2cbc466ad87f17" -dependencies = [ - "heck 0.5.0", - "proc-macro-crate 3.4.0", - "proc-macro2", - "quote", - "syn 2.0.111", -] - -[[package]] -name = "glib-sys" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" -dependencies = [ - "libc", - "system-deps 6.2.2", -] - -[[package]] -name = "glib-sys" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d95e1a3a19ae464a7286e14af9a90683c64d70c02532d88d87ce95056af3e6c" -dependencies = [ - "libc", - "system-deps 7.0.7", -] - [[package]] name = "glob" version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" -[[package]] -name = "gobject-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" -dependencies = [ - "glib-sys 0.18.1", - "libc", - "system-deps 6.2.2", -] - -[[package]] -name = "gobject-sys" -version = "0.21.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dca35da0d19a18f4575f3cb99fe1c9e029a2941af5662f326f738a21edaf294" -dependencies = [ - "glib-sys 0.21.5", - "libc", - "system-deps 7.0.7", -] - [[package]] name = "grid" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9e2d4c0a8296178d8802098410ca05d86b17a10bb5ab559b3fb404c1f948220" -[[package]] -name = "gtk" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56fb197bfc42bd5d2751f4f017d44ff59fbb58140c6b49f9b3b2bdab08506a" -dependencies = [ - "atk", - "cairo-rs", - "field-offset", - "futures-channel", - "gdk", - "gdk-pixbuf", - "gio 0.18.4", - "glib 0.18.5", - "gtk-sys", - "gtk3-macros", - "libc", - "pango", - "pkg-config", -] - -[[package]] -name = "gtk-sys" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f29a1c21c59553eb7dd40e918be54dccd60c52b049b75119d5d96ce6b624414" -dependencies = [ - "atk-sys", - "cairo-sys-rs", - "gdk-pixbuf-sys", - "gdk-sys", - "gio-sys 0.18.1", - "glib-sys 0.18.1", - "gobject-sys 0.18.0", - "libc", - "pango-sys", - "system-deps 6.2.2", -] - -[[package]] -name = "gtk3-macros" -version = "0.18.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ff3c5b21f14f0736fed6dcfc0bfb4225ebf5725f3c0209edeec181e4d73e9d" -dependencies = [ - "proc-macro-crate 1.3.1", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.111", -] - [[package]] name = "h2" version = "0.4.12" @@ -3048,9 +2752,9 @@ checksum = "7ee5b5339afb4c41626dde77b7a611bd4f2c202b897852b4bcf5d03eddc61010" [[package]] name = "jiff" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35" +checksum = "a87d9b8105c23642f50cbbae03d1f75d8422c5cb98ce7ee9271f7ff7505be6b8" dependencies = [ "jiff-static", "log", @@ -3061,9 +2765,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" +checksum = "b787bebb543f8969132630c51fd0afab173a86c6abae56ff3b9e5e3e3f9f6e58" dependencies = [ "proc-macro2", "quote", @@ -3233,7 +2937,7 @@ dependencies = [ "semver", "serde", "serde_json", - "xdg 2.5.2", + "xdg", ] [[package]] @@ -3250,7 +2954,7 @@ dependencies = [ [[package]] name = "libspa" version = "0.8.0" -source = "git+https://gitlab.freedesktop.org/galister/pipewire-rs.git#ba32202c3c391004c3bb533b58fa75a50e47ff57" +source = "git+https://gitlab.freedesktop.org/galister/pipewire-rs.git?rev=ba32202c3c391004c3bb533b58fa75a50e47ff57#ba32202c3c391004c3bb533b58fa75a50e47ff57" dependencies = [ "bitflags 2.10.0", "cc", @@ -3260,17 +2964,17 @@ dependencies = [ "libspa-sys", "nix 0.27.1", "nom 7.1.3", - "system-deps 6.2.2", + "system-deps", ] [[package]] name = "libspa-sys" version = "0.8.0" -source = "git+https://gitlab.freedesktop.org/galister/pipewire-rs.git#ba32202c3c391004c3bb533b58fa75a50e47ff57" +source = "git+https://gitlab.freedesktop.org/galister/pipewire-rs.git?rev=ba32202c3c391004c3bb533b58fa75a50e47ff57#ba32202c3c391004c3bb533b58fa75a50e47ff57" dependencies = [ "bindgen", "cc", - "system-deps 6.2.2", + "system-deps", ] [[package]] @@ -3689,7 +3393,7 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.111", @@ -4085,6 +3789,12 @@ dependencies = [ "mint", ] +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "orbclient" version = "0.3.49" @@ -4174,31 +3884,6 @@ dependencies = [ "ttf-parser", ] -[[package]] -name = "pango" -version = "0.18.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" -dependencies = [ - "gio 0.18.4", - "glib 0.18.5", - "libc", - "once_cell", - "pango-sys", -] - -[[package]] -name = "pango-sys" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" -dependencies = [ - "glib-sys 0.18.1", - "gobject-sys 0.18.0", - "libc", - "system-deps 6.2.2", -] - [[package]] name = "parking" version = "2.2.1" @@ -4365,7 +4050,7 @@ dependencies = [ [[package]] name = "pipewire" version = "0.8.0" -source = "git+https://gitlab.freedesktop.org/galister/pipewire-rs.git#ba32202c3c391004c3bb533b58fa75a50e47ff57" +source = "git+https://gitlab.freedesktop.org/galister/pipewire-rs.git?rev=ba32202c3c391004c3bb533b58fa75a50e47ff57#ba32202c3c391004c3bb533b58fa75a50e47ff57" dependencies = [ "anyhow", "bitflags 2.10.0", @@ -4381,11 +4066,11 @@ dependencies = [ [[package]] name = "pipewire-sys" version = "0.8.0" -source = "git+https://gitlab.freedesktop.org/galister/pipewire-rs.git#ba32202c3c391004c3bb533b58fa75a50e47ff57" +source = "git+https://gitlab.freedesktop.org/galister/pipewire-rs.git?rev=ba32202c3c391004c3bb533b58fa75a50e47ff57#ba32202c3c391004c3bb533b58fa75a50e47ff57" dependencies = [ "bindgen", "libspa-sys", - "system-deps 6.2.2", + "system-deps", ] [[package]] @@ -4483,26 +4168,6 @@ dependencies = [ "syn 2.0.111", ] -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit 0.19.15", -] - -[[package]] -name = "proc-macro-crate" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" -dependencies = [ - "toml_datetime 0.6.3", - "toml_edit 0.20.2", -] - [[package]] name = "proc-macro-crate" version = "3.4.0" @@ -4792,6 +4457,17 @@ dependencies = [ "bitflags 2.10.0", ] +[[package]] +name = "redox_users" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 2.0.17", +] + [[package]] name = "regex" version = "1.12.2" @@ -5281,10 +4957,11 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.7" +version = "1.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7664a098b8e616bdfcc2dc0e9ac44eb231eedf41db4e9fe95d8d32ec728dedad" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" dependencies = [ + "errno", "libc", ] @@ -5698,23 +5375,10 @@ version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ - "cfg-expr 0.15.8", + "cfg-expr", "heck 0.5.0", "pkg-config", - "toml 0.8.2", - "version-compare", -] - -[[package]] -name = "system-deps" -version = "7.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c8f33736f986f16d69b6cb8b03f55ddcad5c41acc4ccc39dd88e84aa805e7f" -dependencies = [ - "cfg-expr 0.20.5", - "heck 0.5.0", - "pkg-config", - "toml 0.9.10+spec-1.1.0", + "toml 0.8.23", "version-compare", ] @@ -5736,12 +5400,6 @@ version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" -[[package]] -name = "target-lexicon" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df7f62577c25e07834649fc3b39fafdc597c0a3527dc1c60129201ccfcbaa50c" - [[package]] name = "tempfile" version = "3.24.0" @@ -5945,14 +5603,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.2" +version = "0.8.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" +checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362" dependencies = [ "serde", "serde_spanned 0.6.9", - "toml_datetime 0.6.3", - "toml_edit 0.20.2", + "toml_datetime 0.6.11", + "toml_edit 0.22.27", ] [[package]] @@ -5961,20 +5619,18 @@ version = "0.9.10+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0825052159284a1a8b4d6c0c86cbc801f2da5afd2b225fa548c72f2e74002f48" dependencies = [ - "indexmap 2.12.1", "serde_core", "serde_spanned 1.0.4", "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", - "toml_writer", - "winnow 0.7.14", + "winnow", ] [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c" dependencies = [ "serde", ] @@ -5990,26 +5646,15 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.15" +version = "0.22.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.12.1", - "toml_datetime 0.6.3", - "winnow 0.5.40", -] - -[[package]] -name = "toml_edit" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a" dependencies = [ "indexmap 2.12.1", "serde", "serde_spanned 0.6.9", - "toml_datetime 0.6.3", - "winnow 0.5.40", + "toml_datetime 0.6.11", + "winnow", ] [[package]] @@ -6021,7 +5666,7 @@ dependencies = [ "indexmap 2.12.1", "toml_datetime 0.7.5+spec-1.1.0", "toml_parser", - "winnow 0.7.14", + "winnow", ] [[package]] @@ -6030,15 +5675,9 @@ version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ - "winnow 0.7.14", + "winnow", ] -[[package]] -name = "toml_writer" -version = "1.0.6+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" - [[package]] name = "tracing" version = "0.1.44" @@ -6349,7 +5988,7 @@ version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dc929c42c9336fd082079ac3ea30126e4a0dfe36fd2e2b3581303f7d140d20f" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.111", @@ -7205,15 +6844,6 @@ dependencies = [ "xkbcommon-dl", ] -[[package]] -name = "winnow" -version = "0.5.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" -dependencies = [ - "memchr", -] - [[package]] name = "winnow" version = "0.7.14" @@ -7251,6 +6881,7 @@ version = "0.1.0" dependencies = [ "anyhow", "chrono", + "freedesktop", "glam", "idmap", "idmap-derive", @@ -7258,7 +6889,6 @@ dependencies = [ "serde", "smol", "wayvr-ipc", - "xdg 3.0.0", ] [[package]] @@ -7274,6 +6904,7 @@ dependencies = [ "config", "dash-frontend", "dbus", + "freedesktop", "futures", "glam", "idmap", @@ -7317,7 +6948,6 @@ dependencies = [ "wlx-capture", "wlx-common", "xcb", - "xdg 3.0.0", "xkbcommon 0.9.0", ] @@ -7383,12 +7013,6 @@ version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" -[[package]] -name = "xdg" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" - [[package]] name = "xkbcommon" version = "0.8.0" @@ -7541,7 +7165,7 @@ dependencies = [ "uds_windows", "uuid", "windows-sys 0.61.2", - "winnow 0.7.14", + "winnow", "zbus_macros", "zbus_names", "zvariant", @@ -7553,7 +7177,7 @@ version = "5.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.111", @@ -7570,7 +7194,7 @@ checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", - "winnow 0.7.14", + "winnow", "zvariant", ] @@ -7656,9 +7280,9 @@ dependencies = [ [[package]] name = "zmij" -version = "0.1.7" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e404bcd8afdaf006e529269d3e85a743f9480c3cef60034d77860d02964f3ba" +checksum = "4af59da1029247450b54ba43e0b62c8e376582464bbe5504dd525fe521e7e8fd" [[package]] name = "zune-core" @@ -7694,7 +7318,7 @@ dependencies = [ "enumflags2", "serde", "url", - "winnow 0.7.14", + "winnow", "zvariant_derive", "zvariant_utils", ] @@ -7705,7 +7329,7 @@ version = "5.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006" dependencies = [ - "proc-macro-crate 3.4.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.111", @@ -7722,5 +7346,5 @@ dependencies = [ "quote", "serde", "syn 2.0.111", - "winnow 0.7.14", + "winnow", ] diff --git a/Cargo.toml b/Cargo.toml index e144805..3cfc426 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,6 +26,8 @@ resolver = "3" anyhow = "1.0.100" glam = { version = "0.30.9", features = ["mint", "serde"] } clap = { version = "4.5.53", features = ["derive"] } +freedesktop = { git = "https://github.com/galister/freedesktop.git", rev = "2c1e653", default-features = false, features = ["core"] } +# freedesktop = { version = "0.0.3", default-features = false, features = ["core"] } idmap = "0.2.2" idmap-derive = "0.2.22" log = "0.4.29" diff --git a/dash-frontend/Cargo.toml b/dash-frontend/Cargo.toml index 72620cc..66e991c 100644 --- a/dash-frontend/Cargo.toml +++ b/dash-frontend/Cargo.toml @@ -4,18 +4,19 @@ version = "0.1.0" edition = "2024" [dependencies] -anyhow.workspace = true +wayvr-ipc = { path = "../wayvr-ipc", default-features = false } wgui = { path = "../wgui/" } +wlx-common = { path = "../wlx-common" } + +anyhow.workspace = true +freedesktop = { workspace = true, features = ["apps", "icon"] } glam = { workspace = true, features = ["mint", "serde"] } log.workspace = true rust-embed.workspace = true -chrono = "0.4.42" -gio = "0.21.5" -gtk = "0.18.2" serde.workspace = true serde_json.workspace = true -wlx-common = { path = "../wlx-common" } -wayvr-ipc = { path = "../wayvr-ipc", default-features = false } + +chrono = "0.4.42" keyvalues-parser = { git = "https://github.com/CosmicHorrorDev/vdf-rs.git", rev = "fc6dcbea9eb13cacb98dea40063f6f56cde6e145" } smol = "2.0.2" hyper = { version = "1.8.1", features = ["client", "http1", "http2"] } diff --git a/dash-frontend/src/tab/apps.rs b/dash-frontend/src/tab/apps.rs index 9b650cf..e45ce45 100644 --- a/dash-frontend/src/tab/apps.rs +++ b/dash-frontend/src/tab/apps.rs @@ -117,7 +117,6 @@ impl TabApps { extra: Default::default(), }; - gtk::init()?; let entries = util::desktop_finder::find_entries()?; let frontend_tasks = frontend.tasks.clone(); diff --git a/dash-frontend/src/util/desktop_finder.rs b/dash-frontend/src/util/desktop_finder.rs index 035577a..9189faf 100644 --- a/dash-frontend/src/util/desktop_finder.rs +++ b/dash-frontend/src/util/desktop_finder.rs @@ -1,5 +1,4 @@ -use gio::prelude::{AppInfoExt, IconExt}; -use gtk::traits::IconThemeExt; +use freedesktop::{ApplicationEntry, IconTheme}; use serde::{Deserialize, Serialize}; // compatibility with wayvr-ipc @@ -31,6 +30,8 @@ pub struct EntrySearchCell { pub categories: Vec, } +const ICON_SIZE: u32 = 128; + const CMD_BLACKLIST: [&str; 1] = [ "lsp-plugins", // LSP Plugins collection. They clutter the application list a lot ]; @@ -38,45 +39,32 @@ const CMD_BLACKLIST: [&str; 1] = [ const CATEGORY_TYPE_BLACKLIST: [&str; 5] = ["GTK", "Qt", "X-XFCE", "X-Bluetooth", "ConsoleOnly"]; pub fn find_entries() -> anyhow::Result> { - let Some(icon_theme) = gtk::IconTheme::default() else { - anyhow::bail!("Failed to get current icon theme information"); - }; - let mut res = Vec::::new(); + let theme = IconTheme::current(); - let info = gio::AppInfo::all(); - - log::debug!("app entry count {}", info.len()); - - 'outer: for app_entry in info { + 'outer: for app_entry in ApplicationEntry::all() { let Some(app_entry_id) = app_entry.id() else { log::warn!( - "failed to get desktop entry ID for application named \"{}\"", - app_entry.name() + "No desktop entry id for application \"{}\"", + app_entry.name().as_deref().unwrap_or("") ); continue; }; - let Some(desktop_app) = gio::DesktopAppInfo::new(&app_entry_id) else { - log::warn!( - "failed to find desktop app file from application named \"{}\"", - app_entry.name() - ); + let Some(name) = app_entry.name() else { + log::warn!("No Name on desktop entry {}", app_entry_id); continue; }; - if desktop_app.is_nodisplay() || desktop_app.is_hidden() { + let Some(exec) = app_entry.exec() else { + log::warn!("No Exec on desktop entry {}", app_entry_id); + continue; + }; + + if app_entry.no_display() || app_entry.is_hidden() || app_entry.terminal() { continue; } - let Some(cmd) = desktop_app.commandline() else { - continue; - }; - - let name = String::from(desktop_app.name()); - - let exec = String::from(cmd.to_string_lossy()); - for blacklisted in CMD_BLACKLIST { if exec.contains(blacklisted) { continue 'outer; @@ -95,37 +83,17 @@ pub fn find_entries() -> anyhow::Result> { None => (exec, Vec::new()), }; - let icon_path = match desktop_app.icon() { - Some(icon) => { - if let Some(icon_str) = icon.to_string() { - if let Some(s_icon) = icon_theme.lookup_icon(&icon_str, 128, gtk::IconLookupFlags::GENERIC_FALLBACK) { - s_icon.filename().map(|p| String::from(p.to_string_lossy())) - } else { - None - } - } else { - None - } - } - None => None, - }; + let icon_path = app_entry + .icon() + .and_then(|icon_name| theme.get_with_size(&icon_name, ICON_SIZE)) + .and_then(|path_buf| path_buf.into_os_string().into_string().ok()); - let categories: Vec = match desktop_app.categories() { - Some(categories) => categories - .split(";") - .filter(|s| !s.is_empty()) - .filter(|s| { - for b in CATEGORY_TYPE_BLACKLIST { - if *s == b { - return false; - } - } - true - }) - .map(String::from) - .collect(), - None => Vec::new(), - }; + let categories = app_entry.categories().map_or_else(Vec::default, |inner| { + inner + .into_iter() + .filter(|s| !(s.is_empty() || CATEGORY_TYPE_BLACKLIST.contains(&s.as_str()))) + .collect() + }); let entry = DesktopEntry { app_name: name, diff --git a/wlx-capture/Cargo.toml b/wlx-capture/Cargo.toml index 3406fed..b45c307 100644 --- a/wlx-capture/Cargo.toml +++ b/wlx-capture/Cargo.toml @@ -32,7 +32,7 @@ drm-fourcc = "2.2.0" idmap = { workspace = true } libc = "0.2.178" log = { workspace = true } -pipewire = { git = "https://gitlab.freedesktop.org/galister/pipewire-rs.git", ref = "ba32202c3c391004c3bb533b58fa75a50e47ff57", features = [ +pipewire = { git = "https://gitlab.freedesktop.org/galister/pipewire-rs.git", rev = "ba32202c3c391004c3bb533b58fa75a50e47ff57", features = [ "v0_3_33", ], optional = true } #pipewire = { version = "0.8.0", features = ["v0_3_33"], optional = true } diff --git a/wlx-common/Cargo.toml b/wlx-common/Cargo.toml index a241cbe..c02c7bd 100644 --- a/wlx-common/Cargo.toml +++ b/wlx-common/Cargo.toml @@ -5,13 +5,15 @@ edition = "2024" [dependencies] -serde = { workspace = true, features = ["rc"] } -glam = { workspace = true } -chrono = "0.4.42" -idmap = { workspace = true, features = ["serde"] } -idmap-derive = { workspace = true } wayvr-ipc = { path = "../wayvr-ipc", default-features = false } -anyhow = { workspace = true } -xdg = "3.0" -log = { workspace = true } + +freedesktop.workspace = true +anyhow.workspace = true +glam.workspace = true +idmap = { workspace = true, features = ["serde"] } +idmap-derive.workspace = true +log.workspace = true +serde = { workspace = true, features = ["rc"] } + +chrono = "0.4.42" smol = "2.0.2" diff --git a/wlx-common/src/cache_dir.rs b/wlx-common/src/cache_dir.rs index 19b300b..edaa237 100644 --- a/wlx-common/src/cache_dir.rs +++ b/wlx-common/src/cache_dir.rs @@ -1,16 +1,12 @@ use std::{path::PathBuf, sync::LazyLock}; -const FALLBACK_CACHE_PATH: &str = "/tmp/wayvr_cache"; +use freedesktop::xdg_cache_home; static CACHE_ROOT_PATH: LazyLock = LazyLock::new(|| { - if let Some(mut dir) = xdg::BaseDirectories::new().get_cache_home() { - dir.push("wayvr"); - return dir; - } - - //Return fallback cache path - log::error!("Err: Failed to find cache path, using {FALLBACK_CACHE_PATH}"); - PathBuf::from(FALLBACK_CACHE_PATH) + // Panics if neither $XDG_CACHE_HOME nor $HOME is set + let mut dir = xdg_cache_home(); + dir.push("wayvr"); + dir }); fn get_cache_root() -> PathBuf { diff --git a/wlx-overlay-s/Cargo.toml b/wlx-overlay-s/Cargo.toml index e1aa7b1..8218a29 100644 --- a/wlx-overlay-s/Cargo.toml +++ b/wlx-overlay-s/Cargo.toml @@ -28,6 +28,7 @@ wlx-common = { path = "../wlx-common" } anyhow.workspace = true clap.workspace = true +freedesktop.workspace = true glam = { workspace = true, features = ["mint", "serde"] } idmap = { workspace = true, features = ["serde"] } idmap-derive. workspace = true @@ -85,7 +86,6 @@ winit = { version = "0.30.12", optional = true } xcb = { version = "1.6.0", optional = true, features = [ "as-raw-xcb-connection", ] } -xdg = "3.0" xkbcommon = { version = "0.9.0" } ################################ diff --git a/wlx-overlay-s/src/config_io.rs b/wlx-overlay-s/src/config_io.rs index 9ee03f4..d246878 100644 --- a/wlx-overlay-s/src/config_io.rs +++ b/wlx-overlay-s/src/config_io.rs @@ -1,3 +1,4 @@ +use freedesktop::xdg_config_home; use log::error; use std::{path::PathBuf, sync::LazyLock}; @@ -10,13 +11,10 @@ pub enum ConfigRoot { const FALLBACK_CONFIG_PATH: &str = "/tmp/wlxoverlay"; static CONFIG_ROOT_PATH: LazyLock = LazyLock::new(|| { - if let Some(mut dir) = xdg::BaseDirectories::new().get_config_home() { - dir.push("wlxoverlay"); - return dir; - } - //Return fallback config path - error!("Err: Failed to find config path, using {FALLBACK_CONFIG_PATH}"); - PathBuf::from(FALLBACK_CONFIG_PATH) + // Panics if $XDG_CONFIG_HOME and $HOME are both unset. + let mut dir = xdg_config_home(); + dir.push("wlxoverlay"); + return dir; }); pub fn get_config_root() -> PathBuf {