Update to latest gtk-rs crates

This commit is contained in:
Tom Wagner
2024-03-23 11:51:04 +01:00
parent 57cba6381b
commit f32559511d
7 changed files with 291 additions and 133 deletions

272
Cargo.lock generated
View File

@@ -27,6 +27,19 @@ version = "1.0.75"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
[[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",
"event-listener-strategy",
"futures-core",
"pin-project-lite",
]
[[package]] [[package]]
name = "autocfg" name = "autocfg"
version = "1.1.0" version = "1.1.0"
@@ -62,23 +75,22 @@ checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
[[package]] [[package]]
name = "cairo-rs" name = "cairo-rs"
version = "0.18.2" version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c0466dfa8c0ee78deef390c274ad756801e0a6dbb86c5ef0924a298c5761c4d" checksum = "2650f66005301bd33cc486dec076e1293c4cecf768bc7ba9bf5d2b1be339b99c"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cairo-sys-rs", "cairo-sys-rs",
"glib", "glib",
"libc", "libc",
"once_cell",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "cairo-sys-rs" name = "cairo-sys-rs"
version = "0.18.2" version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" checksum = "fd3bb3119664efbd78b5e6c93957447944f16bdbced84c17a9f41c7829b81e64"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@@ -130,6 +142,15 @@ dependencies = [
"libloading", "libloading",
] ]
[[package]]
name = "concurrent-queue"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363"
dependencies = [
"crossbeam-utils",
]
[[package]] [[package]]
name = "convert_case" name = "convert_case"
version = "0.6.0" version = "0.6.0"
@@ -145,6 +166,12 @@ version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b" checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b"
[[package]]
name = "crossbeam-utils"
version = "0.8.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
[[package]] [[package]]
name = "either" name = "either"
version = "1.10.0" version = "1.10.0"
@@ -157,6 +184,27 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "event-listener"
version = "5.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b5fb89194fa3cad959b833185b3063ba881dbfc7030680b314250779fb4cc91"
dependencies = [
"concurrent-queue",
"parking",
"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",
"pin-project-lite",
]
[[package]] [[package]]
name = "field-offset" name = "field-offset"
version = "0.3.6" version = "0.3.6"
@@ -232,22 +280,21 @@ dependencies = [
[[package]] [[package]]
name = "gdk-pixbuf" name = "gdk-pixbuf"
version = "0.18.0" version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbc9c2ed73a81d556b65d08879ba4ee58808a6b1927ce915262185d6d547c6f3" checksum = "f6a23f8a0b5090494fd04924662d463f8386cc678dd3915015a838c1a3679b92"
dependencies = [ dependencies = [
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
"gio", "gio",
"glib", "glib",
"libc", "libc",
"once_cell",
] ]
[[package]] [[package]]
name = "gdk-pixbuf-sys" name = "gdk-pixbuf-sys"
version = "0.18.0" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" checksum = "3dcbd04c1b2c4834cc008b4828bc917d062483b88d26effde6342e5622028f96"
dependencies = [ dependencies = [
"gio-sys", "gio-sys",
"glib-sys", "glib-sys",
@@ -258,9 +305,9 @@ dependencies = [
[[package]] [[package]]
name = "gdk4" name = "gdk4"
version = "0.7.3" version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7edb019ad581f8ecf8ea8e4baa6df7c483a95b5a59be3140be6a9c3b0c632af6" checksum = "9100b25604183f2fd97f55ef087fae96ab4934d7215118a35303e422688e6e4b"
dependencies = [ dependencies = [
"cairo-rs", "cairo-rs",
"gdk-pixbuf", "gdk-pixbuf",
@@ -273,9 +320,9 @@ dependencies = [
[[package]] [[package]]
name = "gdk4-sys" name = "gdk4-sys"
version = "0.7.2" version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbab43f332a3cf1df9974da690b5bb0e26720ed09a228178ce52175372dcfef0" checksum = "d0b76874c40bb8d1c7d03a7231e23ac75fa577a456cd53af32ec17ec8f121626"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
@@ -290,9 +337,9 @@ dependencies = [
[[package]] [[package]]
name = "gio" name = "gio"
version = "0.18.2" version = "0.19.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57052f84e8e5999b258e8adf8f5f2af0ac69033864936b8b6838321db2f759b1" checksum = "c64947d08d7fbb03bf8ad1f25a8ac6cf4329bc772c9b7e5abe7bf9493c81194f"
dependencies = [ dependencies = [
"futures-channel", "futures-channel",
"futures-core", "futures-core",
@@ -301,7 +348,6 @@ dependencies = [
"gio-sys", "gio-sys",
"glib", "glib",
"libc", "libc",
"once_cell",
"pin-project-lite", "pin-project-lite",
"smallvec", "smallvec",
"thiserror", "thiserror",
@@ -309,22 +355,22 @@ dependencies = [
[[package]] [[package]]
name = "gio-sys" name = "gio-sys"
version = "0.18.1" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" checksum = "bcf8e1d9219bb294636753d307b030c1e8a032062cba74f493c431a5c8b81ce4"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
"libc", "libc",
"system-deps", "system-deps",
"winapi", "windows-sys",
] ]
[[package]] [[package]]
name = "glib" name = "glib"
version = "0.18.2" version = "0.19.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c316afb01ce8067c5eaab1fc4f2cd47dc21ce7b6296358605e2ffab23ccbd19" checksum = "01e191cc1af1f35b9699213107068cd3fe05d9816275ac118dc785a0dd8faebf"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"futures-channel", "futures-channel",
@@ -339,20 +385,18 @@ dependencies = [
"libc", "libc",
"log", "log",
"memchr", "memchr",
"once_cell",
"smallvec", "smallvec",
"thiserror", "thiserror",
] ]
[[package]] [[package]]
name = "glib-macros" name = "glib-macros"
version = "0.18.2" version = "0.19.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8da903822b136d42360518653fcf154455defc437d3e7a81475bf9a95ff1e47" checksum = "9972bb91643d589c889654693a4f1d07697fdcb5d104b5c44fb68649ba1bf68d"
dependencies = [ dependencies = [
"heck", "heck 0.5.0",
"proc-macro-crate", "proc-macro-crate",
"proc-macro-error",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.37", "syn 2.0.37",
@@ -360,9 +404,9 @@ dependencies = [
[[package]] [[package]]
name = "glib-sys" name = "glib-sys"
version = "0.18.1" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" checksum = "630f097773d7c7a0bb3258df4e8157b47dc98bbfa0e60ad9ab56174813feced4"
dependencies = [ dependencies = [
"libc", "libc",
"system-deps", "system-deps",
@@ -376,9 +420,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]] [[package]]
name = "gobject-sys" name = "gobject-sys"
version = "0.18.0" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" checksum = "c85e2b1080b9418dd0c58b498da3a5c826030343e0ef07bde6a955d28de54979"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@@ -387,9 +431,9 @@ dependencies = [
[[package]] [[package]]
name = "graphene-rs" name = "graphene-rs"
version = "0.18.1" version = "0.19.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b2228cda1505613a7a956cca69076892cfbda84fc2b7a62b94a41a272c0c401" checksum = "99e4d388e96c5f29e2b2f67045d229ddf826d0a8d6d282f94ed3b34452222c91"
dependencies = [ dependencies = [
"glib", "glib",
"graphene-sys", "graphene-sys",
@@ -398,9 +442,9 @@ dependencies = [
[[package]] [[package]]
name = "graphene-sys" name = "graphene-sys"
version = "0.18.1" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc4144cee8fc8788f2a9b73dc5f1d4e1189d1f95305c4cb7bd9c1af1cfa31f59" checksum = "236ed66cc9b18d8adf233716f75de803d0bf6fc806f60d14d948974a12e240d0"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
@@ -410,9 +454,9 @@ dependencies = [
[[package]] [[package]]
name = "gsk4" name = "gsk4"
version = "0.7.3" version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d958e351d2f210309b32d081c832d7de0aca0b077aa10d88336c6379bd01f7e" checksum = "c65036fc8f99579e8cb37b12487969b707ab23ec8ab953682ff347cbd15d396e"
dependencies = [ dependencies = [
"cairo-rs", "cairo-rs",
"gdk4", "gdk4",
@@ -425,9 +469,9 @@ dependencies = [
[[package]] [[package]]
name = "gsk4-sys" name = "gsk4-sys"
version = "0.7.3" version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12bd9e3effea989f020e8f1ff3fa3b8c63ba93d43b899c11a118868853a56d55" checksum = "bd24c814379f9c3199dc53e52253ee8d0f657eae389ab282c330505289d24738"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk4-sys", "gdk4-sys",
@@ -441,9 +485,9 @@ dependencies = [
[[package]] [[package]]
name = "gtk4" name = "gtk4"
version = "0.7.3" version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aeb51aa3e9728575a053e1f43543cd9992ac2477e1b186ad824fd4adfb70842" checksum = "aa82753b8c26277e4af1446c70e35b19aad4fb794a7b143859e7eeb9a4025d83"
dependencies = [ dependencies = [
"cairo-rs", "cairo-rs",
"field-offset", "field-offset",
@@ -462,9 +506,9 @@ dependencies = [
[[package]] [[package]]
name = "gtk4-macros" name = "gtk4-macros"
version = "0.7.2" version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d57ec49cf9b657f69a05bca8027cff0a8dfd0c49e812be026fc7311f2163832f" checksum = "40300bf071d2fcd4c94eacc09e84ec6fe73129d2ceb635cf7e55b026b5443567"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"proc-macro-crate", "proc-macro-crate",
@@ -476,9 +520,9 @@ dependencies = [
[[package]] [[package]]
name = "gtk4-sys" name = "gtk4-sys"
version = "0.7.3" version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54d8c4aa23638ce9faa2caf7e2a27d4a1295af2155c8e8d28c4d4eeca7a65eb8" checksum = "0db1b104138f087ccdc81d2c332de5dd049b89de3d384437cc1093b17cd2da18"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
@@ -505,10 +549,17 @@ version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "heck"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]] [[package]]
name = "helvum" name = "helvum"
version = "0.5.1" version = "0.5.1"
dependencies = [ dependencies = [
"async-channel",
"glib", "glib",
"libadwaita", "libadwaita",
"libc", "libc",
@@ -550,9 +601,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]] [[package]]
name = "libadwaita" name = "libadwaita"
version = "0.5.3" version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2fe7e70c06507ed10a16cda707f358fbe60fe0dc237498f78c686ade92fd979c" checksum = "91b4990248b9e1ec5e72094a2ccaea70ec3809f88f6fd52192f2af306b87c5d9"
dependencies = [ dependencies = [
"gdk-pixbuf", "gdk-pixbuf",
"gdk4", "gdk4",
@@ -566,9 +617,9 @@ dependencies = [
[[package]] [[package]]
name = "libadwaita-sys" name = "libadwaita-sys"
version = "0.5.3" version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e10aaa38de1d53374f90deeb4535209adc40cc5dba37f9704724169bceec69a" checksum = "23a748e4e92be1265cd9e93d569c0b5dfc7814107985aa6743d670ab281ea1a8"
dependencies = [ dependencies = [
"gdk4-sys", "gdk4-sys",
"gio-sys", "gio-sys",
@@ -632,9 +683,9 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.6.3" version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
[[package]] [[package]]
name = "memoffset" name = "memoffset"
@@ -674,28 +725,27 @@ dependencies = [
[[package]] [[package]]
name = "once_cell" name = "once_cell"
version = "1.18.0" version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]] [[package]]
name = "pango" name = "pango"
version = "0.18.0" version = "0.19.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06a9e54b831d033206160096b825f2070cf5fda7e35167b1c01e9e774f9202d1" checksum = "b1264d13deb823cc652f26cfe59afb1ec4b9db2a5bd27c41b738c879cc1bfaa1"
dependencies = [ dependencies = [
"gio", "gio",
"glib", "glib",
"libc", "libc",
"once_cell",
"pango-sys", "pango-sys",
] ]
[[package]] [[package]]
name = "pango-sys" name = "pango-sys"
version = "0.18.0" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" checksum = "f52ef6a881c19fbfe3b1484df5cad411acaaba29dbec843941c3110d19f340ea"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
@@ -703,6 +753,12 @@ dependencies = [
"system-deps", "system-deps",
] ]
[[package]]
name = "parking"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
[[package]] [[package]]
name = "pin-project-lite" name = "pin-project-lite"
version = "0.2.13" version = "0.2.13"
@@ -745,18 +801,17 @@ dependencies = [
[[package]] [[package]]
name = "pkg-config" name = "pkg-config"
version = "0.3.27" version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
[[package]] [[package]]
name = "proc-macro-crate" name = "proc-macro-crate"
version = "1.3.1" version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284"
dependencies = [ dependencies = [
"once_cell", "toml_edit 0.21.1",
"toml_edit",
] ]
[[package]] [[package]]
@@ -897,9 +952,9 @@ dependencies = [
[[package]] [[package]]
name = "smallvec" name = "smallvec"
version = "1.11.1" version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
[[package]] [[package]]
name = "syn" name = "syn"
@@ -930,7 +985,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3" checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3"
dependencies = [ dependencies = [
"cfg-expr", "cfg-expr",
"heck", "heck 0.4.1",
"pkg-config", "pkg-config",
"toml", "toml",
"version-compare", "version-compare",
@@ -971,14 +1026,14 @@ dependencies = [
"serde", "serde",
"serde_spanned", "serde_spanned",
"toml_datetime", "toml_datetime",
"toml_edit", "toml_edit 0.19.15",
] ]
[[package]] [[package]]
name = "toml_datetime" name = "toml_datetime"
version = "0.6.3" version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
dependencies = [ dependencies = [
"serde", "serde",
] ]
@@ -996,6 +1051,17 @@ dependencies = [
"winnow", "winnow",
] ]
[[package]]
name = "toml_edit"
version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
dependencies = [
"indexmap",
"toml_datetime",
"winnow",
]
[[package]] [[package]]
name = "unicode-ident" name = "unicode-ident"
version = "1.0.12" version = "1.0.12"
@@ -1048,6 +1114,72 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "windows-sys"
version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
dependencies = [
"windows-targets",
]
[[package]]
name = "windows-targets"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9"
[[package]]
name = "windows_aarch64_msvc"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675"
[[package]]
name = "windows_i686_gnu"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3"
[[package]]
name = "windows_i686_msvc"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02"
[[package]]
name = "windows_x86_64_gnu"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177"
[[package]]
name = "windows_x86_64_msvc"
version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8"
[[package]] [[package]]
name = "winnow" name = "winnow"
version = "0.5.15" version = "0.5.15"

View File

@@ -15,11 +15,12 @@ categories = ["gui", "multimedia"]
[dependencies] [dependencies]
pipewire = "0.8.0" pipewire = "0.8.0"
adw = { version = "0.5", package = "libadwaita", features = ["v1_4"] } adw = { version = "0.6", package = "libadwaita", features = ["v1_4"] }
glib = { version = "0.18", features = ["log"] } glib = { version = "0.19", features = ["log"] }
async-channel = "2.2"
log = "0.4.11" log = "0.4.11"
once_cell = "1.7.2" once_cell = "1.19"
libc = "0.2" libc = "0.2"

View File

@@ -16,7 +16,7 @@
use adw::{ use adw::{
gio, gio,
glib::{self, clone, Receiver}, glib::{self, clone},
gtk, gtk,
prelude::*, prelude::*,
subclass::prelude::*, subclass::prelude::*,
@@ -33,8 +33,9 @@ static AUTHORS: &str = env!("CARGO_PKG_AUTHORS");
mod imp { mod imp {
use super::*; use super::*;
use std::cell::OnceCell;
use adw::subclass::prelude::AdwApplicationImpl; use adw::subclass::prelude::AdwApplicationImpl;
use once_cell::unsync::OnceCell;
#[derive(Default)] #[derive(Default)]
pub struct Application { pub struct Application {
@@ -143,7 +144,7 @@ impl Application {
/// Create the view. /// Create the view.
/// This will set up the entire user interface and prepare it for being run. /// This will set up the entire user interface and prepare it for being run.
pub(super) fn new( pub(super) fn new(
gtk_receiver: Receiver<PipewireMessage>, gtk_receiver: async_channel::Receiver<PipewireMessage>,
pw_sender: Sender<GtkMessage>, pw_sender: Sender<GtkMessage>,
) -> Self { ) -> Self {
let app: Application = glib::Object::builder() let app: Application = glib::Object::builder()

View File

@@ -23,9 +23,7 @@ use crate::{ui::graph::GraphView, GtkMessage, PipewireMessage};
mod imp { mod imp {
use super::*; use super::*;
use std::{cell::RefCell, collections::HashMap}; use std::{cell::OnceCell, cell::RefCell, collections::HashMap};
use once_cell::unsync::OnceCell;
use crate::{ui::graph, MediaType, NodeType}; use crate::{ui::graph, MediaType, NodeType};
@@ -53,36 +51,58 @@ mod imp {
impl ObjectImpl for GraphManager {} impl ObjectImpl for GraphManager {}
impl GraphManager { impl GraphManager {
pub fn attach_receiver(&self, receiver: glib::Receiver<crate::PipewireMessage>) { pub async fn receive(&self, receiver: async_channel::Receiver<crate::PipewireMessage>) {
receiver.attach(None, glib::clone!( loop {
@weak self as imp => @default-return glib::ControlFlow::Continue, let Ok(msg) = receiver.recv().await else {
move |msg| { continue;
};
match msg { match msg {
PipewireMessage::NodeAdded { id, name, node_type } => imp.add_node(id, name.as_str(), node_type), PipewireMessage::NodeAdded {
PipewireMessage::NodeNameChanged { id, name, media_name } => imp.node_name_changed(id, &name, &media_name), id,
PipewireMessage::PortAdded { id, node_id, name, direction } => imp.add_port(id, name.as_str(), node_id, direction), name,
PipewireMessage::PortFormatChanged { id, media_type } => imp.port_media_type_changed(id, media_type), node_type,
} => self.add_node(id, name.as_str(), node_type),
PipewireMessage::NodeNameChanged {
id,
name,
media_name,
} => self.node_name_changed(id, &name, &media_name),
PipewireMessage::PortAdded {
id,
node_id,
name,
direction,
} => self.add_port(id, name.as_str(), node_id, direction),
PipewireMessage::PortFormatChanged { id, media_type } => {
self.port_media_type_changed(id, media_type)
}
PipewireMessage::LinkAdded { PipewireMessage::LinkAdded {
id, port_from, port_to, active, media_type id,
} => imp.add_link(id, port_from, port_to, active, media_type), port_from,
PipewireMessage::LinkStateChanged { id, active } => imp.link_state_changed(id, active), port_to,
PipewireMessage::LinkFormatChanged { id, media_type } => imp.link_format_changed(id, media_type), active,
PipewireMessage::NodeRemoved { id } => imp.remove_node(id), media_type,
PipewireMessage::PortRemoved { id, node_id } => imp.remove_port(id, node_id), } => self.add_link(id, port_from, port_to, active, media_type),
PipewireMessage::LinkRemoved { id } => imp.remove_link(id), PipewireMessage::LinkStateChanged { id, active } => {
self.link_state_changed(id, active)
}
PipewireMessage::LinkFormatChanged { id, media_type } => {
self.link_format_changed(id, media_type)
}
PipewireMessage::NodeRemoved { id } => self.remove_node(id),
PipewireMessage::PortRemoved { id, node_id } => self.remove_port(id, node_id),
PipewireMessage::LinkRemoved { id } => self.remove_link(id),
PipewireMessage::Connecting => { PipewireMessage::Connecting => {
imp.obj().connection_banner().set_revealed(true); self.obj().connection_banner().set_revealed(true);
} }
PipewireMessage::Connected => { PipewireMessage::Connected => {
imp.obj().connection_banner().set_revealed(false); self.obj().connection_banner().set_revealed(false);
}, }
PipewireMessage::Disconnected => { PipewireMessage::Disconnected => {
imp.clear(); self.clear();
}, }
}; };
glib::ControlFlow::Continue
} }
));
} }
/// Add a new node to the view. /// Add a new node to the view.
@@ -332,19 +352,23 @@ glib::wrapper! {
pub struct GraphManager(ObjectSubclass<imp::GraphManager>); pub struct GraphManager(ObjectSubclass<imp::GraphManager>);
} }
async fn receive(graph_manager: GraphManager, receiver: async_channel::Receiver<PipewireMessage>) {
graph_manager.imp().receive(receiver).await
}
impl GraphManager { impl GraphManager {
pub fn new( pub fn new(
graph: &GraphView, graph: &GraphView,
connection_banner: &adw::Banner, connection_banner: &adw::Banner,
sender: PwSender<GtkMessage>, sender: PwSender<GtkMessage>,
receiver: glib::Receiver<PipewireMessage>, receiver: async_channel::Receiver<PipewireMessage>,
) -> Self { ) -> Self {
let res: Self = glib::Object::builder() let res: Self = glib::Object::builder()
.property("graph", graph) .property("graph", graph)
.property("connection-banner", connection_banner) .property("connection-banner", connection_banner)
.build(); .build();
res.imp().attach_receiver(receiver); glib::MainContext::default().spawn_local(receive(res.clone(), receiver));
assert!( assert!(
res.imp().pw_sender.set(sender).is_ok(), res.imp().pw_sender.set(sender).is_ok(),
"Should be able to set pw_sender)" "Should be able to set pw_sender)"

View File

@@ -120,7 +120,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
// Start the pipewire thread with channels in both directions. // Start the pipewire thread with channels in both directions.
let (gtk_sender, gtk_receiver) = glib::MainContext::channel(glib::Priority::DEFAULT); let (gtk_sender, gtk_receiver) = async_channel::unbounded();
let (pw_sender, pw_receiver) = pipewire::channel::channel(); let (pw_sender, pw_receiver) = pipewire::channel::channel();
let pw_thread = let pw_thread =
std::thread::spawn(move || pipewire_connection::thread_main(gtk_sender, pw_receiver)); std::thread::spawn(move || pipewire_connection::thread_main(gtk_sender, pw_receiver));

View File

@@ -63,7 +63,7 @@ enum ProxyItem {
/// The "main" function of the pipewire thread. /// The "main" function of the pipewire thread.
pub(super) fn thread_main( pub(super) fn thread_main(
gtk_sender: glib::Sender<PipewireMessage>, gtk_sender: async_channel::Sender<PipewireMessage>,
mut pw_receiver: pipewire::channel::Receiver<GtkMessage>, mut pw_receiver: pipewire::channel::Receiver<GtkMessage>,
) { ) {
let mainloop = MainLoop::new(None).expect("Failed to create mainloop"); let mainloop = MainLoop::new(None).expect("Failed to create mainloop");
@@ -81,7 +81,7 @@ pub(super) fn thread_main(
if !is_connecting { if !is_connecting {
is_connecting = true; is_connecting = true;
gtk_sender gtk_sender
.send(PipewireMessage::Connecting) .send_blocking(PipewireMessage::Connecting)
.expect("Failed to send message"); .expect("Failed to send message");
} }
@@ -116,7 +116,7 @@ pub(super) fn thread_main(
if is_connecting { if is_connecting {
is_connecting = false; is_connecting = false;
gtk_sender gtk_sender
.send(PipewireMessage::Connected) .send_blocking(PipewireMessage::Connected)
.expect("Failed to send message"); .expect("Failed to send message");
} }
@@ -145,7 +145,7 @@ pub(super) fn thread_main(
} }
if res == -libc::EPIPE { if res == -libc::EPIPE {
gtk_sender.send(PipewireMessage::Disconnected) gtk_sender.send_blocking(PipewireMessage::Disconnected)
.expect("Failed to send message"); .expect("Failed to send message");
mainloop.quit(); mainloop.quit();
} else { } else {
@@ -169,7 +169,7 @@ pub(super) fn thread_main(
)) ))
.global_remove(clone!(@strong proxies, @strong state => move |id| { .global_remove(clone!(@strong proxies, @strong state => move |id| {
if let Some(item) = state.borrow_mut().remove(id) { if let Some(item) = state.borrow_mut().remove(id) {
gtk_sender.send(match item { gtk_sender.send_blocking(match item {
Item::Node { .. } => PipewireMessage::NodeRemoved {id}, Item::Node { .. } => PipewireMessage::NodeRemoved {id},
Item::Port { node_id } => PipewireMessage::PortRemoved {id, node_id}, Item::Port { node_id } => PipewireMessage::PortRemoved {id, node_id},
Item::Link { .. } => PipewireMessage::LinkRemoved {id}, Item::Link { .. } => PipewireMessage::LinkRemoved {id},
@@ -202,7 +202,7 @@ fn get_node_name(props: &DictRef) -> &str {
/// Handle a new node being added /// Handle a new node being added
fn handle_node( fn handle_node(
node: &GlobalObject<&DictRef>, node: &GlobalObject<&DictRef>,
sender: &glib::Sender<PipewireMessage>, sender: &async_channel::Sender<PipewireMessage>,
registry: &Rc<Registry>, registry: &Rc<Registry>,
proxies: &Rc<RefCell<HashMap<u32, ProxyItem>>>, proxies: &Rc<RefCell<HashMap<u32, ProxyItem>>>,
state: &Rc<RefCell<State>>, state: &Rc<RefCell<State>>,
@@ -237,7 +237,7 @@ fn handle_node(
state.borrow_mut().insert(node.id, Item::Node); state.borrow_mut().insert(node.id, Item::Node);
sender sender
.send(PipewireMessage::NodeAdded { .send_blocking(PipewireMessage::NodeAdded {
id: node.id, id: node.id,
name, name,
node_type, node_type,
@@ -263,7 +263,7 @@ fn handle_node(
fn handle_node_info( fn handle_node_info(
info: &NodeInfoRef, info: &NodeInfoRef,
sender: &glib::Sender<PipewireMessage>, sender: &async_channel::Sender<PipewireMessage>,
proxies: &Rc<RefCell<HashMap<u32, ProxyItem>>>, proxies: &Rc<RefCell<HashMap<u32, ProxyItem>>>,
) { ) {
debug!("Received node info: {:?}", info); debug!("Received node info: {:?}", info);
@@ -280,7 +280,7 @@ fn handle_node_info(
let name = get_node_name(props).to_string(); let name = get_node_name(props).to_string();
sender sender
.send(PipewireMessage::NodeNameChanged { .send_blocking(PipewireMessage::NodeNameChanged {
id, id,
name, name,
media_name: media_name.to_string(), media_name: media_name.to_string(),
@@ -292,7 +292,7 @@ fn handle_node_info(
/// Handle a new port being added /// Handle a new port being added
fn handle_port( fn handle_port(
port: &GlobalObject<&DictRef>, port: &GlobalObject<&DictRef>,
sender: &glib::Sender<PipewireMessage>, sender: &async_channel::Sender<PipewireMessage>,
registry: &Rc<Registry>, registry: &Rc<Registry>,
proxies: &Rc<RefCell<HashMap<u32, ProxyItem>>>, proxies: &Rc<RefCell<HashMap<u32, ProxyItem>>>,
state: &Rc<RefCell<State>>, state: &Rc<RefCell<State>>,
@@ -326,7 +326,7 @@ fn handle_port_info(
info: &PortInfoRef, info: &PortInfoRef,
proxies: &Rc<RefCell<HashMap<u32, ProxyItem>>>, proxies: &Rc<RefCell<HashMap<u32, ProxyItem>>>,
state: &Rc<RefCell<State>>, state: &Rc<RefCell<State>>,
sender: &glib::Sender<PipewireMessage>, sender: &async_channel::Sender<PipewireMessage>,
) { ) {
debug!("Received port info: {:?}", info); debug!("Received port info: {:?}", info);
@@ -367,7 +367,7 @@ fn handle_port_info(
} }
sender sender
.send(PipewireMessage::PortAdded { .send_blocking(PipewireMessage::PortAdded {
id, id,
node_id, node_id,
name, name,
@@ -380,7 +380,7 @@ fn handle_port_info(
fn handle_port_enum_format( fn handle_port_enum_format(
port_id: u32, port_id: u32,
param: Option<&pipewire::spa::pod::Pod>, param: Option<&pipewire::spa::pod::Pod>,
sender: &glib::Sender<PipewireMessage>, sender: &async_channel::Sender<PipewireMessage>,
) { ) {
let media_type = param let media_type = param
.and_then(|param| pipewire::spa::param::format_utils::parse_format(param).ok()) .and_then(|param| pipewire::spa::param::format_utils::parse_format(param).ok())
@@ -388,7 +388,7 @@ fn handle_port_enum_format(
.unwrap_or(MediaType::Unknown); .unwrap_or(MediaType::Unknown);
sender sender
.send(PipewireMessage::PortFormatChanged { .send_blocking(PipewireMessage::PortFormatChanged {
id: port_id, id: port_id,
media_type, media_type,
}) })
@@ -398,7 +398,7 @@ fn handle_port_enum_format(
/// Handle a new link being added /// Handle a new link being added
fn handle_link( fn handle_link(
link: &GlobalObject<&DictRef>, link: &GlobalObject<&DictRef>,
sender: &glib::Sender<PipewireMessage>, sender: &async_channel::Sender<PipewireMessage>,
registry: &Rc<Registry>, registry: &Rc<Registry>,
proxies: &Rc<RefCell<HashMap<u32, ProxyItem>>>, proxies: &Rc<RefCell<HashMap<u32, ProxyItem>>>,
state: &Rc<RefCell<State>>, state: &Rc<RefCell<State>>,
@@ -428,7 +428,7 @@ fn handle_link(
fn handle_link_info( fn handle_link_info(
info: &LinkInfoRef, info: &LinkInfoRef,
state: &Rc<RefCell<State>>, state: &Rc<RefCell<State>>,
sender: &glib::Sender<PipewireMessage>, sender: &async_channel::Sender<PipewireMessage>,
) { ) {
debug!("Received link info: {:?}", info); debug!("Received link info: {:?}", info);
@@ -439,7 +439,7 @@ fn handle_link_info(
// Info was an update - figure out if we should notify the gtk thread // Info was an update - figure out if we should notify the gtk thread
if info.change_mask().contains(LinkChangeMask::STATE) { if info.change_mask().contains(LinkChangeMask::STATE) {
sender sender
.send(PipewireMessage::LinkStateChanged { .send_blocking(PipewireMessage::LinkStateChanged {
id, id,
active: matches!(info.state(), LinkState::Active), active: matches!(info.state(), LinkState::Active),
}) })
@@ -447,7 +447,7 @@ fn handle_link_info(
} }
if info.change_mask().contains(LinkChangeMask::FORMAT) { if info.change_mask().contains(LinkChangeMask::FORMAT) {
sender sender
.send(PipewireMessage::LinkFormatChanged { .send_blocking(PipewireMessage::LinkFormatChanged {
id, id,
media_type: get_link_media_type(info), media_type: get_link_media_type(info),
}) })
@@ -461,7 +461,7 @@ fn handle_link_info(
state.insert(id, Item::Link { port_from, port_to }); state.insert(id, Item::Link { port_from, port_to });
sender sender
.send(PipewireMessage::LinkAdded { .send_blocking(PipewireMessage::LinkAdded {
id, id,
port_from, port_from,
port_to, port_to,

View File

@@ -28,9 +28,9 @@ use super::PortHandle;
mod imp { mod imp {
use super::*; use super::*;
use std::cell::Cell; use std::cell::{Cell, OnceCell};
use once_cell::{sync::Lazy, unsync::OnceCell}; use once_cell::sync::Lazy;
use pipewire::spa::{param::format::MediaType, utils::Direction}; use pipewire::spa::{param::format::MediaType, utils::Direction};
/// Graphical representation of a pipewire port. /// Graphical representation of a pipewire port.