diff options
| author | MaxVerevkin <maxxverrr@gmail.com> | 2022-12-10 17:46:48 +0200 |
|---|---|---|
| committer | MaxVerevkin <maxxverrr@gmail.com> | 2022-12-10 17:46:48 +0200 |
| commit | 2570f39b5daf6e2a13b3973d47aa7c67fbb457fb (patch) | |
| tree | e330dee89380a94635113c1312a9dcbb0d9e5883 | |
| parent | f6727acdd4cc112c51d3dd71df61689738e31de9 (diff) | |
| download | i3bar-mango-2570f39b5daf6e2a13b3973d47aa7c67fbb457fb.tar.gz | |
refactor
| -rw-r--r-- | Cargo.lock | 258 | ||||
| -rw-r--r-- | protocols/river-status-unstable-v1.xml | 8 | ||||
| -rw-r--r-- | src/bar.rs | 37 | ||||
| -rw-r--r-- | src/main.rs | 2 | ||||
| -rw-r--r-- | src/river_protocols/status.rs | 135 | ||||
| -rw-r--r-- | src/shared_state.rs | 16 | ||||
| -rw-r--r-- | src/state.rs | 80 |
7 files changed, 244 insertions, 292 deletions
@@ -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. @@ -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); } } |
