diff --git a/Cargo.lock b/Cargo.lock index 29a60470..d05005a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -203,12 +203,177 @@ dependencies = [ "libloading 0.7.4", ] +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +dependencies = [ + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" +dependencies = [ + "concurrent-queue", + "event-listener 5.1.0", + "event-listener-strategy 0.5.0", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" +dependencies = [ + "async-lock 3.3.0", + "async-task", + "concurrent-queue", + "fastrand 2.0.1", + "futures-lite 2.2.0", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f97ab0c5b00a7cdbe5a371b9a782ee7be1316095885c8a4ea1daf490eb0ef65" +dependencies = [ + "async-lock 3.3.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.2.0", + "parking", + "polling 3.3.2", + "rustix 0.38.30", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +dependencies = [ + "event-listener 4.0.3", + "event-listener-strategy 0.4.0", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.30", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-recursion" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + +[[package]] +name = "async-signal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +dependencies = [ + "async-io 2.3.1", + "async-lock 2.8.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.30", + "signal-hook-registry", + "slab", + "windows-sys 0.48.0", +] + [[package]] name = "async-task" version = "4.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" +[[package]] +name = "async-trait" +version = "0.1.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -220,7 +385,7 @@ name = "atomicwrites" version = "0.4.2" source = "git+https://github.com/jackpot51/rust-atomicwrites#043ab4859d53ffd3d55334685303d8df39c9f768" dependencies = [ - "rustix", + "rustix 0.38.30", "tempfile", "windows-sys 0.48.0", ] @@ -337,6 +502,22 @@ dependencies = [ "objc2", ] +[[package]] +name = "blocking" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" +dependencies = [ + "async-channel", + "async-lock 3.3.0", + "async-task", + "fastrand 2.0.1", + "futures-io", + "futures-lite 2.2.0", + "piper", + "tracing", +] + [[package]] name = "bumpalo" version = "3.14.0" @@ -384,8 +565,8 @@ dependencies = [ "async-task", "bitflags 2.4.2", "log", - "polling", - "rustix", + "polling 3.3.2", + "rustix 0.38.30", "slab", "thiserror", ] @@ -397,7 +578,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" dependencies = [ "calloop", - "rustix", + "rustix 0.38.30", "wayland-backend", "wayland-client", ] @@ -604,6 +785,7 @@ dependencies = [ "xdg", "xdg-user", "xkbcommon", + "zbus", ] [[package]] @@ -795,7 +977,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e16e44ab292b1dddfdaf7be62cfd8877df52f2f3fde5858d95bab606be259f20" dependencies = [ "bitflags 2.4.2", - "libloading 0.8.1", + "libloading 0.7.4", "winapi", ] @@ -868,6 +1050,17 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "derive_setters" version = "0.1.6" @@ -993,7 +1186,7 @@ dependencies = [ "bytemuck", "drm-ffi 0.7.1", "drm-fourcc", - "rustix", + "rustix 0.38.30", ] [[package]] @@ -1013,7 +1206,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" dependencies = [ "drm-sys 0.6.1", - "rustix", + "rustix 0.38.30", ] [[package]] @@ -1153,6 +1346,27 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "enumflags2" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "enumn" version = "0.1.13" @@ -1215,6 +1429,65 @@ dependencies = [ "num-traits", ] +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "5.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7ad6fd685ce13acd6d9541a30f6db6567a7a24c9ffd4ba2955d29e3f22c8b27" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.3", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feedafcaa9b749175d5ac357452a9d41ea2911da598fde46ce1fe02c37751291" +dependencies = [ + "event-listener 5.1.0", + "pin-project-lite", +] + [[package]] name = "exr" version = "1.6.4" @@ -1237,6 +1510,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + [[package]] name = "fastrand" version = "2.0.1" @@ -1513,6 +1795,34 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba" +dependencies = [ + "fastrand 2.0.1", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" version = "0.3.30" @@ -1556,9 +1866,9 @@ dependencies = [ [[package]] name = "gbm" -version = "0.14.0" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65dffaf38d96aa22cb748ccd9b1ffe624931e899f54c0225815ef7ac757a409f" +checksum = "313702b30cdeb83ddc72bc14dcee67803cd0ae2d12282ea06e368c25a900c844" dependencies = [ "bitflags 1.3.2", "drm 0.11.1", @@ -1823,6 +2133,12 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "hexf-parse" version = "0.2.1" @@ -2510,6 +2826,12 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + [[package]] name = "linux-raw-sys" version = "0.4.13" @@ -3004,7 +3326,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.1.0", "proc-macro2", "quote", "syn 2.0.48", @@ -3129,6 +3451,16 @@ dependencies = [ "hashbrown 0.12.3", ] +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + [[package]] name = "ouroboros" version = "0.17.2" @@ -3192,6 +3524,12 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + [[package]] name = "parking_lot" version = "0.11.2" @@ -3332,6 +3670,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + [[package]] name = "pkg-config" version = "0.3.29" @@ -3351,6 +3700,22 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + [[package]] name = "polling" version = "3.3.2" @@ -3360,7 +3725,7 @@ dependencies = [ "cfg-if", "concurrent-queue", "pin-project-lite", - "rustix", + "rustix 0.38.30", "tracing", "windows-sys 0.52.0", ] @@ -3383,13 +3748,23 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" +[[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 = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "toml_edit", + "toml_edit 0.21.0", ] [[package]] @@ -3818,6 +4193,20 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes 1.0.11", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + [[package]] name = "rustix" version = "0.38.30" @@ -3946,6 +4335,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_repr" +version = "0.1.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serde_spanned" version = "0.6.5" @@ -3955,6 +4355,17 @@ dependencies = [ "serde", ] +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "sha2" version = "0.10.8" @@ -3975,6 +4386,15 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + [[package]] name = "simd-adler32" version = "0.3.7" @@ -4023,7 +4443,7 @@ checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" [[package]] name = "smithay" version = "0.3.0" -source = "git+https://github.com/smithay//smithay?rev=3b3e07952e#3b3e07952e471618fe8b590ba3223f4201cec10c" +source = "git+https://github.com/smithay//smithay?rev=094fa3f7c3#094fa3f7c3909a7815000174807d1d962d555718" dependencies = [ "appendlist", "ash", @@ -4051,7 +4471,7 @@ dependencies = [ "pkg-config", "profiling", "rand", - "rustix", + "rustix 0.38.30", "scan_fmt", "scopeguard", "smallvec", @@ -4084,7 +4504,7 @@ dependencies = [ "libc", "log", "memmap2 0.9.3", - "rustix", + "rustix 0.38.30", "thiserror", "wayland-backend", "wayland-client", @@ -4127,6 +4547,16 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27207bb65232eda1f588cf46db2fee75c0808d557f6b3cf19a75f5d6d7c94df1" +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "softbuffer" version = "0.3.3" @@ -4138,7 +4568,7 @@ dependencies = [ "cocoa", "core-graphics", "drm 0.10.0", - "fastrand", + "fastrand 2.0.1", "foreign-types", "js-sys", "log", @@ -4146,7 +4576,7 @@ dependencies = [ "objc", "raw-window-handle 0.5.2", "redox_syscall 0.4.1", - "rustix", + "rustix 0.38.30", "tiny-xlib", "wasm-bindgen", "wayland-backend", @@ -4287,9 +4717,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" dependencies = [ "cfg-if", - "fastrand", + "fastrand 2.0.1", "redox_syscall 0.4.1", - "rustix", + "rustix 0.38.30", "windows-sys 0.52.0", ] @@ -4479,7 +4909,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit", + "toml_edit 0.21.0", ] [[package]] @@ -4491,6 +4921,17 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + [[package]] name = "toml_edit" version = "0.21.0" @@ -4609,6 +5050,17 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset 0.9.0", + "tempfile", + "winapi", +] + [[package]] name = "unic-langid" version = "0.9.4" @@ -4831,6 +5283,12 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + [[package]] name = "walkdir" version = "2.4.0" @@ -4988,9 +5446,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.31.0" +version = "0.31.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e253d7107ba913923dc253967f35e8561a3c65f914543e46843c88ddd729e21c" +checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" dependencies = [ "bitflags 2.4.2", "wayland-backend", @@ -5175,7 +5633,7 @@ dependencies = [ "js-sys", "khronos-egl", "libc", - "libloading 0.8.1", + "libloading 0.7.4", "log", "metal", "naga", @@ -5498,7 +5956,7 @@ dependencies = [ "percent-encoding", "raw-window-handle 0.6.0", "redox_syscall 0.3.5", - "rustix", + "rustix 0.38.30", "smithay-client-toolkit", "smol_str", "unicode-segmentation", @@ -5573,7 +6031,7 @@ dependencies = [ "libc", "libloading 0.8.1", "once_cell", - "rustix", + "rustix 0.38.30", "x11rb-protocol 0.13.0", ] @@ -5604,6 +6062,16 @@ version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" +[[package]] +name = "xdg-home" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e5a325c3cb8398ad6cf859c1135b25dd29e186679cf2da7581d9679f63b38e" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "xdg-user" version = "0.2.1" @@ -5674,6 +6142,72 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1" +[[package]] +name = "zbus" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c45d06ae3b0f9ba1fb2671268b975557d8f5a84bb5ec6e43964f87e763d8bca8" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "byteorder", + "derivative", + "enumflags2", + "event-listener 2.5.3", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix 0.26.4", + "once_cell", + "ordered-stream", + "rand", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "winapi", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4a1ba45ed0ad344b85a2bb5a1fe9830aed23d67812ea39a586e7d0136439c7d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + [[package]] name = "zeno" version = "0.2.3" @@ -5708,3 +6242,41 @@ checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" dependencies = [ "simd-adler32", ] + +[[package]] +name = "zvariant" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c" +dependencies = [ + "byteorder", + "enumflags2", + "libc", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] diff --git a/Cargo.toml b/Cargo.toml index b1326870..95ae920f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,94 +1,111 @@ [package] -name = "cosmic-comp" -version = "0.1.0" +authors = ["Victoria Brekenfeld"] edition = "2021" license = "GPL-3.0-only" -authors = ["Victoria Brekenfeld"] +name = "cosmic-comp" +version = "0.1.0" [workspace] members = [ - "cosmic-comp-config" + "cosmic-comp-config", ] [dependencies] -anyhow = { version = "1.0.51", features = ["backtrace"] } +anyhow = {version = "1.0.51", features = ["backtrace"]} bitflags = "2.4" bytemuck = "1.12" -calloop = { version = "0.12.2", features = ["executor"] } -serde = { version = "1", features = ["derive"] } -serde_json = "1" -sendfd = "0.4.1" -egui = { version = "0.23.0", optional = true } -egui_plot = { version = "0.23.0", optional = true } -renderdoc = { version = "0.11.0", optional = true } -edid-rs = { version = "0.1" } -png = "0.17.5" -lazy_static = "1.4.0" -log-panics = { version = "2", features = ["with-backtrace"] } -thiserror = "1.0.26" -regex = "1" -xcursor = "0.3.3" -xkbcommon = "0.7" +calloop = {version = "0.12.2", features = ["executor"]} +cosmic-comp-config = {path = "cosmic-comp-config"} +cosmic-config = {git = "https://github.com/pop-os/libcosmic/", features = ["calloop", "macro"]} +cosmic-protocols = {git = "https://github.com/pop-os/cosmic-protocols", branch = "main", default-features = false, features = ["server"]} +edid-rs = {version = "0.1"} +egui = {version = "0.23.0", optional = true} +egui_plot = {version = "0.23.0", optional = true} +glow = "0.12.0" +i18n-embed = {version = "0.14", features = ["fluent-system", "desktop-requester"]} +i18n-embed-fl = "0.7" +iced_tiny_skia = {git = "https://github.com/pop-os/libcosmic/"} indexmap = "2.0" -xdg = "^2.1" +keyframe = "1.1.1" +lazy_static = "1.4.0" +libc = "0.2.149" +libcosmic = {git = "https://github.com/pop-os/libcosmic/", default-features = false} +libsystemd = {version = "0.7", optional = true} +log-panics = {version = "2", features = ["with-backtrace"]} +once_cell = "1.18.0" +ordered-float = "4.0" +png = "0.17.5" +puffin = {version = "0.17.0", optional = true} +puffin_egui = {version = "0.23.0", optional = true} +regex = "1" +renderdoc = {version = "0.11.0", optional = true} ron = "0.8" -libsystemd = { version = "0.7", optional = true } +rust-embed = {version = "8.0", features = ["debug-embed"]} +sanitize-filename = "0.5.0" +sendfd = "0.4.1" +serde = {version = "1", features = ["derive"]} +serde_json = "1" +thiserror = "1.0.26" +time = {version = "0.3.30", features = ["macros", "formatting", "local-offset"]} +tiny-skia = "0.11" +tracing = {version = "0.1.37", features = ["max_level_debug", "release_max_level_info"]} +tracing-journald = "0.3.0" +tracing-subscriber = {version = "0.3.16", features = ["env-filter", "tracing-log"]} wayland-backend = "0.3.2" wayland-scanner = "0.31.0" -cosmic-comp-config = { path = "cosmic-comp-config" } -cosmic-config = { git = "https://github.com/pop-os/libcosmic/", features = ["calloop", "macro"] } -cosmic-protocols = { git = "https://github.com/pop-os/cosmic-protocols", branch = "main", default-features = false, features = ["server"] } -libcosmic = { git = "https://github.com/pop-os/libcosmic/", default-features = false } -iced_tiny_skia = { git = "https://github.com/pop-os/libcosmic/" } -tiny-skia = "0.11" -ordered-float = "4.0" -glow = "0.12.0" -tracing-subscriber = { version = "0.3.16", features = ["env-filter", "tracing-log"] } -tracing-journald = "0.3.0" -tracing = { version = "0.1.37", features = ["max_level_debug", "release_max_level_info"] } -puffin = { version = "0.17.0", optional = true } -puffin_egui = { version = "0.23.0", optional = true } -keyframe = "1.1.1" -once_cell = "1.18.0" -i18n-embed = { version = "0.14", features = ["fluent-system", "desktop-requester"] } -i18n-embed-fl = "0.7" -rust-embed = { version = "8.0", features = ["debug-embed"] } -libc = "0.2.149" +xcursor = "0.3.3" +xdg = "^2.1" xdg-user = "0.2.1" -time = { version = "0.3.30", features = ["macros", "formatting", "local-offset"] } -sanitize-filename = "0.5.0" +xkbcommon = "0.7" +zbus = "3.15.0" [dependencies.id_tree] -git = "https://github.com/Drakulix/id-tree.git" branch = "feature/copy_clone" +git = "https://github.com/Drakulix/id-tree.git" [dependencies.smithay] -version = "0.3" +default-features = false +features = [ + "backend_drm", + "backend_gbm", + "backend_egl", + "backend_libinput", + "backend_session_libseat", + "backend_udev", + "backend_winit", + "backend_vulkan", + "backend_x11", + "desktop", + "use_system_lib", + "renderer_glow", + "renderer_multi", + "wayland_frontend", + "xwayland", +] git = "https://github.com/smithay/smithay.git" rev = "74ef59a3f" -default-features = false -features = ["backend_drm", "backend_gbm", "backend_egl", "backend_libinput", "backend_session_libseat", "backend_udev", "backend_winit", "backend_vulkan", "backend_x11", "desktop", "use_system_lib", "renderer_glow", "renderer_multi", "wayland_frontend", "xwayland"] +version = "0.3" [dependencies.smithay-egui] -git = "https://github.com/Smithay/smithay-egui.git" -rev = "cdc652e0" features = ["svg"] +git = "https://github.com/Smithay/smithay-egui.git" optional = true +rev = "cdc652e0" [features] +debug = ["egui", "egui_plot", "smithay-egui", "renderdoc", "puffin", "puffin_egui", "anyhow/backtrace"] default = ["systemd"] systemd = ["libsystemd"] -debug = ["egui", "egui_plot", "smithay-egui", "renderdoc", "puffin", "puffin_egui", "anyhow/backtrace"] [profile.dev] lto = "thin" [profile.fastdebug] -inherits = "release" debug = true +inherits = "release" [profile.release] lto = "fat" [patch."https://github.com/Smithay/smithay.git"] -smithay = { git = "https://github.com/smithay//smithay", rev = "3b3e07952e" } +smithay = {git = "https://github.com/smithay//smithay", rev = "094fa3f7c3"} diff --git a/rust-toolchain.toml b/rust-toolchain.toml index f400973c..7e8f0a9a 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "1.70" +channel = "1.72" diff --git a/src/backend/kms/mod.rs b/src/backend/kms/mod.rs index 39ea10ff..7308d277 100644 --- a/src/backend/kms/mod.rs +++ b/src/backend/kms/mod.rs @@ -1,12 +1,10 @@ // SPDX-License-Identifier: GPL-3.0-only -#[cfg(feature = "debug")] -use crate::backend::render::element::AsGlowRenderer; use crate::{ backend::render::{workspace_elements, CLEAR_COLOR}, config::OutputConfig, shell::Shell, - state::{BackendData, ClientState, Common, Fps, SurfaceDmabufFeedback}, + state::{BackendData, Common, Fps, SurfaceDmabufFeedback}, utils::prelude::*, wayland::{ handlers::screencopy::{render_session, UserdataExt}, @@ -20,9 +18,9 @@ use libc::dev_t; use smithay::{ backend::{ allocator::{ - dmabuf::{AnyError, Dmabuf, DmabufAllocator}, + dmabuf::Dmabuf, gbm::{GbmAllocator, GbmBufferFlags, GbmDevice}, - Allocator, Format, Fourcc, + Format, Fourcc, }, drm::{ compositor::{BlitFrameResultError, DrmCompositor, FrameError, PrimaryPlaneElement}, @@ -65,7 +63,7 @@ use smithay::{ }, wayland_server::{ protocol::{wl_buffer::WlBuffer, wl_surface::WlSurface}, - Client, DisplayHandle, Resource, Weak, + Client, DisplayHandle, Weak, }, }, utils::{DeviceFd, Size, Transform}, @@ -76,7 +74,6 @@ use smithay::{ seat::WaylandFocus, shm::{shm_format_to_fourcc, with_buffer_contents}, }, - xwayland::XWaylandClientData, }; use tracing::{error, info, trace, warn}; @@ -92,7 +89,7 @@ mod drm_helpers; mod socket; use socket::*; -use super::render::{init_shaders, CursorMode, GlMultiRenderer}; +use super::render::{element::AsGlowRenderer, init_shaders, CursorMode, GlMultiRenderer}; // for now we assume we need at least 3ms const MIN_RENDER_TIME: Duration = Duration::from_millis(3); @@ -100,7 +97,7 @@ const MIN_RENDER_TIME: Duration = Duration::from_millis(3); pub struct KmsState { pub devices: HashMap, pub input_devices: HashMap, - pub api: GpuManager>, + pub api: GpuManager>, pub primary_node: DrmNode, session: LibSeatSession, pub auto_assign: bool, @@ -112,7 +109,6 @@ pub struct Device { surfaces: HashMap, pub drm: DrmDevice, gbm: GbmDevice, - allocator: Box>, formats: HashSet, supports_atomic: bool, pub non_desktop_connectors: Vec<(connector::Handle, crtc::Handle)>, @@ -130,7 +126,6 @@ impl fmt::Debug for Device { .field("surfaces", &self.surfaces) .field("drm", &self.drm) .field("gbm", &self.gbm) - .field("allocator", &"...") .field("formats", &self.formats) .field("supports_atomic", &self.supports_atomic) .field("non_desktop_connectors", &self.non_desktop_connectors) @@ -211,7 +206,7 @@ pub fn init_backend( }) .map_err(|err| err.error) .context("Failed to initialize libinput event source")?; - let api = GpuManager::new(GbmGlesBackend::::default()) + let api = GpuManager::new(GbmGlesBackend::::default()) .context("Failed to initialize renderers")?; // TODO get this info from system76-power, if available and setup a watcher @@ -586,15 +581,10 @@ impl State { } }; - let allocator = Box::new(DmabufAllocator(GbmAllocator::new( - gbm.clone(), - GbmBufferFlags::RENDERING, - ))); let mut device = Device { render_node, surfaces: HashMap::new(), gbm: gbm.clone(), - allocator, drm, formats, supports_atomic, @@ -972,7 +962,7 @@ impl Device { crtc: crtc::Handle, conn: connector::Handle, position: (i32, i32), - renderer: &mut GlMultiRenderer<'_, '_>, + renderer: &mut GlMultiRenderer<'_>, ) -> Result { let drm = &mut self.drm; let crtc_info = drm.get_crtc(crtc)?; @@ -1067,19 +1057,13 @@ impl Device { } } -fn source_node_for_surface<'a>( - w: &WlSurface, - mut devices: impl Iterator, -) -> Option { +fn source_node_for_surface<'a>(w: &WlSurface) -> Option { with_renderer_surface_state(w, |state| { - state.buffer().and_then(|buffer| { - devices.find_map(|dev| { - dev.active_buffers - .contains(&buffer.downgrade()) - .then_some(dev.render_node) - }) - }) + state + .buffer() + .and_then(|buffer| get_dmabuf(buffer).ok().and_then(|dmabuf| dmabuf.node())) }) + .flatten() } fn render_node_for_output( @@ -1087,7 +1071,6 @@ fn render_node_for_output( primary_node: DrmNode, target_node: DrmNode, shell: &Shell, - non_target_devices: &Vec<(&DrmNode, &mut Device)>, ) -> DrmNode { if target_node == primary_node { return target_node; @@ -1099,17 +1082,10 @@ fn render_node_for_output( .map(|w| vec![w.clone()]) .unwrap_or_else(|| workspace.windows().collect::>()) .into_iter() - .flat_map(|w| { - w.wl_surface().and_then(|s| { - source_node_for_surface(&s, non_target_devices.iter().map(|(_, dev)| &**dev)) - }) - }) + .flat_map(|w| w.wl_surface().and_then(|s| source_node_for_surface(&s))) .collect::>(); - if nodes.is_empty() { - // we don't want to force needlessly expensive imports, - // so we only choose the target node if it is save and use the main_device otherwise. - // (possibly fixable, once we have kernel API to test for migrations or dmabuf-v5) + if nodes.contains(&target_node) || nodes.is_empty() { target_node } else { primary_node @@ -1149,7 +1125,10 @@ fn get_surface_dmabuf_feedback( .collect::>(); let target_node = surface.device_fd().dev_id().unwrap(); - let mut builder = DmabufFeedbackBuilder::new(render_node.dev_id(), render_formats); + let builder = DmabufFeedbackBuilder::new(render_node.dev_id(), render_formats); + /* + // iris doesn't handle nvidia buffers very well (it hangs). + // so only do this in the future with v6 and clients telling us the gpu if target_node != render_node.dev_id() && !combined_formats.is_empty() { builder = builder.add_preference_tranche( target_node, @@ -1157,16 +1136,22 @@ fn get_surface_dmabuf_feedback( combined_formats, ); }; - let render_feedback = builder.clone().build().unwrap(); + */ - let scanout_feedback = builder - .add_preference_tranche( - target_node, - Some(zwp_linux_dmabuf_feedback_v1::TrancheFlags::Scanout), - planes_formats, - ) - .build() - .unwrap(); + let render_feedback = builder.clone().build().unwrap(); + // we would want to do this in other cases as well, but same thing as above applies + let scanout_feedback = if target_node == render_node.dev_id() { + builder + .add_preference_tranche( + target_node, + Some(zwp_linux_dmabuf_feedback_v1::TrancheFlags::Scanout), + planes_formats, + ) + .build() + .unwrap() + } else { + builder.build().unwrap() + }; SurfaceDmabufFeedback { render_feedback, @@ -1177,11 +1162,8 @@ fn get_surface_dmabuf_feedback( impl Surface { pub fn render_output( &mut self, - api: &mut GpuManager>, - render_node: Option<( - &DrmNode, - &mut dyn Allocator, - )>, + api: &mut GpuManager>, + render_node: Option<&DrmNode>, target_node: &DrmNode, state: &mut Common, screencopy: Option<&[(ScreencopySession, BufferParams)]>, @@ -1195,9 +1177,9 @@ impl Surface { let compositor = self.surface.as_mut().unwrap(); let (render_node, mut renderer) = match render_node { - Some((render_node, allocator)) => ( + Some(render_node) => ( render_node, - api.renderer(&render_node, &target_node, allocator, compositor.format()) + api.renderer(&render_node, &target_node, compositor.format()) .unwrap(), ), None => (target_node, api.single_renderer(&target_node).unwrap()), @@ -1536,6 +1518,7 @@ impl KmsState { } Ok(()) } + pub fn target_node_for_output(&self, output: &Output) -> Option { self.devices .values() @@ -1546,34 +1529,13 @@ impl KmsState { pub fn try_early_import( &mut self, - dh: &DisplayHandle, surface: &WlSurface, output: &Output, target: DrmNode, shell: &Shell, ) { - let render = render_node_for_output( - &output, - self.primary_node, - target, - &shell, - &self.devices.iter_mut().collect(), - ); - if let Err(err) = self.api.early_import( - if let Some(client) = dh.get_client(surface.id()).ok() { - if let Some(normal_client) = client.get_data::() { - normal_client.advertised_drm_node.clone() - } else if let Some(xwayland_client) = client.get_data::() { - xwayland_client.user_data().get::().cloned() - } else { - None - } - } else { - None - }, - render, - surface, - ) { + let render = render_node_for_output(&output, self.primary_node, target, &shell); + if let Err(err) = self.api.early_import(render, surface) { trace!(?err, "Early import failed."); } } @@ -1616,12 +1578,17 @@ impl KmsState { let result = self .api .single_renderer(&device.render_node)? + // using the MultiRenderer here would actually try multiple devices + .glow_renderer_mut() .import_dmabuf(&dmabuf, None) .map(|_| device.render_node) .map_err(Into::into); match result { - Ok(node) => return Ok(node), + Ok(node) => { + dmabuf.set_node(node); // so the MultiRenderer knows what node to use + return Ok(node); + } Err(err) => { trace!(?err, "Failed to import dmabuf on {:?}", device.render_node); last_err = err; @@ -1683,16 +1650,15 @@ impl KmsState { let target_device = &mut device[0].1; if let Some(surface) = target_device.surfaces.get_mut(&crtc) { + let common = &mut state.common; let target_node = target_device.render_node; let render_node = render_node_for_output( &surface.output, backend.primary_node, target_node, - &state.common.shell, - &other, + &common.shell, ); - let common = &mut state.common; let result = if render_node != target_node { let render_device = &mut other .iter_mut() @@ -1701,10 +1667,7 @@ impl KmsState { .1; surface.render_output( &mut backend.api, - Some(( - &render_device.render_node, - render_device.allocator.as_mut(), - )), + Some(&render_device.render_node), &target_node, common, screencopy_sessions.as_deref(), diff --git a/src/backend/render/element.rs b/src/backend/render/element.rs index d1e51b9d..d86ab742 100644 --- a/src/backend/render/element.rs +++ b/src/backend/render/element.rs @@ -161,10 +161,10 @@ impl RenderElement for CosmicElement { } } -impl<'a, 'b> RenderElement> for CosmicElement> { +impl<'a> RenderElement> for CosmicElement> { fn draw<'frame>( &self, - frame: &mut GlMultiFrame<'a, 'b, 'frame>, + frame: &mut GlMultiFrame<'a, 'frame>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], @@ -185,10 +185,7 @@ impl<'a, 'b> RenderElement> for CosmicElement, - ) -> Option { + fn underlying_storage(&self, renderer: &mut GlMultiRenderer<'a>) -> Option { match self { CosmicElement::Workspace(elem) => elem.underlying_storage(renderer), CosmicElement::Cursor(elem) => elem.underlying_storage(renderer), @@ -273,7 +270,7 @@ impl AsGlowRenderer for GlowRenderer { } } -impl<'a, 'b> AsGlowRenderer for GlMultiRenderer<'a, 'b> { +impl<'a> AsGlowRenderer for GlMultiRenderer<'a> { fn glow_renderer(&self) -> &GlowRenderer { self.as_ref() } @@ -299,7 +296,7 @@ impl<'frame> AsGlowFrame<'frame> for GlowFrame<'frame> { } } -impl<'renderer, 'alloc, 'frame> AsGlowFrame<'frame> for GlMultiFrame<'renderer, 'alloc, 'frame> { +impl<'renderer, 'frame> AsGlowFrame<'frame> for GlMultiFrame<'renderer, 'frame> { fn glow_frame(&self) -> &GlowFrame<'frame> { self.as_ref() } diff --git a/src/backend/render/mod.rs b/src/backend/render/mod.rs index 38348877..b3b0a829 100644 --- a/src/backend/render/mod.rs +++ b/src/backend/render/mod.rs @@ -40,7 +40,7 @@ use keyframe::{ease, functions::EaseInOutCubic}; use smithay::{ backend::{ allocator::dmabuf::Dmabuf, - drm::DrmNode, + drm::{DrmDeviceFd, DrmNode}, renderer::{ buffer_dimensions, damage::{Error as RenderError, OutputDamageTracker, RenderOutputResult}, @@ -75,11 +75,23 @@ use self::cursor::CursorRenderElement; pub mod element; use self::element::{AsGlowRenderer, CosmicElement}; -pub type GlMultiRenderer<'a, 'b> = - MultiRenderer<'a, 'a, 'b, GbmGlesBackend, GbmGlesBackend>; -pub type GlMultiFrame<'a, 'b, 'frame> = - MultiFrame<'a, 'a, 'b, 'frame, GbmGlesBackend, GbmGlesBackend>; -pub type GlMultiError = MultiError, GbmGlesBackend>; +pub type GlMultiRenderer<'a> = MultiRenderer< + 'a, + 'a, + GbmGlesBackend, + GbmGlesBackend, +>; +pub type GlMultiFrame<'a, 'frame> = MultiFrame< + 'a, + 'a, + 'frame, + GbmGlesBackend, + GbmGlesBackend, +>; +pub type GlMultiError = MultiError< + GbmGlesBackend, + GbmGlesBackend, +>; pub static CLEAR_COLOR: [f32; 4] = [0.153, 0.161, 0.165, 1.0]; pub static OUTLINE_SHADER: &str = include_str!("./shaders/rounded_outline.frag"); diff --git a/src/shell/element/mod.rs b/src/shell/element/mod.rs index 3be54355..c92bc179 100644 --- a/src/shell/element/mod.rs +++ b/src/shell/element/mod.rs @@ -1421,12 +1421,10 @@ impl RenderElement for CosmicMappedRenderElement { } } -impl<'a, 'b> RenderElement> - for CosmicMappedRenderElement> -{ +impl<'a> RenderElement> for CosmicMappedRenderElement> { fn draw<'frame>( &self, - frame: &mut GlMultiFrame<'a, 'b, 'frame>, + frame: &mut GlMultiFrame<'a, 'frame>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], @@ -1464,10 +1462,7 @@ impl<'a, 'b> RenderElement> } } - fn underlying_storage( - &self, - renderer: &mut GlMultiRenderer<'a, 'b>, - ) -> Option { + fn underlying_storage(&self, renderer: &mut GlMultiRenderer<'a>) -> Option { match self { CosmicMappedRenderElement::Stack(elem) => elem.underlying_storage(renderer), CosmicMappedRenderElement::Window(elem) => elem.underlying_storage(renderer), diff --git a/src/shell/workspace.rs b/src/shell/workspace.rs index 456713c8..19341e81 100644 --- a/src/shell/workspace.rs +++ b/src/shell/workspace.rs @@ -1116,12 +1116,10 @@ impl RenderElement for WorkspaceRenderElement { } } -impl<'a, 'b> RenderElement> - for WorkspaceRenderElement> -{ +impl<'a> RenderElement> for WorkspaceRenderElement> { fn draw<'frame>( &self, - frame: &mut GlMultiFrame<'a, 'b, 'frame>, + frame: &mut GlMultiFrame<'a, 'frame>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], @@ -1140,7 +1138,7 @@ impl<'a, 'b> RenderElement> fn underlying_storage( &self, - renderer: &mut GlMultiRenderer<'a, 'b>, + renderer: &mut GlMultiRenderer<'a>, ) -> Option { match self { WorkspaceRenderElement::OverrideRedirect(elem) => elem.underlying_storage(renderer), diff --git a/src/wayland/handlers/compositor.rs b/src/wayland/handlers/compositor.rs index 372241f0..8a3f9740 100644 --- a/src/wayland/handlers/compositor.rs +++ b/src/wayland/handlers/compositor.rs @@ -35,18 +35,11 @@ use super::screencopy::PendingScreencopyBuffers; impl State { fn early_import_surface(&mut self, surface: &WlSurface) { let mut import_nodes = std::collections::HashSet::new(); - let dh = &self.common.display_handle; if let Some(output) = self.common.shell.visible_output_for_surface(&surface) { if let BackendData::Kms(ref mut kms_state) = &mut self.backend { if let Some(target) = kms_state.target_node_for_output(&output) { if import_nodes.insert(target) { - kms_state.try_early_import( - dh, - surface, - &output, - target, - &self.common.shell, - ); + kms_state.try_early_import(surface, &output, target, &self.common.shell); } } } @@ -184,6 +177,7 @@ impl CompositorHandler for State { let toplevel = wl_window.toplevel(); if self.toplevel_ensure_initial_configure(&toplevel) && with_renderer_surface_state(&surface, |state| state.buffer().is_some()) + .unwrap_or(false) { window.on_commit(); Shell::map_window(self, &window);