summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock258
-rw-r--r--protocols/river-status-unstable-v1.xml8
-rw-r--r--src/bar.rs37
-rw-r--r--src/main.rs2
-rw-r--r--src/river_protocols/status.rs135
-rw-r--r--src/shared_state.rs16
-rw-r--r--src/state.rs80
7 files changed, 244 insertions, 292 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 15e4189..9f74f8a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4,18 +4,18 @@ version = 3
[[package]]
name = "aho-corasick"
-version = "0.7.19"
+version = "0.7.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
dependencies = [
"memchr",
]
[[package]]
name = "anyhow"
-version = "1.0.65"
+version = "1.0.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602"
+checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
[[package]]
name = "atty"
@@ -42,9 +42,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "cairo-rs"
-version = "0.16.1"
+version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08f9ee4a4ca9239c9a839453dce04b7ddee2f859ec4cd7acd1f5703b68db549c"
+checksum = "247e1183fa769ac22121f92276dae52f89acaf297f24b1320019f439b6e3b46f"
dependencies = [
"bitflags",
"cairo-sys-rs",
@@ -56,9 +56,9 @@ dependencies = [
[[package]]
name = "cairo-sys-rs"
-version = "0.16.0"
+version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5119ea655ec777b523f0b57279e70f8a4542f61b0e98a48f892b4ef043fd4c5d"
+checksum = "7c48f4af05fabdcfa9658178e1326efa061853f040ce7d72e33af6885196f421"
dependencies = [
"glib-sys",
"libc",
@@ -67,15 +67,15 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.0.73"
+version = "1.0.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4"
[[package]]
name = "cfg-expr"
-version = "0.10.3"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db"
+checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa"
dependencies = [
"smallvec",
]
@@ -124,9 +124,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
[[package]]
name = "env_logger"
-version = "0.9.1"
+version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272"
+checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7"
dependencies = [
"atty",
"humantime",
@@ -137,24 +137,24 @@ dependencies = [
[[package]]
name = "futures-channel"
-version = "0.3.24"
+version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050"
+checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
dependencies = [
"futures-core",
]
[[package]]
name = "futures-core"
-version = "0.3.24"
+version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf"
+checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
[[package]]
name = "futures-executor"
-version = "0.3.24"
+version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab"
+checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
dependencies = [
"futures-core",
"futures-task",
@@ -169,9 +169,9 @@ checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
[[package]]
name = "futures-macro"
-version = "0.3.24"
+version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17"
+checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
dependencies = [
"proc-macro2",
"quote",
@@ -180,15 +180,15 @@ dependencies = [
[[package]]
name = "futures-task"
-version = "0.3.24"
+version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1"
+checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
[[package]]
name = "futures-util"
-version = "0.3.24"
+version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90"
+checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
dependencies = [
"futures-core",
"futures-macro",
@@ -200,9 +200,9 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.2.7"
+version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
dependencies = [
"cfg-if",
"libc",
@@ -211,9 +211,9 @@ dependencies = [
[[package]]
name = "gio"
-version = "0.16.2"
+version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33c1debf8d0315d69be0153aa76249db3c858ef69b7778ad3cc669e6d370c485"
+checksum = "1d4a17d999e6e4e05d87c2bb05b7140d47769bc53211711a33e2f91536458714"
dependencies = [
"bitflags",
"futures-channel",
@@ -231,9 +231,9 @@ dependencies = [
[[package]]
name = "gio-sys"
-version = "0.16.0"
+version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6da1bba9d3f2ab13a6e9932c40f240dc99ebc9f0bdc35cfb130d1a3df36f374c"
+checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229"
dependencies = [
"glib-sys",
"gobject-sys",
@@ -244,9 +244,9 @@ dependencies = [
[[package]]
name = "glib"
-version = "0.16.2"
+version = "0.16.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5abffa711471e015eb93d65d6ea20e7e9f6f7951fc0a1042280439319b2de06"
+checksum = "d5204a4217749b385cefbfb7bf3a2fcde83e4ce6d0945f64440a1f5bd4010305"
dependencies = [
"bitflags",
"futures-channel",
@@ -266,9 +266,9 @@ dependencies = [
[[package]]
name = "glib-macros"
-version = "0.16.0"
+version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e195c1311fa6b04d7b896ea39385f6bd60ef5d25bf74a7c11c8c3f94f6c1a572"
+checksum = "e084807350b01348b6d9dbabb724d1a0bb987f47a2c85de200e98e12e30733bf"
dependencies = [
"anyhow",
"heck",
@@ -281,9 +281,9 @@ dependencies = [
[[package]]
name = "glib-sys"
-version = "0.16.0"
+version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b33357bb421a77bd849f6a0bfcaf3b4b256a2577802971bb5dd522d530f27021"
+checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65"
dependencies = [
"libc",
"system-deps",
@@ -291,9 +291,9 @@ dependencies = [
[[package]]
name = "gobject-sys"
-version = "0.16.0"
+version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63ca11a57400f3d4fda594e002844be47900c9fb8b29e2155c6e37a1f24e51b3"
+checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1"
dependencies = [
"glib-sys",
"libc",
@@ -348,14 +348,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f65dae1d3aa98e6877917ab4e6fdbfdfb00e95885ea7c4f4f29e3a5dfc08fdf"
dependencies = [
"libc",
- "windows-sys",
+ "windows-sys 0.36.1",
]
[[package]]
name = "itoa"
-version = "1.0.3"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754"
+checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
[[package]]
name = "lazy_static"
@@ -365,15 +365,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
-version = "0.2.133"
+version = "0.2.137"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966"
+checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
[[package]]
name = "libloading"
-version = "0.7.3"
+version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
dependencies = [
"cfg-if",
"winapi",
@@ -396,9 +396,9 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
[[package]]
name = "memmap2"
-version = "0.5.7"
+version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95af15f345b17af2efc8ead6080fb8bc376f8cec1b35277b935637595fe77498"
+checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc"
dependencies = [
"libc",
]
@@ -420,14 +420,14 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "mio"
-version = "0.8.4"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf"
+checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
dependencies = [
"libc",
"log",
"wasi",
- "windows-sys",
+ "windows-sys 0.42.0",
]
[[package]]
@@ -455,15 +455,15 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.15.0"
+version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
+checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860"
[[package]]
name = "pango"
-version = "0.16.0"
+version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7208c60f224cf6e44c551df5ee2ef38f9da0fd29d7c5a0402000b8ab0520e798"
+checksum = "f6a83cd4015382dbb0f4fcf3ab7b277d4885711a62b2f2c1e6582a120094edad"
dependencies = [
"bitflags",
"gio",
@@ -475,9 +475,9 @@ dependencies = [
[[package]]
name = "pango-sys"
-version = "0.16.0"
+version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "922441c228366ed98d3534b87bc7c987c50564094c3abbc3513717786419252d"
+checksum = "9e134909a9a293e04d2cc31928aa95679c5e4df954d0b85483159bd20d8f047f"
dependencies = [
"glib-sys",
"gobject-sys",
@@ -487,9 +487,9 @@ dependencies = [
[[package]]
name = "pangocairo"
-version = "0.16.0"
+version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a726760a29e5e17d965d5d7573548e385ae9ce99cb7adcf70d75d4627f23fc7a"
+checksum = "16ad2ec87789371b551fd2367c10aa37060412ffd3e60abd99491b21b93a3f9b"
dependencies = [
"bitflags",
"cairo-rs",
@@ -501,9 +501,9 @@ dependencies = [
[[package]]
name = "pangocairo-sys"
-version = "0.16.0"
+version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8281198ea4596bdc6e22b0d3565471c9456d7125e423a785f866640c18b57ec"
+checksum = "848d2df9b7f1a8c7a19d994de443bcbe5d4382610ccb8e64247f932be74fcf76"
dependencies = [
"cairo-sys-rs",
"glib-sys",
@@ -526,9 +526,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pkg-config"
-version = "0.3.25"
+version = "0.3.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
[[package]]
name = "proc-macro-crate"
@@ -567,9 +567,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.43"
+version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
dependencies = [
"unicode-ident",
]
@@ -614,9 +614,9 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.6.0"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a"
dependencies = [
"aho-corasick",
"memchr",
@@ -625,9 +625,9 @@ dependencies = [
[[package]]
name = "regex-syntax"
-version = "0.6.27"
+version = "0.6.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
[[package]]
name = "ryu"
@@ -637,24 +637,24 @@ checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
[[package]]
name = "scoped-tls"
-version = "1.0.0"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
[[package]]
name = "serde"
-version = "1.0.145"
+version = "1.0.148"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b"
+checksum = "e53f64bb4ba0191d6d0676e1b141ca55047d83b74f5607e6d8eb88126c52c2dc"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.145"
+version = "1.0.148"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c"
+checksum = "a55492425aa53521babf6137309e7d34c20bbfbbfcfe2c7f3a047fd1f6b92c0c"
dependencies = [
"proc-macro2",
"quote",
@@ -663,9 +663,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.85"
+version = "1.0.89"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
+checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db"
dependencies = [
"itoa",
"ryu",
@@ -683,14 +683,14 @@ dependencies = [
[[package]]
name = "smallvec"
-version = "1.9.0"
+version = "1.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
[[package]]
name = "smithay-client-toolkit"
version = "0.16.0"
-source = "git+https://github.com/Smithay/client-toolkit#e5d7c9084f8d80bef4c625c6ef52ec42dde4e211"
+source = "git+https://github.com/Smithay/client-toolkit#638ca60e3ae8277d645991cc986be3df5981fbb6"
dependencies = [
"bitflags",
"dlib",
@@ -720,9 +720,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "1.0.100"
+version = "1.0.104"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e"
+checksum = "4ae548ec36cf198c0ef7710d3c230987c2d6d7bd98ad6edc0274462724c585ce"
dependencies = [
"proc-macro2",
"quote",
@@ -731,9 +731,9 @@ dependencies = [
[[package]]
name = "system-deps"
-version = "6.0.2"
+version = "6.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1a45a1c4c9015217e12347f2a411b57ce2c4fc543913b14b6fe40483328e709"
+checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff"
dependencies = [
"cfg-expr",
"heck",
@@ -753,18 +753,18 @@ dependencies = [
[[package]]
name = "thiserror"
-version = "1.0.35"
+version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85"
+checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.35"
+version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783"
+checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
dependencies = [
"proc-macro2",
"quote",
@@ -773,14 +773,13 @@ dependencies = [
[[package]]
name = "tokio"
-version = "1.21.1"
+version = "1.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0020c875007ad96677dcc890298f4b942882c5d4eb7cc8f439fc3bf813dc9c95"
+checksum = "d76ce4a75fb488c605c54bf610f221cea8b0dafb53333c1a67e8ee199dcd2ae3"
dependencies = [
"autocfg",
"libc",
"mio",
- "once_cell",
"pin-project-lite",
"socket2",
"tokio-macros",
@@ -809,15 +808,15 @@ dependencies = [
[[package]]
name = "unicode-ident"
-version = "1.0.4"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
[[package]]
name = "version-compare"
-version = "0.1.0"
+version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
[[package]]
name = "version_check"
@@ -957,44 +956,101 @@ version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
dependencies = [
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_msvc",
+ "windows_aarch64_msvc 0.36.1",
+ "windows_i686_gnu 0.36.1",
+ "windows_i686_msvc 0.36.1",
+ "windows_x86_64_gnu 0.36.1",
+ "windows_x86_64_msvc 0.36.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc 0.42.0",
+ "windows_i686_gnu 0.42.0",
+ "windows_i686_msvc 0.42.0",
+ "windows_x86_64_gnu 0.42.0",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc 0.42.0",
]
[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
+
+[[package]]
name = "windows_aarch64_msvc"
version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
+
+[[package]]
name = "windows_i686_gnu"
version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
[[package]]
+name = "windows_i686_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
+
+[[package]]
name = "windows_i686_msvc"
version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
[[package]]
+name = "windows_i686_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
+
+[[package]]
name = "windows_x86_64_gnu"
version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
+
+[[package]]
name = "windows_x86_64_msvc"
version = "0.36.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
+
+[[package]]
name = "xcursor"
version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/protocols/river-status-unstable-v1.xml b/protocols/river-status-unstable-v1.xml
index 13b6225..49ad418 100644
--- a/protocols/river-status-unstable-v1.xml
+++ b/protocols/river-status-unstable-v1.xml
@@ -16,7 +16,7 @@
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
</copyright>
- <interface name="zriver_status_manager_v1" version="3">
+ <interface name="zriver_status_manager_v1" version="4">
<description summary="manage river status objects">
A global factory for objects that receive status information specific
to river. It could be used to implement, for example, a status bar.
@@ -47,7 +47,7 @@
</request>
</interface>
- <interface name="zriver_output_status_v1" version="3">
+ <interface name="zriver_output_status_v1" version="4">
<description summary="track output tags and focus">
This interface allows clients to receive information about the current
windowing state of an output.
@@ -84,7 +84,7 @@
<arg name="tags" type="uint" summary="32-bit bitfield"/>
</event>
- <event name="layout_name" since="3">
+ <event name="layout_name" since="4">
<description summary="name of the layout">
Sent once on binding the interface should a layout name exist and again
whenever the name changes.
@@ -92,7 +92,7 @@
<arg name="name" type="string" summary="layout name"/>
</event>
- <event name="layout_name_clear" since="3">
+ <event name="layout_name_clear" since="4">
<description summary="name of the layout">
Sent when the current layout name has been removed without a new one
being set, for example whent the active layout generator disconnects.
diff --git a/src/bar.rs b/src/bar.rs
index b68aefa..90215a2 100644
--- a/src/bar.rs
+++ b/src/bar.rs
@@ -2,7 +2,7 @@ use std::collections::BinaryHeap;
use pangocairo::cairo;
use smithay_client_toolkit::{
- reexports::client::protocol::{wl_seat, wl_shm},
+ reexports::client::protocol::{wl_output, wl_seat, wl_shm},
shell::layer::LayerSurface,
};
@@ -20,6 +20,7 @@ use crate::{
};
pub struct Bar {
+ pub output: wl_output::WlOutput,
pub configured: bool,
pub width: u32,
pub height: u32,
@@ -29,6 +30,7 @@ pub struct Bar {
pub river_output_status: Option<RiverOutputStatus>,
pub river_control: Option<RiverControlState>,
pub layout_name: Option<String>,
+ pub layout_name_computed: Option<ComputedText>,
pub tags_btns: ButtonManager,
pub tags_info: TagsInfo,
pub tags_computed: Vec<ComputedText>,
@@ -50,6 +52,11 @@ impl Bar {
self.river_output_status.is_some()
}
+ pub fn set_layout_name(&mut self, layout_name: Option<String>) {
+ self.layout_name_computed = None;
+ self.layout_name = layout_name;
+ }
+
pub fn click(
&mut self,
ss: &mut SharedState,
@@ -92,7 +99,7 @@ impl Bar {
let height_f = height as f64;
let (buffer, canvas) = ss
- .get_pool(height as usize * stride as usize)
+ .pool
.create_buffer(
width * self.scale,
height * self.scale,
@@ -175,18 +182,20 @@ impl Bar {
// Display layout name
if let Some(layout_name) = &self.layout_name {
- let text = ComputedText::new(
- layout_name,
- text::Attributes {
- font: &ss.config.font,
- padding_left: 25.0,
- padding_right: 25.0,
- min_width: None,
- align: Default::default(),
- markup: false,
- },
- &cairo_ctx,
- );
+ let text = self.layout_name_computed.get_or_insert_with(|| {
+ ComputedText::new(
+ layout_name,
+ text::Attributes {
+ font: &ss.config.font,
+ padding_left: 25.0,
+ padding_right: 25.0,
+ min_width: None,
+ align: Default::default(),
+ markup: false,
+ },
+ &cairo_ctx,
+ )
+ });
text.render(
&cairo_ctx,
RenderOptions {
diff --git a/src/main.rs b/src/main.rs
index 8ae31aa..3dad693 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -39,8 +39,6 @@ async fn main() -> anyhow::Result<()> {
Interest::READABLE,
)?;
- event_queue.roundtrip(&mut state)?;
-
loop {
tokio::select! {
readable = async_fd.readable() => {
diff --git a/src/river_protocols/status.rs b/src/river_protocols/status.rs
index 4424c58..ad93279 100644
--- a/src/river_protocols/status.rs
+++ b/src/river_protocols/status.rs
@@ -1,5 +1,3 @@
-use std::sync::{Arc, Weak};
-
use wayland_client::{
globals::{BindError, GlobalList},
protocol::wl_output,
@@ -11,7 +9,6 @@ use protocol::{zriver_output_status_v1, zriver_status_manager_v1};
#[derive(Debug, Clone)]
pub struct RiverStatusState {
status_manager: zriver_status_manager_v1::ZriverStatusManagerV1,
- output_statuses: Vec<Weak<OutputStatusInner>>,
}
impl RiverStatusState {
@@ -19,22 +16,8 @@ impl RiverStatusState {
where
D: Dispatch<zriver_status_manager_v1::ZriverStatusManagerV1, (), D> + 'static,
{
- let status_manager = globals.bind(qh, 1..=3, ())?;
- Ok(Self {
- status_manager,
- output_statuses: Vec::new(),
- })
- }
-
- pub fn get_output_status(
- &self,
- status: &zriver_output_status_v1::ZriverOutputStatusV1,
- ) -> Option<RiverOutputStatus> {
- self.output_statuses
- .iter()
- .filter_map(Weak::upgrade)
- .find(|inner| &inner.status == status)
- .map(RiverOutputStatus)
+ let status_manager = globals.bind(qh, 1..=4, ())?;
+ Ok(Self { status_manager })
}
#[must_use = "The output status is destroyed if dropped"]
@@ -48,70 +31,37 @@ impl RiverStatusState {
+ Dispatch<zriver_output_status_v1::ZriverOutputStatusV1, RiverStatusData>
+ 'static,
{
- let output_status =
- self.status_manager
- .get_river_output_status(output, qh, RiverStatusData {});
-
- let output_status = RiverOutputStatus(Arc::new(OutputStatusInner {
- status: output_status,
- }));
-
- self.output_statuses.push(Arc::downgrade(&output_status.0));
-
- output_status
+ RiverOutputStatus(self.status_manager.get_river_output_status(
+ output,
+ qh,
+ RiverStatusData {
+ output: output.clone(),
+ },
+ ))
}
}
pub trait RiverStatusHandler: Sized {
fn river_status_state(&mut self) -> &mut RiverStatusState;
- fn focused_tags_updated(
- &mut self,
- conn: &Connection,
- qh: &QueueHandle<Self>,
- output_status: &RiverOutputStatus,
- focused: u32,
- );
+ fn focused_tags_updated(&mut self, output: &wl_output::WlOutput, focused: u32);
- fn urgent_tags_updated(
- &mut self,
- conn: &Connection,
- qh: &QueueHandle<Self>,
- output_status: &RiverOutputStatus,
- urgent: u32,
- );
+ fn urgent_tags_updated(&mut self, output: &wl_output::WlOutput, urgent: u32);
- fn views_tags_updated(
- &mut self,
- conn: &Connection,
- qh: &QueueHandle<Self>,
- output_status: &RiverOutputStatus,
- tags: Vec<u32>,
- );
+ fn views_tags_updated(&mut self, output: &wl_output::WlOutput, tags: Vec<u32>);
- fn layout_name_updated(
- &mut self,
- conn: &Connection,
- qh: &QueueHandle<Self>,
- output_status: &RiverOutputStatus,
- layout_name: Option<String>,
- );
+ fn layout_name_updated(&mut self, output: &wl_output::WlOutput, layout_name: Option<String>);
}
-#[derive(Debug, Clone)]
-pub struct RiverOutputStatus(Arc<OutputStatusInner>);
+#[derive(Debug)]
+pub struct RiverOutputStatus(zriver_output_status_v1::ZriverOutputStatusV1);
-impl PartialEq for RiverOutputStatus {
- fn eq(&self, other: &Self) -> bool {
- Arc::ptr_eq(&self.0, &other.0)
+impl Drop for RiverOutputStatus {
+ fn drop(&mut self) {
+ self.0.destroy();
}
}
-#[derive(Debug)]
-pub struct RiverStatusData {
- // This is empty right now, but may be populated in the future.
-}
-
#[macro_export]
macro_rules! delegate_river_status {
($ty: ty) => {
@@ -125,14 +75,8 @@ macro_rules! delegate_river_status {
}
#[derive(Debug)]
-struct OutputStatusInner {
- status: zriver_output_status_v1::ZriverOutputStatusV1,
-}
-
-impl Drop for OutputStatusInner {
- fn drop(&mut self) {
- self.status.destroy();
- }
+pub struct RiverStatusData {
+ output: wl_output::WlOutput,
}
impl<D> Dispatch<zriver_status_manager_v1::ZriverStatusManagerV1, (), D> for RiverStatusState
@@ -160,35 +104,26 @@ where
{
fn event(
data: &mut D,
- status: &zriver_output_status_v1::ZriverOutputStatusV1,
+ _: &zriver_output_status_v1::ZriverOutputStatusV1,
event: zriver_output_status_v1::Event,
- _udata: &RiverStatusData,
- conn: &Connection,
- qh: &QueueHandle<D>,
+ udata: &RiverStatusData,
+ _: &Connection,
+ _: &QueueHandle<D>,
) {
use zriver_output_status_v1::Event;
- // Remove any statuses that have been dropped
- data.river_status_state()
- .output_statuses
- .retain(|status| status.upgrade().is_some());
-
- if let Some(status) = data.river_status_state().get_output_status(status) {
- match event {
- Event::FocusedTags { tags } => data.focused_tags_updated(conn, qh, &status, tags),
- Event::UrgentTags { tags } => data.urgent_tags_updated(conn, qh, &status, tags),
- Event::ViewTags { tags } => {
- let tags = tags
- .chunks_exact(4)
- .map(|bytes| u32::from_ne_bytes(bytes.try_into().unwrap()))
- .collect();
- data.views_tags_updated(conn, qh, &status, tags);
- }
- Event::LayoutName { name } => {
- data.layout_name_updated(conn, qh, &status, Some(name))
- }
- Event::LayoutNameClear => data.layout_name_updated(conn, qh, &status, None),
+ match event {
+ Event::FocusedTags { tags } => data.focused_tags_updated(&udata.output, tags),
+ Event::UrgentTags { tags } => data.urgent_tags_updated(&udata.output, tags),
+ Event::ViewTags { tags } => {
+ let tags = tags
+ .chunks_exact(4)
+ .map(|bytes| u32::from_ne_bytes(bytes.try_into().unwrap()))
+ .collect();
+ data.views_tags_updated(&udata.output, tags);
}
+ Event::LayoutName { name } => data.layout_name_updated(&udata.output, Some(name)),
+ Event::LayoutNameClear => data.layout_name_updated(&udata.output, None),
}
}
}
diff --git a/src/shared_state.rs b/src/shared_state.rs
index 554d856..c4ec9d6 100644
--- a/src/shared_state.rs
+++ b/src/shared_state.rs
@@ -1,7 +1,4 @@
-use smithay_client_toolkit::{
- reexports::client::QueueHandle,
- shm::{slot::SlotPool, ShmState},
-};
+use smithay_client_toolkit::{reexports::client::QueueHandle, shm::slot::SlotPool};
use crate::{
config::Config,
@@ -13,18 +10,9 @@ use crate::{
#[derive(Debug)]
pub struct SharedState {
pub qh: QueueHandle<State>,
- pub shm_state: ShmState,
- pub pool: Option<SlotPool>,
+ pub pool: SlotPool,
pub config: Config,
pub status_cmd: Option<StatusCmd>,
pub blocks: Vec<Block>,
pub blocks_cache: Vec<ComputedBlock>,
}
-
-impl SharedState {
- pub fn get_pool(&mut self, len: usize) -> &mut SlotPool {
- self.pool.get_or_insert_with(|| {
- SlotPool::new(len, &self.shm_state).expect("Failed to create pool")
- })
- }
-}
diff --git a/src/state.rs b/src/state.rs
index e6cb421..e2e57ee 100644
--- a/src/state.rs
+++ b/src/state.rs
@@ -18,7 +18,7 @@ use smithay_client_toolkit::{
shell::layer::{
Anchor, Layer, LayerShell, LayerShellHandler, LayerSurface, LayerSurfaceConfigure,
},
- shm::{ShmHandler, ShmState},
+ shm::{slot::SlotPool, ShmHandler, ShmState},
};
use tokio::io::unix::AsyncFdReadyGuard;
use wayland_client::globals::GlobalList;
@@ -31,7 +31,7 @@ use crate::{
pointer_btn::PointerBtn,
river_protocols::{
control::{RiverControlHandler, RiverControlState},
- status::{RiverOutputStatus, RiverStatusHandler, RiverStatusState},
+ status::{RiverStatusHandler, RiverStatusState},
},
shared_state::SharedState,
status_cmd::StatusCmd,
@@ -40,6 +40,7 @@ use crate::{
pub struct State {
registry_state: RegistryState,
+ shm_state: ShmState,
seat_state: SeatState,
output_state: OutputState,
compositor_state: CompositorState,
@@ -79,8 +80,12 @@ impl State {
}),
};
+ let shm_state = ShmState::bind(globals, &qh).unwrap();
+ let pool = SlotPool::new(1024, &shm_state).expect("Failed to create pool");
+
let mut this = Self {
registry_state: RegistryState::new(globals),
+ shm_state,
seat_state: SeatState::new(globals, &qh),
output_state: OutputState::new(globals, &qh),
compositor_state: CompositorState::bind(globals, &qh).unwrap(),
@@ -92,8 +97,7 @@ impl State {
bars: Vec::new(),
shared_state: SharedState {
qh: event_queue.handle(),
- shm_state: ShmState::bind(globals, &qh).unwrap(),
- pool: None,
+ pool,
config,
status_cmd,
blocks: Vec::new(),
@@ -186,7 +190,7 @@ impl OutputHandler for State {
output: wl_output::WlOutput,
) {
let height = self.shared_state.config.height;
- let surface = self.compositor_state.create_surface(qh).unwrap();
+ let surface = self.compositor_state.create_surface(qh);
let layer = LayerSurface::builder()
.output(&output)
.size((0, height))
@@ -199,6 +203,7 @@ impl OutputHandler for State {
.as_mut()
.map(|s| s.new_output_status(qh, &output));
self.bars.push(Bar {
+ output,
configured: false,
width: 0,
height,
@@ -208,6 +213,7 @@ impl OutputHandler for State {
river_output_status,
river_control: self.river_control_state.clone(),
layout_name: None,
+ layout_name_computed: None,
tags_btns: Default::default(),
tags_info: Default::default(),
tags_computed: Vec::new(),
@@ -275,7 +281,7 @@ impl SeatHandler for State {
seat,
pointer,
themed_pointer,
- pointer_surface: self.compositor_state.create_surface(qh).unwrap(), // TODO: make a PR to remove this unwrap
+ pointer_surface: self.compositor_state.create_surface(qh),
finger_scroll: 0.0,
});
}
@@ -321,7 +327,7 @@ impl PointerHandler for State {
.set_cursor(
conn,
"default",
- self.shared_state.shm_state.wl_shm(),
+ self.shm_state.wl_shm(),
&seat.pointer_surface,
)
.unwrap();
@@ -382,7 +388,7 @@ impl PointerHandler for State {
impl ShmHandler for State {
fn shm_state(&mut self) -> &mut ShmState {
- &mut self.shared_state.shm_state
+ &mut self.shm_state
}
}
@@ -391,67 +397,27 @@ impl RiverStatusHandler for State {
self.river_status_state.as_mut().unwrap()
}
- fn focused_tags_updated(
- &mut self,
- _conn: &Connection,
- _qh: &QueueHandle<Self>,
- output_status: &RiverOutputStatus,
- focused: u32,
- ) {
- let bar = self
- .bars
- .iter_mut()
- .find(|b| b.river_output_status.as_ref() == Some(output_status))
- .unwrap();
+ fn focused_tags_updated(&mut self, output: &wl_output::WlOutput, focused: u32) {
+ let bar = self.bars.iter_mut().find(|b| &b.output == output).unwrap();
bar.tags_info.focused = focused;
bar.draw(&mut self.shared_state);
}
- fn urgent_tags_updated(
- &mut self,
- _conn: &Connection,
- _qh: &QueueHandle<Self>,
- output_status: &RiverOutputStatus,
- urgent: u32,
- ) {
- let bar = self
- .bars
- .iter_mut()
- .find(|b| b.river_output_status.as_ref() == Some(output_status))
- .unwrap();
+ fn urgent_tags_updated(&mut self, output: &wl_output::WlOutput, urgent: u32) {
+ let bar = self.bars.iter_mut().find(|b| &b.output == output).unwrap();
bar.tags_info.urgent = urgent;
bar.draw(&mut self.shared_state);
}
- fn views_tags_updated(
- &mut self,
- _conn: &Connection,
- _qh: &QueueHandle<Self>,
- output_status: &RiverOutputStatus,
- tags: Vec<u32>,
- ) {
- let bar = self
- .bars
- .iter_mut()
- .find(|b| b.river_output_status.as_ref() == Some(output_status))
- .unwrap();
+ fn views_tags_updated(&mut self, output: &wl_output::WlOutput, tags: Vec<u32>) {
+ let bar = self.bars.iter_mut().find(|b| &b.output == output).unwrap();
bar.tags_info.active = tags.into_iter().fold(0, |a, b| a | b);
bar.draw(&mut self.shared_state);
}
- fn layout_name_updated(
- &mut self,
- _conn: &Connection,
- _qh: &QueueHandle<Self>,
- output_status: &RiverOutputStatus,
- layout_name: Option<String>,
- ) {
- let bar = self
- .bars
- .iter_mut()
- .find(|b| b.river_output_status.as_ref() == Some(output_status))
- .unwrap();
- bar.layout_name = layout_name;
+ fn layout_name_updated(&mut self, output: &wl_output::WlOutput, layout_name: Option<String>) {
+ let bar = self.bars.iter_mut().find(|b| &b.output == output).unwrap();
+ bar.set_layout_name(layout_name);
bar.draw(&mut self.shared_state);
}
}