Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package wl-screenrec for openSUSE:Factory 
checked in at 2024-03-18 16:46:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wl-screenrec (Old)
 and      /work/SRC/openSUSE:Factory/.wl-screenrec.new.1905 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "wl-screenrec"

Mon Mar 18 16:46:23 2024 rev:3 rq:1158921 version:0.1.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/wl-screenrec/wl-screenrec.changes        
2023-12-28 23:02:33.880857394 +0100
+++ /work/SRC/openSUSE:Factory/.wl-screenrec.new.1905/wl-screenrec.changes      
2024-03-18 16:46:42.651721432 +0100
@@ -1,0 +2,8 @@
+Mon Mar 18 08:25:18 UTC 2024 - Joshua Smith <smolsh...@opensuse.org>
+
+- Update to version 0.1.3:
+  * Add AV1 codec
+  * Support for SIGHUP
+  * General improvements, dependency updates
+
+-------------------------------------------------------------------

Old:
----
  wl-screenrec-0.1.2.tar.gz

New:
----
  wl-screenrec-0.1.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ wl-screenrec.spec ++++++
--- /var/tmp/diff_new_pack.RrvqKT/_old  2024-03-18 16:46:43.483752107 +0100
+++ /var/tmp/diff_new_pack.RrvqKT/_new  2024-03-18 16:46:43.483752107 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package wl-screenrec
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           wl-screenrec
-Version:        0.1.2
+Version:        0.1.3
 License:        Apache-2.0
 Release:        0
 Summary:        High performance hardware accelerated wlroots screen recorder
@@ -40,7 +40,9 @@
 %description
 High performance screen recorder for wlroots Wayland.
 
-Uses dma-buf transfers to get surface, and uses the GPU to do both the pixel 
format conversion and the encoding, meaning the raw video data never touches 
the CPU, leaving it free to run your applications.
+Uses dma-buf transfers to get surface, and uses the GPU to do both the pixel
+format conversion and the encoding, meaning the raw video data never touches 
the
+CPU, leaving it free to run your applications.
 
 %prep
 %autosetup -a1

++++++ vendor.tar.zst ++++++
Binary files /var/tmp/diff_new_pack.RrvqKT/_old and 
/var/tmp/diff_new_pack.RrvqKT/_new differ

++++++ wl-screenrec-0.1.2.tar.gz -> wl-screenrec-0.1.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wl-screenrec-0.1.2/Cargo.lock 
new/wl-screenrec-0.1.3/Cargo.lock
--- old/wl-screenrec-0.1.2/Cargo.lock   2023-12-04 04:07:52.000000000 +0100
+++ new/wl-screenrec-0.1.3/Cargo.lock   2024-02-16 06:09:17.000000000 +0100
@@ -13,9 +13,9 @@
 
 [[package]]
 name = "anstream"
-version = "0.6.4"
+version = "0.6.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5"
 dependencies = [
  "anstyle",
  "anstyle-parse",
@@ -27,49 +27,43 @@
 
 [[package]]
 name = "anstyle"
-version = "1.0.4"
+version = "1.0.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc"
 
 [[package]]
 name = "anstyle-parse"
-version = "0.2.2"
+version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
+checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
 dependencies = [
  "utf8parse",
 ]
 
 [[package]]
 name = "anstyle-query"
-version = "1.0.0"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
 dependencies = [
- "windows-sys",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "anstyle-wincon"
-version = "3.0.1"
+version = "3.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
 dependencies = [
  "anstyle",
- "windows-sys",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "anyhow"
-version = "1.0.75"
+version = "1.0.79"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
-
-[[package]]
-name = "autocfg"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
 
 [[package]]
 name = "bindgen"
@@ -99,9 +93,9 @@
 
 [[package]]
 name = "bitflags"
-version = "2.4.1"
+version = "2.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
 
 [[package]]
 name = "cc"
@@ -129,20 +123,20 @@
 
 [[package]]
 name = "clang-sys"
-version = "1.6.1"
+version = "1.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1"
 dependencies = [
  "glob",
  "libc",
- "libloading 0.7.4",
+ "libloading",
 ]
 
 [[package]]
 name = "clap"
-version = "4.4.10"
+version = "4.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272"
+checksum = "80c21025abd42669a92efc996ef13cfb2c5c627858421ea58d5c3b331a6c134f"
 dependencies = [
  "clap_builder",
  "clap_derive",
@@ -150,9 +144,9 @@
 
 [[package]]
 name = "clap_builder"
-version = "4.4.9"
+version = "4.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1"
+checksum = "458bf1f341769dfcf849846f65dffdf9146daa56bcd2a47cb4e1de9915567c99"
 dependencies = [
  "anstream",
  "anstyle",
@@ -162,21 +156,21 @@
 
 [[package]]
 name = "clap_derive"
-version = "4.4.7"
+version = "4.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47"
 dependencies = [
  "heck",
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.49",
 ]
 
 [[package]]
 name = "clap_lex"
-version = "0.6.0"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
 
 [[package]]
 name = "colorchoice"
@@ -190,7 +184,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
 dependencies = [
- "libloading 0.8.1",
+ "libloading",
 ]
 
 [[package]]
@@ -206,10 +200,20 @@
 checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4"
 
 [[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
 name = "ffmpeg-next"
-version = "6.1.0"
+version = "6.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f45d337871329d85f5aad1e3d7b09d033cd611d50f734fd6464c731fe7c769bf"
+checksum = "4e72c72e8dcf638fb0fb03f033a954691662b5dabeaa3f85a6607d101569fccd"
 dependencies = [
  "bitflags 1.3.2",
  "ffmpeg-sys-next",
@@ -244,9 +248,9 @@
 
 [[package]]
 name = "hermit-abi"
-version = "0.3.3"
+version = "0.3.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd"
 
 [[package]]
 name = "human-size"
@@ -256,9 +260,9 @@
 
 [[package]]
 name = "itoa"
-version = "1.0.9"
+version = "1.0.10"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
 
 [[package]]
 name = "lazy_static"
@@ -274,29 +278,25 @@
 
 [[package]]
 name = "libc"
-version = "0.2.150"
+version = "0.2.153"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
 
 [[package]]
 name = "libloading"
-version = "0.7.4"
+version = "0.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
 dependencies = [
  "cfg-if",
- "winapi",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
-name = "libloading"
-version = "0.8.1"
+name = "linux-raw-sys"
+version = "0.4.13"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
-dependencies = [
- "cfg-if",
- "windows-sys",
-]
+checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
 
 [[package]]
 name = "log"
@@ -306,18 +306,9 @@
 
 [[package]]
 name = "memchr"
-version = "2.6.4"
+version = "2.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
-
-[[package]]
-name = "memoffset"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
-dependencies = [
- "autocfg",
-]
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
 
 [[package]]
 name = "minimal-lexical"
@@ -327,23 +318,11 @@
 
 [[package]]
 name = "nix"
-version = "0.26.4"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
-dependencies = [
- "bitflags 1.3.2",
- "cfg-if",
- "libc",
- "memoffset",
-]
-
-[[package]]
-name = "nix"
 version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
 dependencies = [
- "bitflags 2.4.1",
+ "bitflags 2.4.2",
  "cfg-if",
  "libc",
 ]
@@ -376,42 +355,42 @@
 
 [[package]]
 name = "pkg-config"
-version = "0.3.27"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.70"
+version = "1.0.78"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "quick-xml"
-version = "0.30.0"
+version = "0.31.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956"
+checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33"
 dependencies = [
  "memchr",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.33"
+version = "1.0.35"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
 dependencies = [
  "proc-macro2",
 ]
 
 [[package]]
 name = "regex"
-version = "1.10.2"
+version = "1.10.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -421,9 +400,9 @@
 
 [[package]]
 name = "regex-automata"
-version = "0.4.3"
+version = "0.4.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -443,10 +422,23 @@
 checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
 
 [[package]]
+name = "rustix"
+version = "0.38.31"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949"
+dependencies = [
+ "bitflags 2.4.2",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
 name = "ryu"
-version = "1.0.15"
+version = "1.0.16"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
 
 [[package]]
 name = "scoped-tls"
@@ -456,29 +448,29 @@
 
 [[package]]
 name = "serde"
-version = "1.0.193"
+version = "1.0.196"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.193"
+version = "1.0.196"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.49",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.108"
+version = "1.0.113"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79"
 dependencies = [
  "itoa",
  "ryu",
@@ -487,9 +479,9 @@
 
 [[package]]
 name = "shlex"
-version = "1.2.0"
+version = "1.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
 
 [[package]]
 name = "signal-hook"
@@ -512,15 +504,15 @@
 
 [[package]]
 name = "smallvec"
-version = "1.11.2"
+version = "1.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
 
 [[package]]
 name = "strsim"
-version = "0.10.0"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01"
 
 [[package]]
 name = "syn"
@@ -535,9 +527,9 @@
 
 [[package]]
 name = "syn"
-version = "2.0.39"
+version = "2.0.49"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+checksum = "915aea9e586f80826ee59f8453c1101f9d1c4b3964cd2460185ee8e299ada496"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -546,22 +538,22 @@
 
 [[package]]
 name = "thiserror"
-version = "1.0.50"
+version = "1.0.57"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.50"
+version = "1.0.57"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.49",
 ]
 
 [[package]]
@@ -584,13 +576,13 @@
 
 [[package]]
 name = "wayland-backend"
-version = "0.3.2"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "19152ddd73f45f024ed4534d9ca2594e0ef252c1847695255dae47f34df9fbe4"
+checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40"
 dependencies = [
  "cc",
  "downcast-rs",
- "nix 0.26.4",
+ "rustix",
  "scoped-tls",
  "smallvec",
  "wayland-sys",
@@ -598,23 +590,23 @@
 
 [[package]]
 name = "wayland-client"
-version = "0.31.1"
+version = "0.31.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1ca7d52347346f5473bf2f56705f360e8440873052e575e55890c4fa57843ed3"
+checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f"
 dependencies = [
- "bitflags 2.4.1",
- "nix 0.26.4",
+ "bitflags 2.4.2",
+ "rustix",
  "wayland-backend",
  "wayland-scanner",
 ]
 
 [[package]]
 name = "wayland-protocols"
-version = "0.31.0"
+version = "0.31.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e253d7107ba913923dc253967f35e8561a3c65f914543e46843c88ddd729e21c"
+checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4"
 dependencies = [
- "bitflags 2.4.1",
+ "bitflags 2.4.2",
  "wayland-backend",
  "wayland-client",
  "wayland-scanner",
@@ -626,7 +618,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6"
 dependencies = [
- "bitflags 2.4.1",
+ "bitflags 2.4.2",
  "wayland-backend",
  "wayland-client",
  "wayland-protocols",
@@ -635,9 +627,9 @@
 
 [[package]]
 name = "wayland-scanner"
-version = "0.31.0"
+version = "0.31.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fb8e28403665c9f9513202b7e1ed71ec56fde5c107816843fb14057910b2c09c"
+checksum = "63b3a62929287001986fb58c789dce9b67604a397c15c611ad9f747300b6c283"
 dependencies = [
  "proc-macro2",
  "quick-xml",
@@ -656,34 +648,21 @@
 ]
 
 [[package]]
-name = "winapi"
-version = "0.3.9"
+name = "windows-sys"
+version = "0.48.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
 dependencies = [
- "winapi-i686-pc-windows-gnu",
- "winapi-x86_64-pc-windows-gnu",
+ "windows-targets 0.48.5",
 ]
 
 [[package]]
-name = "winapi-i686-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-
-[[package]]
-name = "winapi-x86_64-pc-windows-gnu"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-
-[[package]]
 name = "windows-sys"
-version = "0.48.0"
+version = "0.52.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
 dependencies = [
- "windows-targets",
+ "windows-targets 0.52.0",
 ]
 
 [[package]]
@@ -692,13 +671,28 @@
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
 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",
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
 ]
 
 [[package]]
@@ -708,44 +702,86 @@
 checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
 
 [[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
 name = "windows_aarch64_msvc"
 version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
 
 [[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
 name = "windows_i686_gnu"
 version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
 
 [[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
 name = "windows_i686_msvc"
 version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
 
 [[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
 name = "windows_x86_64_gnu"
 version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
 
 [[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
 name = "windows_x86_64_gnullvm"
 version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
 
 [[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
 name = "windows_x86_64_msvc"
 version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
 
 [[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index";
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
 name = "wl-screenrec"
-version = "0.1.2"
+version = "0.1.3"
 dependencies = [
  "anyhow",
  "clap",
@@ -753,7 +789,7 @@
  "ffmpeg-next",
  "human-size",
  "libc",
- "nix 0.27.1",
+ "nix",
  "serde_json",
  "signal-hook",
  "thiserror",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wl-screenrec-0.1.2/Cargo.toml 
new/wl-screenrec-0.1.3/Cargo.toml
--- old/wl-screenrec-0.1.2/Cargo.toml   2023-12-04 04:07:52.000000000 +0100
+++ new/wl-screenrec-0.1.3/Cargo.toml   2024-02-16 06:09:17.000000000 +0100
@@ -4,7 +4,7 @@
 license-file = "LICENSE"
 homepage = "https://github.com/russelltg/wl-screenrec";
 repository = "https://github.com/russelltg/wl-screenrec";
-version = "0.1.2"
+version = "0.1.3"
 edition = "2021"
 
 # See more keys and their definitions at 
https://doc.rust-lang.org/cargo/reference/manifest.html
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wl-screenrec-0.1.2/README.md 
new/wl-screenrec-0.1.3/README.md
--- old/wl-screenrec-0.1.2/README.md    2023-12-04 04:07:52.000000000 +0100
+++ new/wl-screenrec-0.1.3/README.md    2024-02-16 06:09:17.000000000 +0100
@@ -138,7 +138,7 @@
   -f, --filename <FILENAME>
           filename to write to. container type is detected from extension 
[default: screenrecord.mp4]
   -g, --geometry <GEOMETRY>
-          geometry to capture, format x,y WxH. Compatiable with the output of 
`slurp`. Mutually exclusive with --output
+          geometry to capture, format x,y WxH. Compatible with the output of 
`slurp`. Mutually exclusive with --output
   -o, --output <OUTPUT>
           Which output to record to. Mutually exclusive with --geometry. 
Defaults to your only display if you only have one [default: ]
   -v, --verbose...
@@ -148,7 +148,7 @@
       --low-power <LOW_POWER>
           [default: auto] [possible values: auto, on, off]
       --codec <CODEC>
-          which codec to use. Used in conjunction with --no-hw to determine 
which encoder to use. Ignored if `encoder` is supplied [default: auto] 
[possible values: auto, avc, hevc, vp8, vp9]
+          which video codec to use. Ignored if `--ffmpeg-encoder` is supplied 
[default: auto] [possible values: auto, avc, hevc, vp8, vp9, av1]
       --ffmpeg-muxer <FFMPEG_MUXER>
           Which ffmpeg muxer to use. Guessed from output filename by default
       --ffmpeg-encoder <FFMPEG_ENCODER>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wl-screenrec-0.1.2/src/main.rs 
new/wl-screenrec-0.1.3/src/main.rs
--- old/wl-screenrec-0.1.2/src/main.rs  2023-12-04 04:07:52.000000000 +0100
+++ new/wl-screenrec-0.1.3/src/main.rs  2024-02-16 06:09:17.000000000 +0100
@@ -1,8 +1,9 @@
 extern crate ffmpeg_next as ffmpeg;
 
 use std::{
-    collections::{BTreeMap, VecDeque},
+    collections::{HashMap, VecDeque},
     ffi::{c_int, CStr},
+    marker::PhantomData,
     mem::swap,
     num::ParseIntError,
     os::fd::{AsRawFd, BorrowedFd},
@@ -32,9 +33,10 @@
     media, Packet, Rational,
 };
 use human_size::{Byte, Megabyte, Size, SpecificSize};
-use signal_hook::consts::{SIGINT, SIGTERM, SIGUSR1};
+use signal_hook::consts::{SIGHUP, SIGINT, SIGTERM, SIGUSR1};
 use thiserror::Error;
 use wayland_client::{
+    backend::ObjectId,
     event_created_child,
     globals::{registry_queue_init, GlobalListContents},
     protocol::{
@@ -108,7 +110,7 @@
     )]
     filename: String,
 
-    #[clap(long, short, value_parser=parse_geometry, help="geometry to 
capture, format x,y WxH. Compatiable with the output of `slurp`. Mutually 
exclusive with --output", allow_hyphen_values=true)]
+    #[clap(long, short, value_parser=parse_geometry, help="geometry to 
capture, format x,y WxH. Compatible with the output of `slurp`. Mutually 
exclusive with --output", allow_hyphen_values=true)]
     geometry: Option<(i32, i32, u32, u32)>,
 
     #[clap(
@@ -135,7 +137,7 @@
         long,
         value_enum,
         default_value_t,
-        help = "which codec to use. Used in conjunction with --no-hw to 
determine which encoder to use. Ignored if `encoder` is supplied"
+        help = "which video codec to use. Ignored if `--ffmpeg-encoder` is 
supplied"
     )]
     codec: Codec,
 
@@ -194,6 +196,7 @@
     Hevc,
     VP8,
     VP9,
+    AV1,
 }
 
 #[derive(clap::ValueEnum, Debug, Clone, Default)]
@@ -312,6 +315,7 @@
     size_pixels: Option<(i32, i32)>,
     refresh: Option<Rational>,
     output: WlOutput,
+    has_recvd_done: bool,
 }
 impl PartialOutputInfo {
     fn complete(&self, fractional_scale: f64) -> Option<OutputInfo> {
@@ -354,6 +358,22 @@
     }
 }
 
+#[derive(Default)]
+struct PartialOutputInfoWlr {
+    name: Option<String>,
+    scale: Option<f64>,
+    enabled: Option<bool>,
+}
+
+#[derive(Hash, PartialEq, Eq, Clone)]
+struct TypedObjectId<T>(ObjectId, PhantomData<T>);
+
+impl<T> TypedObjectId<T> {
+    fn new(from: &impl Proxy) -> Self {
+        TypedObjectId(from.id(), Default::default())
+    }
+}
+
 struct State {
     surfaces_owned_by_compositor: VecDeque<(
         frame::Video,
@@ -369,9 +389,9 @@
     starting_timestamp: Option<i64>,
     fps_counter: FpsCounter,
     args: Args,
-    output_fractional_scales: BTreeMap<u32, (Option<String>, Option<f64>)>, // 
key is zwlr_output_head name (object ID) -> (name property, fractional scale)
-    partial_outputs: BTreeMap<u32, PartialOutputInfo>, // key is xdg-output 
name (wayland object ID)
-    outputs: BTreeMap<u32, OutputInfo>,
+    partial_outputs_wlr: HashMap<TypedObjectId<ZwlrOutputHeadV1>, 
PartialOutputInfoWlr>,
+    partial_outputs: HashMap<TypedObjectId<WlOutput>, PartialOutputInfo>, // 
key is xdg-output name (wayland object ID)
+    outputs: HashMap<TypedObjectId<WlOutput>, Option<OutputInfo>>,        // 
none for disabled
     quit_flag: Arc<AtomicBool>,
     sigusr1_flag: Arc<AtomicBool>,
     dri_device: Option<String>,
@@ -633,28 +653,34 @@
     }
 }
 
-impl Dispatch<WlOutput, u32> for State {
+impl Dispatch<WlOutput, ()> for State {
     fn event(
         state: &mut Self,
-        _proxy: &WlOutput,
+        proxy: &WlOutput,
         event: <WlOutput as Proxy>::Event,
-        data: &u32,
+        _data: &(),
         _conn: &Connection,
         qhandle: &QueueHandle<Self>,
     ) {
-        if let wl_output::Event::Mode {
-            refresh,
-            flags: WEnum::Value(flags),
-            width,
-            height,
-        } = event
-        {
-            if flags.contains(Mode::Current) {
-                state.update_output_info_wl_output(*data, qhandle, |info| {
-                    info.refresh = Some(Rational(refresh, 1000));
-                    info.size_pixels = Some((width, height));
-                });
+        let id = TypedObjectId::new(proxy);
+        match event {
+            wl_output::Event::Mode {
+                refresh,
+                flags: WEnum::Value(flags),
+                width,
+                height,
+            } => {
+                if flags.contains(Mode::Current) {
+                    state.update_output_info_wl_output(&id, |info| {
+                        info.refresh = Some(Rational(refresh, 1000));
+                        info.size_pixels = Some((width, height));
+                    });
+                }
             }
+            wl_output::Event::Done => {
+                state.done_output_info_wl_output(id, qhandle);
+            }
+            _ => (),
         }
     }
 }
@@ -671,24 +697,24 @@
     }
 }
 
-impl Dispatch<ZxdgOutputV1, u32> for State {
+impl Dispatch<ZxdgOutputV1, TypedObjectId<WlOutput>> for State {
     fn event(
         state: &mut Self,
         _proxy: &ZxdgOutputV1,
         event: <ZxdgOutputV1 as Proxy>::Event,
-        data: &u32,
+        out_id: &TypedObjectId<WlOutput>,
         _conn: &Connection,
-        qhandle: &QueueHandle<Self>,
+        _qhandle: &QueueHandle<Self>,
     ) {
         match event {
             zxdg_output_v1::Event::Name { name } => {
-                state.update_output_info_wl_output(*data, qhandle, |info| 
info.name = Some(name));
+                state.update_output_info_wl_output(out_id, |info| info.name = 
Some(name));
             }
             zxdg_output_v1::Event::LogicalPosition { x, y } => {
-                state.update_output_info_wl_output(*data, qhandle, |info| 
info.loc = Some((x, y)));
+                state.update_output_info_wl_output(out_id, |info| info.loc = 
Some((x, y)));
             }
             zxdg_output_v1::Event::LogicalSize { width, height } => {
-                state.update_output_info_wl_output(*data, qhandle, |info| {
+                state.update_output_info_wl_output(out_id, |info| {
                     info.logical_size = Some((width, height))
                 });
             }
@@ -723,15 +749,18 @@
         event: <ZwlrOutputHeadV1 as Proxy>::Event,
         _data: &(),
         _conn: &Connection,
-        qhandle: &QueueHandle<Self>,
+        _qhandle: &QueueHandle<Self>,
     ) {
-        let id = proxy.id().protocol_id();
+        let id = TypedObjectId::new(proxy);
         match event {
             zwlr_output_head_v1::Event::Name { name } => {
-                state.update_output_info_zwlr_head(id, qhandle, |data| data.0 
= Some(name));
+                state.update_output_info_zwlr_head(id, |data| data.name = 
Some(name));
             }
             zwlr_output_head_v1::Event::Scale { scale } => {
-                state.update_output_info_zwlr_head(id, qhandle, |data| data.1 
= Some(scale));
+                state.update_output_info_zwlr_head(id, |data| data.scale = 
Some(scale));
+            }
+            zwlr_output_head_v1::Event::Enabled { enabled } => {
+                state.update_output_info_zwlr_head(id, |data| data.enabled = 
Some(enabled != 0));
             }
             _ => {}
         }
@@ -815,37 +844,23 @@
         let eq: QueueHandle<State> = queue.handle();
 
         let man: ZwlrScreencopyManagerV1 = gm
-            .bind(
-                &eq,
-                ZwlrScreencopyManagerV1::interface().version
-                    ..=ZwlrScreencopyManagerV1::interface().version,
-                (),
-            )
+            .bind(&eq, 3..=ZwlrScreencopyManagerV1::interface().version, ())
             .unwrap();
-
         let dma: ZwpLinuxDmabufV1 = gm
-            .bind(
-                &eq,
-                
ZwpLinuxDmabufV1::interface().version..=ZwpLinuxDmabufV1::interface().version,
-                (),
-            )
+            .bind(&eq, 4..=ZwpLinuxDmabufV1::interface().version, ())
             .unwrap();
 
         let registry = display.get_registry(&eq, ());
 
         let xdg_output_man: ZxdgOutputManagerV1 = gm
-            .bind(
-                &eq,
-                
ZxdgOutputManagerV1::interface().version..=ZxdgOutputManagerV1::interface().version,
-                (),
-            )
+            .bind(&eq, 3..=ZxdgOutputManagerV1::interface().version, ())
             .unwrap();
 
         // bind to get events so we can get the fractional scale
         let _wlr_output_man: ZwlrOutputManagerV1 = gm
             .bind(
                 &eq,
-                1..=4,
+                1..=ZwlrOutputManagerV1::interface().version,
                 (),
             )
             .expect("Your compositor does not seem to support the 
wlr-output-manager protocol. wl-screenrec requires a wlroots based compositor 
like sway or Hyprland");
@@ -869,17 +884,17 @@
             None // will be filled by the callback
         };
 
-        let mut partial_outputs = BTreeMap::new();
+        let mut partial_outputs = HashMap::new();
         for g in gm.contents().clone_list() {
             if g.interface == WlOutput::interface().name {
                 let output: WlOutput =
-                    registry.bind(g.name, WlOutput::interface().version, &eq, 
g.name);
+                    registry.bind(g.name, WlOutput::interface().version, &eq, 
());
 
                 // query so we get the dispatch callbacks
-                let _xdg = xdg_output_man.get_xdg_output(&output, &eq, g.name);
+                let _xdg = xdg_output_man.get_xdg_output(&output, &eq, 
TypedObjectId::new(&output));
 
                 partial_outputs.insert(
-                    g.name,
+                    TypedObjectId::new(&output),
                     PartialOutputInfo {
                         name: None,
                         loc: None,
@@ -887,6 +902,7 @@
                         size_pixels: None,
                         refresh: None,
                         output,
+                        has_recvd_done: false,
                     },
                 );
             }
@@ -903,8 +919,8 @@
                 args,
                 wl_output: None,
                 partial_outputs,
-                outputs: BTreeMap::new(),
-                output_fractional_scales: BTreeMap::new(),
+                outputs: HashMap::new(),
+                partial_outputs_wlr: HashMap::new(),
                 quit_flag,
                 sigusr1_flag,
                 dri_device,
@@ -922,75 +938,114 @@
 
     fn update_output_info_wl_output(
         &mut self,
-        wl_output_name: u32,
-        qhandle: &QueueHandle<State>,
+        id: &TypedObjectId<WlOutput>,
         f: impl FnOnce(&mut PartialOutputInfo),
     ) {
-        let output = self.partial_outputs.get_mut(&wl_output_name).unwrap();
+        let output = self.partial_outputs.get_mut(id).unwrap();
         f(output);
+    }
+
+    fn done_output_info_wl_output(
+        &mut self,
+        id: TypedObjectId<WlOutput>,
+        qhandle: &QueueHandle<State>,
+    ) {
+        let output = self.partial_outputs.get_mut(&id).unwrap();
+
+        // for each output, we will get 2 done events
+        // * when we create the WlOutput the first time
+        // * then again when we probe the xdg output
+        // we only care about the second one, as we want the xdg output info
+        if !output.has_recvd_done {
+            output.has_recvd_done = true;
+            return;
+        }
+
+        let name = match &output.name {
+            Some(name) => name,
+            None => {
+                eprintln!(
+                    "compositor did not provide name for wl_output {}, 
strange",
+                    id.0.protocol_id()
+                );
+                "<unknown>"
+            }
+        };
 
         // see if the associated zwlr_head has been probed yet
-        if let Some(name) = &output.name {
-            if let Some((_head_name, (_name, Some(scale)))) = self
-                .output_fractional_scales
-                .iter()
-                .find(|elem| elem.1 .0.as_ref() == Some(name))
-            {
-                if let Some(info) = output.complete(*scale) {
-                    self.outputs.insert(wl_output_name, info);
-                    self.start_if_output_probe_complete(qhandle);
+        if let Some((
+            _head_name,
+            PartialOutputInfoWlr {
+                scale: Some(scale),
+                enabled: Some(enabled),
+                ..
+            },
+        )) = self
+            .partial_outputs_wlr
+            .iter()
+            .find(|elem| elem.1.name.as_deref() == Some(name))
+        {
+            if let Some(info) = output.complete(*scale) {
+                if *enabled {
+                    self.outputs.insert(id, Some(info));
+                } else {
+                    self.outputs.insert(id, None);
                 }
             }
         }
+
+        self.start_if_output_probe_complete(qhandle);
     }
 
     fn update_output_info_zwlr_head(
         &mut self,
-        zwlr_head_name: u32,
-        qhandle: &QueueHandle<State>,
-        f: impl FnOnce(&mut (Option<String>, Option<f64>)),
+        id: TypedObjectId<ZwlrOutputHeadV1>,
+        f: impl FnOnce(&mut PartialOutputInfoWlr),
     ) {
-        let output = self
-            .output_fractional_scales
-            .entry(zwlr_head_name)
-            .or_default();
+        let output = self.partial_outputs_wlr.entry(id).or_default();
         f(output);
+    }
+
+    fn zwlr_ouptut_info_done(&mut self, qhandle: &QueueHandle<State>) {
+        for wlr_info in self.partial_outputs_wlr.values() {
+            let enabled = match wlr_info.enabled {
+                None => {
+                    eprintln!(
+                        "compositor did not report if output {} is enabled, 
strange",
+                        wlr_info.name.as_deref().unwrap_or("<unknown>")
+                    );
+                    true
+                }
+                Some(enabled) => enabled,
+            };
+
+            let name = match &wlr_info.name {
+                Some(name) => name,
+                None => {
+                    eprintln!("compositor did not report output name, 
strange");
+                    "<unknown>"
+                }
+            };
 
-        if let (Some(name), Some(fractional_scale)) = output {
             if let Some((wl_output_name, partial_output)) = self
                 .partial_outputs
                 .iter()
-                .find(|po| po.1.name.as_ref() == Some(name))
+                .find(|po| po.1.name.as_deref() == Some(name))
             {
-                if let Some(info) = partial_output.complete(*fractional_scale) 
{
-                    self.outputs.insert(*wl_output_name, info);
-                    self.start_if_output_probe_complete(qhandle);
+                if let Some(info) = 
partial_output.complete(wlr_info.scale.unwrap_or(1.)) {
+                    if enabled {
+                        if wlr_info.scale.is_none() {
+                            eprintln!("compositor did not report fractional 
scale for enabled output {name}");
+                        }
+                        self.outputs.insert(wl_output_name.clone(), 
Some(info));
+                    } else {
+                        self.outputs.insert(wl_output_name.clone(), None);
+                    }
                 }
             }
         }
-    }
 
-    fn zwlr_ouptut_info_done(&mut self, qhandle: &QueueHandle<State>) {
-        let keys = self
-            .output_fractional_scales
-            .keys()
-            .copied()
-            .collect::<Vec<_>>();
-        for k in keys {
-            self.update_output_info_zwlr_head(k, qhandle, |(name, scale)| {
-                if name.is_none() {
-                    eprintln!("compositor did not report output name, 
strange");
-                    *name = Some("<unknown>".to_owned());
-                }
-                if scale.is_none() {
-                    eprintln!(
-                        "compositor did not report scale for output {}, 
assuming one",
-                        name.as_deref().unwrap()
-                    );
-                    *scale = Some(1.);
-                }
-            });
-        }
+        self.start_if_output_probe_complete(qhandle);
     }
 
     fn start_if_output_probe_complete(&mut self, qhandle: &QueueHandle<State>) 
{
@@ -1001,21 +1056,25 @@
             return;
         }
 
+        let enabled_outputs: Vec<_> = self.outputs.iter().flat_map(|(_, o)| 
o).collect();
+
         let (output, (x, y), (w, h)) = match (self.args.geometry, 
self.args.output.as_str()) {
             (None, "") => {
                 // default case, capture whole monitor
-                if self.outputs.len() != 1 {
-                    eprintln!("multiple displays and no --geometry or --output 
supplied, bailing");
+                if enabled_outputs.len() != 1 {
+                    eprintln!(
+                        "multiple enabled displays and no --geometry or 
--output supplied, bailing"
+                    );
                     self.quit_flag.store(true, Ordering::SeqCst);
                     return;
                 }
 
-                let output = self.outputs.iter().next().unwrap().1;
+                let output = enabled_outputs[0];
                 (output, (0, 0), output.size_pixels)
             }
             (None, disp) => {
-                // --output but no --geoemetry
-                if let Some((_, output)) = self.outputs.iter().find(|(_, i)| 
i.name == disp) {
+                // --output but no --geometry
+                if let Some(&output) = enabled_outputs.iter().find(|i| i.name 
== disp) {
                     (output, (0, 0), output.size_pixels)
                 } else {
                     eprintln!("display {} not found, bailing", disp);
@@ -1027,7 +1086,7 @@
                 let w = w as i32;
                 let h = h as i32;
                 // --geometry but no --output
-                if let Some((_, output)) = self.outputs.iter().find(|(_, i)| {
+                if let Some(&output) = enabled_outputs.iter().find(|i| {
                     x >= i.loc.0 && x + w <= i.loc.0 + i.logical_size.0 && // 
x within
                         y >= i.loc.1 && y + h <= i.loc.1 + i.logical_size.1 // 
y within
                 }) {
@@ -1096,6 +1155,7 @@
         codec::Id::H265 | codec::Id::HEVC => Some("hevc_vaapi"),
         codec::Id::VP8 => Some("vp8_vaapi"),
         codec::Id::VP9 => Some("vp9_vaapi"),
+        codec::Id::AV1 => Some("av1_vaapi"),
         _ => None,
     }
 }
@@ -1176,6 +1236,7 @@
                 Codec::Hevc => codec::Id::HEVC,
                 Codec::VP8 => codec::Id::VP8,
                 Codec::VP9 => codec::Id::VP9,
+                Codec::AV1 => codec::Id::AV1,
             };
 
             let maybe_hw_codec = if args.hw {
@@ -1668,6 +1729,7 @@
 
     signal_hook::flag::register(SIGINT, Arc::clone(&quit_flag)).unwrap();
     signal_hook::flag::register(SIGTERM, Arc::clone(&quit_flag)).unwrap();
+    signal_hook::flag::register(SIGHUP, Arc::clone(&quit_flag)).unwrap();
     signal_hook::flag::register(SIGUSR1, Arc::clone(&sigusr1_flag)).unwrap();
 
     let args = Args::parse();

Reply via email to