From 65fb228db559dbcd52623bc0c8388028580b6679 Mon Sep 17 00:00:00 2001 From: Ferdinand Schober Date: Fri, 19 Jul 2024 12:58:52 +0200 Subject: [PATCH] upgrade dependencies --- Cargo.lock | 212 +++++++++++----------- Cargo.toml | 6 +- input-capture/Cargo.toml | 4 +- input-capture/src/libei.rs | 32 ++-- input-emulation/Cargo.toml | 42 ++++- input-emulation/src/libei.rs | 14 +- input-emulation/src/xdg_desktop_portal.rs | 11 +- src/frontend/gtk.rs | 80 ++++---- src/frontend/gtk/client_row/imp.rs | 9 +- src/frontend/gtk/window.rs | 80 +++++--- src/frontend/gtk/window/imp.rs | 14 +- 11 files changed, 297 insertions(+), 207 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1a1bc3d..5ff1a53 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -98,9 +98,9 @@ dependencies = [ [[package]] name = "ashpd" -version = "0.8.1" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd884d7c72877a94102c3715f3b1cd09ff4fac28221add3e57cfbe25c236d093" +checksum = "bfe7e0dd0ac5a401dc116ed9f9119cf9decc625600474cb41f0fc0a0050abc9a" dependencies = [ "enumflags2", "futures-channel", @@ -200,9 +200,9 @@ dependencies = [ [[package]] name = "async-signal" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794f185324c2f00e771cd9f1ae8b5ac68be2ca7abb129a87afd6e86d228bc54d" +checksum = "dfb3634b73397aa844481f814fad23bbf07fdb0eabec10f2eb95e58944b1ec32" dependencies = [ "async-io", "async-lock", @@ -296,15 +296,15 @@ dependencies = [ [[package]] name = "bytes" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" +checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952" [[package]] name = "cairo-rs" -version = "0.19.4" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ac2a4d0e69036cf0062976f6efcba1aaee3e448594e6514bb2ddf87acce562" +checksum = "797fd5a634dcb0ad0d7d583df794deb0a236d88e759cd34b7da20198c6c9d145" dependencies = [ "bitflags 2.6.0", "cairo-sys-rs", @@ -315,9 +315,9 @@ dependencies = [ [[package]] name = "cairo-sys-rs" -version = "0.19.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3bb3119664efbd78b5e6c93957447944f16bdbced84c17a9f41c7829b81e64" +checksum = "428290f914b9b86089f60f5d8a9f6e440508e1bcff23b25afd51502b0a2da88f" dependencies = [ "glib-sys", "libc", @@ -326,9 +326,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.0" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaff6f8ce506b9773fa786672d63fc7a191ffea1be33f72bbd4aeacefca9ffc8" +checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f" [[package]] name = "cfg-expr" @@ -758,9 +758,9 @@ dependencies = [ [[package]] name = "gdk-pixbuf" -version = "0.19.8" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624eaba126021103c7339b2e179ae4ee8cdab842daab419040710f38ed9f8699" +checksum = "28bb53ecb56857c683c9ec859908e076dd3969c7d67598bd8b1ce095d211304a" dependencies = [ "gdk-pixbuf-sys", "gio", @@ -770,9 +770,9 @@ dependencies = [ [[package]] name = "gdk-pixbuf-sys" -version = "0.19.8" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4efa05a4f83c8cc50eb4d883787b919b85e5f1d8dd10b5a1df53bf5689782379" +checksum = "9f6681a0c1330d1d3968bec1529f7172d62819ef0bdbb0d18022320654158b03" dependencies = [ "gio-sys", "glib-sys", @@ -783,9 +783,9 @@ dependencies = [ [[package]] name = "gdk4" -version = "0.8.2" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db265c9dd42d6a371e09e52deab3a84808427198b86ac792d75fd35c07990a07" +checksum = "4b7d7237c1487ed4b300aac7744efcbf1319e12d60d7afcd6f505414bd5b5dea" dependencies = [ "cairo-rs", "gdk-pixbuf", @@ -798,9 +798,9 @@ dependencies = [ [[package]] name = "gdk4-sys" -version = "0.8.2" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9418fb4e8a67074919fe7604429c45aa74eb9df82e7ca529767c6d4e9dc66dd" +checksum = "a67576c8ec012156d7f680e201a807b4432a77babb3157e0555e990ab6bcd878" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -842,9 +842,9 @@ checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "gio" -version = "0.19.8" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c49f117d373ffcc98a35d114db5478bc223341cff53e39a5d6feced9e2ddffe" +checksum = "398e3da68749fdc32783cbf7521ec3f65c9cf946db8c7774f8460af49e52c6e2" dependencies = [ "futures-channel", "futures-core", @@ -860,9 +860,9 @@ dependencies = [ [[package]] name = "gio-sys" -version = "0.19.8" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd743ba4714d671ad6b6234e8ab2a13b42304d0e13ab7eba1dcdd78a7d6d4ef" +checksum = "e4feb96b31c32730ea3e1e89aecd2e4e37ecb1c473ad8f685e3430a159419f63" dependencies = [ "glib-sys", "gobject-sys", @@ -873,9 +873,9 @@ dependencies = [ [[package]] name = "glib" -version = "0.19.9" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39650279f135469465018daae0ba53357942a5212137515777d5fdca74984a44" +checksum = "fee90a615ce05be7a32932cfb8adf2c4bbb4700e80d37713c981fb24c0c56238" dependencies = [ "bitflags 2.6.0", "futures-channel", @@ -895,18 +895,18 @@ dependencies = [ [[package]] name = "glib-build-tools" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "108f374fff60efd14b0d70d8916e7213aed18d7dd071ba3e9334ed2dac1dc86a" +checksum = "7029c2651d9b5d5a3eea93ec8a1995665c6d3a69ce9bf6042ad9064d134736d8" dependencies = [ "gio", ] [[package]] name = "glib-macros" -version = "0.19.9" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4429b0277a14ae9751350ad9b658b1be0abb5b54faa5bcdf6e74a3372582fad7" +checksum = "4da558d8177c0c8c54368818b508a4244e1286fce2858cef4e547023f0cfa5ef" dependencies = [ "heck 0.5.0", "proc-macro-crate", @@ -917,9 +917,9 @@ dependencies = [ [[package]] name = "glib-sys" -version = "0.19.8" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c2dc18d3a82b0006d470b13304fbbb3e0a9bd4884cf985a60a7ed733ac2c4a5" +checksum = "4958c26e5a01c9af00dea669a97369eccbec29a8e6d125c24ea2d85ee7467b60" dependencies = [ "libc", "system-deps", @@ -927,9 +927,9 @@ dependencies = [ [[package]] name = "gobject-sys" -version = "0.19.8" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e697e252d6e0416fd1d9e169bda51c0f1c926026c39ca21fbe8b1bb5c3b8b9e" +checksum = "c6908864f5ffff15b56df7e90346863904f49b949337ed0456b9287af61903b8" dependencies = [ "glib-sys", "libc", @@ -938,9 +938,9 @@ dependencies = [ [[package]] name = "graphene-rs" -version = "0.19.8" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5fb86031d24d9ec0a2a15978fc7a65d545a2549642cf1eb7c3dda358da42bcf" +checksum = "630e940ad5824f90221d6579043a9cd1f8bec86b4a17faaf7827d58eb16e8c1f" dependencies = [ "glib", "graphene-sys", @@ -949,9 +949,9 @@ dependencies = [ [[package]] name = "graphene-sys" -version = "0.19.8" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f530e0944bccba4b55065e9c69f4975ad691609191ebac16e13ab8e1f27af05" +checksum = "6fb8fade7b754982f47ebbed241fd2680816fdd4598321784da10b9e1168836a" dependencies = [ "glib-sys", "libc", @@ -961,9 +961,9 @@ dependencies = [ [[package]] name = "gsk4" -version = "0.8.2" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7563884bf6939f4468e5d94654945bdd9afcaf8c3ba4c5dd17b5342b747221be" +checksum = "1f3cf2091e1af185b347b3450817d93dea6fe435df7abd4c2cd7fb5bcb4cfda8" dependencies = [ "cairo-rs", "gdk4", @@ -976,9 +976,9 @@ dependencies = [ [[package]] name = "gsk4-sys" -version = "0.8.2" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23024bf2636c38bbd1f822f58acc9d1c25b28da896ff0f291a1a232d4272b3dc" +checksum = "6aa69614a26d8760c186c3690f1b0fbb917572ca23ef83137445770ceddf8cde" dependencies = [ "cairo-sys-rs", "gdk4-sys", @@ -992,9 +992,9 @@ dependencies = [ [[package]] name = "gtk4" -version = "0.8.2" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b04e11319b08af11358ab543105a9e49b0c491faca35e2b8e7e36bfba8b671ab" +checksum = "eaffc6c743c9160514cc9b67eace364e5dc5798369fa809cdb04e035c21c5c5d" dependencies = [ "cairo-rs", "field-offset", @@ -1013,9 +1013,9 @@ dependencies = [ [[package]] name = "gtk4-macros" -version = "0.8.2" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec655a7ef88d8ce9592899deb8b2d0fa50bab1e6dd69182deb764e643c522408" +checksum = "188211f546ce5801f6d0245c37b6249143a2cb4fa040e54829ca1e76796e9f09" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1025,9 +1025,9 @@ dependencies = [ [[package]] name = "gtk4-sys" -version = "0.8.2" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c8aa86b7f85ea71d66ea88c1d4bae1cfacf51ca4856274565133838d77e57b5" +checksum = "1114a207af8ada02cf4658a76692f4190f06f093380d5be07e3ca8b43aa7c666" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -1211,7 +1211,7 @@ dependencies = [ "wayland-client", "wayland-protocols", "wayland-protocols-wlr", - "windows 0.57.0", + "windows 0.58.0", "x11", ] @@ -1234,7 +1234,7 @@ dependencies = [ "wayland-protocols", "wayland-protocols-misc", "wayland-protocols-wlr", - "windows 0.57.0", + "windows 0.58.0", "x11", ] @@ -1335,11 +1335,10 @@ dependencies = [ [[package]] name = "libadwaita" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91b4990248b9e1ec5e72094a2ccaea70ec3809f88f6fd52192f2af306b87c5d9" +checksum = "2ff9c222b5c783729de45185f07b2fec2d43a7f9c63961e777d3667e20443878" dependencies = [ - "gdk-pixbuf", "gdk4", "gio", "glib", @@ -1351,9 +1350,9 @@ dependencies = [ [[package]] name = "libadwaita-sys" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a748e4e92be1265cd9e93d569c0b5dfc7814107985aa6743d670ab281ea1a8" +checksum = "1c44d8bdbad31d6639e1f20cc9c1424f1a8e02d751fc28d44659bf743fb9eca6" dependencies = [ "gdk4-sys", "gio-sys", @@ -1546,9 +1545,9 @@ dependencies = [ [[package]] name = "pango" -version = "0.19.8" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f0d328648058085cfd6897c9ae4272884098a926f3a833cd50c8c73e6eccecd" +checksum = "54768854025df6903061d0084fd9702a253ddfd60db7d9b751d43b76689a7f0a" dependencies = [ "gio", "glib", @@ -1558,9 +1557,9 @@ dependencies = [ [[package]] name = "pango-sys" -version = "0.19.8" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff03da4fa086c0b244d4a4587d3e20622a3ecdb21daea9edf66597224c634ba0" +checksum = "b07cc57d10cee4ec661f718a6902cee18c2f4cfae08e87e5a390525946913390" dependencies = [ "glib-sys", "gobject-sys", @@ -1727,9 +1726,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ "bitflags 2.6.0", ] @@ -1946,9 +1945,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.70" +version = "2.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0209b68b3613b093e0ec905354eccaedcfe83b8cb37cbdeae64026c3064c16" +checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" dependencies = [ "proc-macro2", "quote", @@ -1957,9 +1956,9 @@ dependencies = [ [[package]] name = "system-deps" -version = "6.2.2" +version = "7.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" +checksum = "6c81f13d9a334a6c242465140bd262fae382b752ff2011c4f7419919a9c97922" dependencies = [ "cfg-expr", "heck 0.5.0", @@ -1988,18 +1987,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.61" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", @@ -2023,9 +2022,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.38.0" +version = "1.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" +checksum = "eb2caba9f80616f438e09748d5acda951967e1ea58508ef53d9c6402485a46df" dependencies = [ "backtrace", "bytes", @@ -2066,14 +2065,14 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" +checksum = "ac2caab0bf757388c6c0ae23b3293fdb463fee59434529014f85e3263b995c28" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.15", + "toml_edit 0.22.16", ] [[package]] @@ -2098,9 +2097,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.15" +version = "0.22.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59a3a72298453f564e2b111fa896f8d07fabb36f51f06d7e875fc5e0b5a3ef1" +checksum = "278f3d518e152219c994ce877758516bca5e118eaed6996192a774fb9fbf0788" dependencies = [ "indexmap", "serde", @@ -2222,9 +2221,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wayland-backend" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "269c04f203640d0da2092d1b8d89a2d081714ae3ac2f1b53e99f205740517198" +checksum = "f90e11ce2ca99c97b940ee83edbae9da2d56a08f9ea8158550fd77fa31722993" dependencies = [ "cc", "downcast-rs", @@ -2236,9 +2235,9 @@ dependencies = [ [[package]] name = "wayland-client" -version = "0.31.4" +version = "0.31.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bd0f46c069d3382a36c8666c1b9ccef32b8b04f41667ca1fef06a1adcc2982" +checksum = "7e321577a0a165911bdcfb39cf029302479d7527b517ee58ab0f6ad09edf0943" dependencies = [ "bitflags 2.6.0", "rustix", @@ -2248,9 +2247,9 @@ dependencies = [ [[package]] name = "wayland-protocols" -version = "0.32.2" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1794d82d869f38439d15c24b26f06f6c8603d27d47b4f786d5197c99044de415" +checksum = "62989625a776e827cc0f15d41444a3cea5205b963c3a25be48ae1b52d6b4daaa" dependencies = [ "bitflags 2.6.0", "wayland-backend", @@ -2260,9 +2259,9 @@ dependencies = [ [[package]] name = "wayland-protocols-misc" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b497d7edd777ca365f2cce3837046b7832365b2a0b32f9c913b4e6f8d99839" +checksum = "dfe44d48a0e51909c89da297f6b43bb814b881c78b69e254a4558a5fa8752887" dependencies = [ "bitflags 2.6.0", "wayland-backend", @@ -2273,9 +2272,9 @@ dependencies = [ [[package]] name = "wayland-protocols-wlr" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa43c961473aed713d44c1f616f775186249dfca657f256d8841ca0690366aba" +checksum = "fd993de54a40a40fbe5601d9f1fbcaef0aebcc5fda447d7dc8f6dcbaae4f8953" dependencies = [ "bitflags 2.6.0", "wayland-backend", @@ -2286,9 +2285,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.3" +version = "0.31.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edf466fc49a4feb65a511ca403fec3601494d0dee85dbf37fff6fa0dd4eec3b6" +checksum = "d7b56f89937f1cf2ee1f1259cf2936a17a1f45d8f0aa1019fae6d470d304cfa6" dependencies = [ "proc-macro2", "quick-xml", @@ -2297,9 +2296,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.3" +version = "0.31.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6754825230fa5b27bafaa28c30b3c9e72c55530581220cef401fa422c0fae7" +checksum = "43676fe2daf68754ecf1d72026e4e6c15483198b5d24e888b74d3f22f887a148" dependencies = [ "dlib", "log", @@ -2346,11 +2345,11 @@ dependencies = [ [[package]] name = "windows" -version = "0.57.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-core 0.57.0", + "windows-core 0.58.0", "windows-targets 0.52.6", ] @@ -2365,21 +2364,22 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.57.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ "windows-implement", "windows-interface", "windows-result", + "windows-strings", "windows-targets 0.52.6", ] [[package]] name = "windows-implement" -version = "0.57.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", @@ -2388,9 +2388,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.57.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", @@ -2399,13 +2399,23 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" diff --git a/Cargo.toml b/Cargo.toml index d5d4391..1286ba7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,10 +37,10 @@ tokio = { version = "1.32.0", features = [ ] } futures = "0.3.28" clap = { version = "4.4.11", features = ["derive"] } -gtk = { package = "gtk4", version = "0.8.1", features = [ +gtk = { package = "gtk4", version = "0.9.0", features = [ "v4_2", ], optional = true } -adw = { package = "libadwaita", version = "0.6.0", features = [ +adw = { package = "libadwaita", version = "0.7.0", features = [ "v1_1", ], optional = true } async-channel = { version = "2.1.1", optional = true } @@ -54,7 +54,7 @@ tokio-util = "0.7.11" libc = "0.2.148" [build-dependencies] -glib-build-tools = { version = "0.19.0", optional = true } +glib-build-tools = { version = "0.20.0", optional = true } [features] default = ["wayland", "x11", "xdg_desktop_portal", "libei", "gtk"] diff --git a/input-capture/Cargo.toml b/input-capture/Cargo.toml index aedfae5..2a43bc7 100644 --- a/input-capture/Cargo.toml +++ b/input-capture/Cargo.toml @@ -40,7 +40,7 @@ wayland-protocols-wlr = { version = "0.3.1", features = [ "client", ], optional = true } x11 = { version = "2.21.0", features = ["xlib", "xtest"], optional = true } -ashpd = { version = "0.8", default-features = false, features = [ +ashpd = { version = "0.9", default-features = false, features = [ "tokio", ], optional = true } reis = { version = "0.2", features = ["tokio"], optional = true } @@ -49,7 +49,7 @@ reis = { version = "0.2", features = ["tokio"], optional = true } core-graphics = { version = "0.23", features = ["highsierra"] } [target.'cfg(windows)'.dependencies] -windows = { version = "0.57.0", features = [ +windows = { version = "0.58.0", features = [ "Win32_System_LibraryLoader", "Win32_System_Threading", "Win32_Foundation", diff --git a/input-capture/src/libei.rs b/input-capture/src/libei.rs index 5c9c5a8..6631698 100644 --- a/input-capture/src/libei.rs +++ b/input-capture/src/libei.rs @@ -118,7 +118,7 @@ fn select_barriers( async fn update_barriers( input_capture: &InputCapture<'_>, - session: &Session<'_>, + session: &Session<'_, InputCapture<'_>>, active_clients: &Vec<(CaptureHandle, Position)>, next_barrier_id: &mut u32, ) -> Result, ashpd::Error> { @@ -139,7 +139,7 @@ async fn update_barriers( async fn create_session<'a>( input_capture: &'a InputCapture<'a>, -) -> std::result::Result<(Session<'a>, BitFlags), ashpd::Error> { +) -> std::result::Result<(Session<'_, InputCapture<'_>>, BitFlags), ashpd::Error> { log::debug!("creating input capture session"); input_capture .create_session( @@ -151,7 +151,7 @@ async fn create_session<'a>( async fn connect_to_eis( input_capture: &InputCapture<'_>, - session: &Session<'_>, + session: &Session<'_, InputCapture<'_>>, ) -> Result<(ei::Context, EiConvertEventStream), CaptureError> { log::debug!("connect_to_eis"); let fd = input_capture.connect_to_eis(session).await?; @@ -230,11 +230,11 @@ impl<'a> LibeiInputCapture<'a> { } } -async fn do_capture<'a>( - input_capture: *const InputCapture<'a>, +async fn do_capture( + input_capture: *const InputCapture<'static>, mut capture_event: Receiver, notify_release: Arc, - session: Option<(Session<'a>, BitFlags)>, + session: Option<(Session<'_, InputCapture<'_>>, BitFlags)>, event_tx: Sender<(CaptureHandle, Event)>, cancellation_token: CancellationToken, ) -> Result<(), CaptureError> { @@ -330,7 +330,7 @@ async fn do_capture<'a>( async fn do_capture_session( input_capture: &InputCapture<'_>, - session: &mut Session<'_>, + session: &mut Session<'_, InputCapture<'_>>, event_tx: &Sender<(CaptureHandle, Event)>, active_clients: &mut Vec<(CaptureHandle, Position)>, next_barrier_id: &mut u32, @@ -389,7 +389,7 @@ async fn do_capture_session( log::debug!("activated: {activated:?}"); let client = *client_for_barrier_id - .get(&activated.barrier_id()) + .get(&activated.barrier_id().expect("no barrier id reported by compositor!")) .expect("invalid barrier id"); current_client.replace(Some(client)); @@ -449,15 +449,19 @@ async fn do_capture_session( Ok(()) } -async fn release_capture( - input_capture: &InputCapture<'_>, - session: &Session<'_>, +async fn release_capture<'a>( + input_capture: &InputCapture<'a>, + session: &Session<'a, InputCapture<'a>>, activated: Activated, current_client: CaptureHandle, active_clients: &[(CaptureHandle, Position)], ) -> Result<(), CaptureError> { - log::debug!("releasing input capture {}", activated.activation_id()); - let (x, y) = activated.cursor_position(); + if let Some(activation_id) = activated.activation_id() { + log::debug!("releasing input capture {activation_id}"); + } + let (x, y) = activated + .cursor_position() + .expect("compositor did not report cursor position!"); let pos = active_clients .iter() .filter(|(c, _)| *c == current_client) @@ -474,7 +478,7 @@ async fn release_capture( // release 1px to the right of the entered zone let cursor_position = (x as f64 + dx, y as f64 + dy); input_capture - .release(session, activated.activation_id(), cursor_position) + .release(session, activated.activation_id(), Some(cursor_position)) .await?; Ok(()) } diff --git a/input-emulation/Cargo.toml b/input-emulation/Cargo.toml index d7df386..73a7968 100644 --- a/input-emulation/Cargo.toml +++ b/input-emulation/Cargo.toml @@ -12,24 +12,43 @@ futures = "0.3.28" log = "0.4.22" input-event = { path = "../input-event", version = "0.1.0" } thiserror = "1.0.61" -tokio = { version = "1.32.0", features = ["io-util", "io-std", "macros", "net", "process", "rt", "sync", "signal"] } +tokio = { version = "1.32.0", features = [ + "io-util", + "io-std", + "macros", + "net", + "process", + "rt", + "sync", + "signal", +] } once_cell = "1.19.0" [target.'cfg(all(unix, not(target_os="macos")))'.dependencies] -wayland-client = { version="0.31.1", optional = true } -wayland-protocols = { version="0.32.1", features=["client", "staging", "unstable"], optional = true } -wayland-protocols-wlr = { version="0.3.1", features=["client"], optional = true } -wayland-protocols-misc = { version="0.3.1", features=["client"], optional = true } +wayland-client = { version = "0.31.1", optional = true } +wayland-protocols = { version = "0.32.1", features = [ + "client", + "staging", + "unstable", +], optional = true } +wayland-protocols-wlr = { version = "0.3.1", features = [ + "client", +], optional = true } +wayland-protocols-misc = { version = "0.3.1", features = [ + "client", +], optional = true } x11 = { version = "2.21.0", features = ["xlib", "xtest"], optional = true } -ashpd = { version = "0.8", default-features = false, features = ["tokio"], optional = true } -reis = { version = "0.2", features = [ "tokio" ], optional = true } +ashpd = { version = "0.9", default-features = false, features = [ + "tokio", +], optional = true } +reis = { version = "0.2", features = ["tokio"], optional = true } [target.'cfg(target_os="macos")'.dependencies] core-graphics = { version = "0.23", features = ["highsierra"] } keycode = "0.4.0" [target.'cfg(windows)'.dependencies] -windows = { version = "0.57.0", features = [ +windows = { version = "0.58.0", features = [ "Win32_System_LibraryLoader", "Win32_System_Threading", "Win32_Foundation", @@ -41,7 +60,12 @@ windows = { version = "0.57.0", features = [ [features] default = ["wayland", "x11", "xdg_desktop_portal", "libei"] -wayland = ["dep:wayland-client", "dep:wayland-protocols", "dep:wayland-protocols-wlr", "dep:wayland-protocols-misc" ] +wayland = [ + "dep:wayland-client", + "dep:wayland-protocols", + "dep:wayland-protocols-wlr", + "dep:wayland-protocols-misc", +] x11 = ["dep:x11"] xdg_desktop_portal = ["dep:ashpd"] libei = ["dep:reis", "dep:ashpd"] diff --git a/input-emulation/src/libei.rs b/input-emulation/src/libei.rs index 06510f0..741a980 100644 --- a/input-emulation/src/libei.rs +++ b/input-emulation/src/libei.rs @@ -15,7 +15,7 @@ use tokio::task::JoinHandle; use ashpd::{ desktop::{ remote_desktop::{DeviceType, RemoteDesktop}, - Session, + PersistMode, Session, }, WindowIdentifier, }; @@ -68,10 +68,11 @@ pub struct LibeiEmulation<'a> { libei_error: Arc, serial: AtomicU32, _remote_desktop: RemoteDesktop<'a>, - session: Session<'a>, + session: Session<'a, RemoteDesktop<'a>>, } -async fn get_ei_fd<'a>() -> Result<(RemoteDesktop<'a>, Session<'a>, OwnedFd), ashpd::Error> { +async fn get_ei_fd<'a>( +) -> Result<(RemoteDesktop<'a>, Session<'a, RemoteDesktop<'a>>, OwnedFd), ashpd::Error> { let remote_desktop = RemoteDesktop::new().await?; log::debug!("creating session ..."); @@ -79,7 +80,12 @@ async fn get_ei_fd<'a>() -> Result<(RemoteDesktop<'a>, Session<'a>, OwnedFd), as log::debug!("selecting devices ..."); remote_desktop - .select_devices(&session, DeviceType::Keyboard | DeviceType::Pointer) + .select_devices( + &session, + DeviceType::Keyboard | DeviceType::Pointer, + None, + PersistMode::ExplicitlyRevoked, + ) .await?; log::info!("requesting permission for input emulation"); diff --git a/input-emulation/src/xdg_desktop_portal.rs b/input-emulation/src/xdg_desktop_portal.rs index 4576a1d..2d73d70 100644 --- a/input-emulation/src/xdg_desktop_portal.rs +++ b/input-emulation/src/xdg_desktop_portal.rs @@ -1,7 +1,7 @@ use ashpd::{ desktop::{ remote_desktop::{Axis, DeviceType, KeyState, RemoteDesktop}, - Session, + PersistMode, Session, }, zbus::AsyncDrop, WindowIdentifier, @@ -20,7 +20,7 @@ use super::{error::XdpEmulationCreationError, EmulationHandle, InputEmulation}; pub struct DesktopPortalEmulation<'a> { proxy: RemoteDesktop<'a>, - session: Session<'a>, + session: Session<'a, RemoteDesktop<'a>>, } impl<'a> DesktopPortalEmulation<'a> { @@ -34,7 +34,12 @@ impl<'a> DesktopPortalEmulation<'a> { log::debug!("selecting devices ..."); proxy - .select_devices(&session, DeviceType::Keyboard | DeviceType::Pointer) + .select_devices( + &session, + DeviceType::Keyboard | DeviceType::Pointer, + None, + PersistMode::ExplicitlyRevoked, + ) .await?; log::info!("requesting permission for input emulation"); diff --git a/src/frontend/gtk.rs b/src/frontend/gtk.rs index a64dbfc..b691141 100644 --- a/src/frontend/gtk.rs +++ b/src/frontend/gtk.rs @@ -114,50 +114,54 @@ fn build_ui(app: &Application) { let window = Window::new(app, tx); - glib::spawn_future_local(clone!(@weak window => async move { - loop { - let notify = receiver.recv().await.unwrap_or_else(|_| process::exit(1)); - match notify { - FrontendEvent::Created(handle, client, state) => { - window.new_client(handle, client, state); - }, - FrontendEvent::Deleted(client) => { - window.delete_client(client); - } - FrontendEvent::State(handle, config, state) => { - window.update_client_config(handle, config); - window.update_client_state(handle, state); - } - FrontendEvent::NoSuchClient(_) => { } - FrontendEvent::Error(e) => { - window.show_toast(e.as_str()); - }, - FrontendEvent::Enumerate(clients) => { - for (handle, client, state) in clients { - if window.client_idx(handle).is_some() { - window.update_client_config(handle, client); - window.update_client_state(handle, state); - } else { - window.new_client(handle, client, state); + glib::spawn_future_local(clone!( + #[weak] + window, + async move { + loop { + let notify = receiver.recv().await.unwrap_or_else(|_| process::exit(1)); + match notify { + FrontendEvent::Created(handle, client, state) => { + window.new_client(handle, client, state); + } + FrontendEvent::Deleted(client) => { + window.delete_client(client); + } + FrontendEvent::State(handle, config, state) => { + window.update_client_config(handle, config); + window.update_client_state(handle, state); + } + FrontendEvent::NoSuchClient(_) => {} + FrontendEvent::Error(e) => { + window.show_toast(e.as_str()); + } + FrontendEvent::Enumerate(clients) => { + for (handle, client, state) in clients { + if window.client_idx(handle).is_some() { + window.update_client_config(handle, client); + window.update_client_state(handle, state); + } else { + window.new_client(handle, client, state); + } } } - }, - FrontendEvent::PortChanged(port, msg) => { - match msg { - None => window.show_toast(format!("port changed: {port}").as_str()), - Some(msg) => window.show_toast(msg.as_str()), + FrontendEvent::PortChanged(port, msg) => { + match msg { + None => window.show_toast(format!("port changed: {port}").as_str()), + Some(msg) => window.show_toast(msg.as_str()), + } + window.imp().set_port(port); + } + FrontendEvent::CaptureStatus(s) => { + window.set_capture(s.into()); + } + FrontendEvent::EmulationStatus(s) => { + window.set_emulation(s.into()); } - window.imp().set_port(port); - } - FrontendEvent::CaptureStatus(s) => { - window.set_capture(s.into()); - } - FrontendEvent::EmulationStatus(s) => { - window.set_emulation(s.into()); } } } - })); + )); window.present(); } diff --git a/src/frontend/gtk/client_row/imp.rs b/src/frontend/gtk/client_row/imp.rs index 141173b..1e8b711 100644 --- a/src/frontend/gtk/client_row/imp.rs +++ b/src/frontend/gtk/client_row/imp.rs @@ -52,10 +52,13 @@ impl ObjectSubclass for ClientRow { impl ObjectImpl for ClientRow { fn constructed(&self) { self.parent_constructed(); - self.delete_button - .connect_clicked(clone!(@weak self as row => move |button| { + self.delete_button.connect_clicked(clone!( + #[weak(rename_to = row)] + self, + move |button| { row.handle_client_delete(button); - })); + } + )); } fn signals() -> &'static [glib::subclass::Signal] { diff --git a/src/frontend/gtk/window.rs b/src/frontend/gtk/window.rs index 7ba5ab7..aeb1b49 100644 --- a/src/frontend/gtk/window.rs +++ b/src/frontend/gtk/window.rs @@ -63,31 +63,61 @@ impl Window { let selection_model = NoSelection::new(Some(self.clients())); self.imp().client_list.bind_model( Some(&selection_model), - clone!(@weak self as window => @default-panic, move |obj| { - let client_object = obj.downcast_ref().expect("Expected object of type `ClientObject`."); - let row = window.create_client_row(client_object); - row.connect_closure("request-update", false, closure_local!(@strong window => move |row: ClientRow, active: bool| { - if let Some(client) = window.client_by_idx(row.index() as u32) { - window.request_client_activate(&client, active); - window.request_client_update(&client); - window.request_client_state(&client); - } - })); - row.connect_closure("request-delete", false, closure_local!(@strong window => move |row: ClientRow| { - if let Some(client) = window.client_by_idx(row.index() as u32) { - window.request_client_delete(&client); - } - })); - row.connect_closure("request-dns", false, closure_local!(@strong window => move - |row: ClientRow| { - if let Some(client) = window.client_by_idx(row.index() as u32) { - window.request_client_update(&client); - window.request_dns(&client); - window.request_client_state(&client); - } - })); - row.upcast() - }) + clone!( + #[weak(rename_to = window)] + self, + #[upgrade_or_panic] + move |obj| { + let client_object = obj + .downcast_ref() + .expect("Expected object of type `ClientObject`."); + let row = window.create_client_row(client_object); + row.connect_closure( + "request-update", + false, + closure_local!( + #[strong] + window, + move |row: ClientRow, active: bool| { + if let Some(client) = window.client_by_idx(row.index() as u32) { + window.request_client_activate(&client, active); + window.request_client_update(&client); + window.request_client_state(&client); + } + } + ), + ); + row.connect_closure( + "request-delete", + false, + closure_local!( + #[strong] + window, + move |row: ClientRow| { + if let Some(client) = window.client_by_idx(row.index() as u32) { + window.request_client_delete(&client); + } + } + ), + ); + row.connect_closure( + "request-dns", + false, + closure_local!( + #[strong] + window, + move |row: ClientRow| { + if let Some(client) = window.client_by_idx(row.index() as u32) { + window.request_client_update(&client); + window.request_dns(&client); + window.request_client_state(&client); + } + } + ), + ); + row.upcast() + } + ), ); } diff --git a/src/frontend/gtk/window/imp.rs b/src/frontend/gtk/window/imp.rs index 9b846ae..d520e46 100644 --- a/src/frontend/gtk/window/imp.rs +++ b/src/frontend/gtk/window/imp.rs @@ -84,11 +84,15 @@ impl Window { clipboard.set_text(hostname.to_str().expect("hostname: invalid utf8")); button.set_icon_name("emblem-ok-symbolic"); button.set_css_classes(&["success"]); - glib::spawn_future_local(clone!(@weak button => async move { - glib::timeout_future_seconds(1).await; - button.set_icon_name("edit-copy-symbolic"); - button.set_css_classes(&[]); - })); + glib::spawn_future_local(clone!( + #[weak] + button, + async move { + glib::timeout_future_seconds(1).await; + button.set_icon_name("edit-copy-symbolic"); + button.set_css_classes(&[]); + } + )); } }