diff --git a/build-aux/flatpak/gst-plugin-gtk4-sources.json b/build-aux/flatpak/gst-plugin-gtk4-sources.json
new file mode 100644
index 0000000000000000000000000000000000000000..fb85c285d26aca907370b2ea9ffaacd283c3c7a0
--- /dev/null
+++ b/build-aux/flatpak/gst-plugin-gtk4-sources.json
@@ -0,0 +1,1724 @@
+[
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/android-tzdata/android-tzdata-0.1.1.crate",
+ "sha256": "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0",
+ "dest": "cargo/vendor/android-tzdata-0.1.1"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0\", \"files\": {}}",
+ "dest": "cargo/vendor/android-tzdata-0.1.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/android_system_properties/android_system_properties-0.1.5.crate",
+ "sha256": "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311",
+ "dest": "cargo/vendor/android_system_properties-0.1.5"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311\", \"files\": {}}",
+ "dest": "cargo/vendor/android_system_properties-0.1.5",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/async-channel/async-channel-2.3.1.crate",
+ "sha256": "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a",
+ "dest": "cargo/vendor/async-channel-2.3.1"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a\", \"files\": {}}",
+ "dest": "cargo/vendor/async-channel-2.3.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/atomic_refcell/atomic_refcell-0.1.13.crate",
+ "sha256": "41e67cd8309bbd06cd603a9e693a784ac2e5d1e955f11286e355089fcab3047c",
+ "dest": "cargo/vendor/atomic_refcell-0.1.13"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"41e67cd8309bbd06cd603a9e693a784ac2e5d1e955f11286e355089fcab3047c\", \"files\": {}}",
+ "dest": "cargo/vendor/atomic_refcell-0.1.13",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/autocfg/autocfg-1.3.0.crate",
+ "sha256": "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0",
+ "dest": "cargo/vendor/autocfg-1.3.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0\", \"files\": {}}",
+ "dest": "cargo/vendor/autocfg-1.3.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/bitflags/bitflags-2.6.0.crate",
+ "sha256": "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de",
+ "dest": "cargo/vendor/bitflags-2.6.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de\", \"files\": {}}",
+ "dest": "cargo/vendor/bitflags-2.6.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/bumpalo/bumpalo-3.16.0.crate",
+ "sha256": "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c",
+ "dest": "cargo/vendor/bumpalo-3.16.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c\", \"files\": {}}",
+ "dest": "cargo/vendor/bumpalo-3.16.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/cairo-rs/cairo-rs-0.20.0.crate",
+ "sha256": "797fd5a634dcb0ad0d7d583df794deb0a236d88e759cd34b7da20198c6c9d145",
+ "dest": "cargo/vendor/cairo-rs-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"797fd5a634dcb0ad0d7d583df794deb0a236d88e759cd34b7da20198c6c9d145\", \"files\": {}}",
+ "dest": "cargo/vendor/cairo-rs-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/cairo-sys-rs/cairo-sys-rs-0.20.0.crate",
+ "sha256": "428290f914b9b86089f60f5d8a9f6e440508e1bcff23b25afd51502b0a2da88f",
+ "dest": "cargo/vendor/cairo-sys-rs-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"428290f914b9b86089f60f5d8a9f6e440508e1bcff23b25afd51502b0a2da88f\", \"files\": {}}",
+ "dest": "cargo/vendor/cairo-sys-rs-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/cc/cc-1.1.0.crate",
+ "sha256": "eaff6f8ce506b9773fa786672d63fc7a191ffea1be33f72bbd4aeacefca9ffc8",
+ "dest": "cargo/vendor/cc-1.1.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"eaff6f8ce506b9773fa786672d63fc7a191ffea1be33f72bbd4aeacefca9ffc8\", \"files\": {}}",
+ "dest": "cargo/vendor/cc-1.1.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/cfg-expr/cfg-expr-0.15.8.crate",
+ "sha256": "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02",
+ "dest": "cargo/vendor/cfg-expr-0.15.8"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02\", \"files\": {}}",
+ "dest": "cargo/vendor/cfg-expr-0.15.8",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/cfg-if/cfg-if-1.0.0.crate",
+ "sha256": "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd",
+ "dest": "cargo/vendor/cfg-if-1.0.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd\", \"files\": {}}",
+ "dest": "cargo/vendor/cfg-if-1.0.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/chrono/chrono-0.4.38.crate",
+ "sha256": "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401",
+ "dest": "cargo/vendor/chrono-0.4.38"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401\", \"files\": {}}",
+ "dest": "cargo/vendor/chrono-0.4.38",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/concurrent-queue/concurrent-queue-2.5.0.crate",
+ "sha256": "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973",
+ "dest": "cargo/vendor/concurrent-queue-2.5.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973\", \"files\": {}}",
+ "dest": "cargo/vendor/concurrent-queue-2.5.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/core-foundation-sys/core-foundation-sys-0.8.6.crate",
+ "sha256": "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f",
+ "dest": "cargo/vendor/core-foundation-sys-0.8.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f\", \"files\": {}}",
+ "dest": "cargo/vendor/core-foundation-sys-0.8.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/crossbeam-utils/crossbeam-utils-0.8.20.crate",
+ "sha256": "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80",
+ "dest": "cargo/vendor/crossbeam-utils-0.8.20"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80\", \"files\": {}}",
+ "dest": "cargo/vendor/crossbeam-utils-0.8.20",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/either/either-1.13.0.crate",
+ "sha256": "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0",
+ "dest": "cargo/vendor/either-1.13.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0\", \"files\": {}}",
+ "dest": "cargo/vendor/either-1.13.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/equivalent/equivalent-1.0.1.crate",
+ "sha256": "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5",
+ "dest": "cargo/vendor/equivalent-1.0.1"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5\", \"files\": {}}",
+ "dest": "cargo/vendor/equivalent-1.0.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/event-listener/event-listener-5.3.1.crate",
+ "sha256": "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba",
+ "dest": "cargo/vendor/event-listener-5.3.1"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba\", \"files\": {}}",
+ "dest": "cargo/vendor/event-listener-5.3.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/event-listener-strategy/event-listener-strategy-0.5.2.crate",
+ "sha256": "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1",
+ "dest": "cargo/vendor/event-listener-strategy-0.5.2"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1\", \"files\": {}}",
+ "dest": "cargo/vendor/event-listener-strategy-0.5.2",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/field-offset/field-offset-0.3.6.crate",
+ "sha256": "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f",
+ "dest": "cargo/vendor/field-offset-0.3.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f\", \"files\": {}}",
+ "dest": "cargo/vendor/field-offset-0.3.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/futures-channel/futures-channel-0.3.30.crate",
+ "sha256": "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78",
+ "dest": "cargo/vendor/futures-channel-0.3.30"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78\", \"files\": {}}",
+ "dest": "cargo/vendor/futures-channel-0.3.30",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/futures-core/futures-core-0.3.30.crate",
+ "sha256": "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d",
+ "dest": "cargo/vendor/futures-core-0.3.30"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d\", \"files\": {}}",
+ "dest": "cargo/vendor/futures-core-0.3.30",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/futures-executor/futures-executor-0.3.30.crate",
+ "sha256": "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d",
+ "dest": "cargo/vendor/futures-executor-0.3.30"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d\", \"files\": {}}",
+ "dest": "cargo/vendor/futures-executor-0.3.30",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/futures-io/futures-io-0.3.30.crate",
+ "sha256": "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1",
+ "dest": "cargo/vendor/futures-io-0.3.30"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1\", \"files\": {}}",
+ "dest": "cargo/vendor/futures-io-0.3.30",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/futures-macro/futures-macro-0.3.30.crate",
+ "sha256": "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac",
+ "dest": "cargo/vendor/futures-macro-0.3.30"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac\", \"files\": {}}",
+ "dest": "cargo/vendor/futures-macro-0.3.30",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/futures-task/futures-task-0.3.30.crate",
+ "sha256": "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004",
+ "dest": "cargo/vendor/futures-task-0.3.30"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004\", \"files\": {}}",
+ "dest": "cargo/vendor/futures-task-0.3.30",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/futures-util/futures-util-0.3.30.crate",
+ "sha256": "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48",
+ "dest": "cargo/vendor/futures-util-0.3.30"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48\", \"files\": {}}",
+ "dest": "cargo/vendor/futures-util-0.3.30",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gdk-pixbuf/gdk-pixbuf-0.20.0.crate",
+ "sha256": "28bb53ecb56857c683c9ec859908e076dd3969c7d67598bd8b1ce095d211304a",
+ "dest": "cargo/vendor/gdk-pixbuf-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"28bb53ecb56857c683c9ec859908e076dd3969c7d67598bd8b1ce095d211304a\", \"files\": {}}",
+ "dest": "cargo/vendor/gdk-pixbuf-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gdk-pixbuf-sys/gdk-pixbuf-sys-0.20.0.crate",
+ "sha256": "9f6681a0c1330d1d3968bec1529f7172d62819ef0bdbb0d18022320654158b03",
+ "dest": "cargo/vendor/gdk-pixbuf-sys-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"9f6681a0c1330d1d3968bec1529f7172d62819ef0bdbb0d18022320654158b03\", \"files\": {}}",
+ "dest": "cargo/vendor/gdk-pixbuf-sys-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gdk4/gdk4-0.9.0.crate",
+ "sha256": "4b7d7237c1487ed4b300aac7744efcbf1319e12d60d7afcd6f505414bd5b5dea",
+ "dest": "cargo/vendor/gdk4-0.9.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"4b7d7237c1487ed4b300aac7744efcbf1319e12d60d7afcd6f505414bd5b5dea\", \"files\": {}}",
+ "dest": "cargo/vendor/gdk4-0.9.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gdk4-sys/gdk4-sys-0.9.0.crate",
+ "sha256": "a67576c8ec012156d7f680e201a807b4432a77babb3157e0555e990ab6bcd878",
+ "dest": "cargo/vendor/gdk4-sys-0.9.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"a67576c8ec012156d7f680e201a807b4432a77babb3157e0555e990ab6bcd878\", \"files\": {}}",
+ "dest": "cargo/vendor/gdk4-sys-0.9.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gdk4-wayland/gdk4-wayland-0.9.0.crate",
+ "sha256": "34f422f60971cdea128457cad122c46fee48b3a53aa1e1d140919d50ff5b7491",
+ "dest": "cargo/vendor/gdk4-wayland-0.9.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"34f422f60971cdea128457cad122c46fee48b3a53aa1e1d140919d50ff5b7491\", \"files\": {}}",
+ "dest": "cargo/vendor/gdk4-wayland-0.9.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gdk4-wayland-sys/gdk4-wayland-sys-0.9.0.crate",
+ "sha256": "23295b2ecafae572224a382b876b0bdc0fed947da63b51edebc8798288002048",
+ "dest": "cargo/vendor/gdk4-wayland-sys-0.9.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"23295b2ecafae572224a382b876b0bdc0fed947da63b51edebc8798288002048\", \"files\": {}}",
+ "dest": "cargo/vendor/gdk4-wayland-sys-0.9.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gdk4-win32/gdk4-win32-0.9.0.crate",
+ "sha256": "05afbcc8165b10f9143d2c4e4a589fce3a5071c6b20d75dd40704266d6eb4bb4",
+ "dest": "cargo/vendor/gdk4-win32-0.9.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"05afbcc8165b10f9143d2c4e4a589fce3a5071c6b20d75dd40704266d6eb4bb4\", \"files\": {}}",
+ "dest": "cargo/vendor/gdk4-win32-0.9.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gdk4-win32-sys/gdk4-win32-sys-0.9.0.crate",
+ "sha256": "198c0604ceb45732c76b1fdb696d92b99400ea3a1c549fc5e40f4d79f8033205",
+ "dest": "cargo/vendor/gdk4-win32-sys-0.9.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"198c0604ceb45732c76b1fdb696d92b99400ea3a1c549fc5e40f4d79f8033205\", \"files\": {}}",
+ "dest": "cargo/vendor/gdk4-win32-sys-0.9.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gdk4-x11/gdk4-x11-0.9.0.crate",
+ "sha256": "c4b89c2149f74668d630279559fb5e2b4f11a77124b73d04518cc344854cd626",
+ "dest": "cargo/vendor/gdk4-x11-0.9.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"c4b89c2149f74668d630279559fb5e2b4f11a77124b73d04518cc344854cd626\", \"files\": {}}",
+ "dest": "cargo/vendor/gdk4-x11-0.9.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gdk4-x11-sys/gdk4-x11-sys-0.9.0.crate",
+ "sha256": "a186f565940124ebd6c1c97e9eb0909e2d19a33ccd3eebed4ff32ebda766207d",
+ "dest": "cargo/vendor/gdk4-x11-sys-0.9.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"a186f565940124ebd6c1c97e9eb0909e2d19a33ccd3eebed4ff32ebda766207d\", \"files\": {}}",
+ "dest": "cargo/vendor/gdk4-x11-sys-0.9.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gio/gio-0.20.0.crate",
+ "sha256": "398e3da68749fdc32783cbf7521ec3f65c9cf946db8c7774f8460af49e52c6e2",
+ "dest": "cargo/vendor/gio-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"398e3da68749fdc32783cbf7521ec3f65c9cf946db8c7774f8460af49e52c6e2\", \"files\": {}}",
+ "dest": "cargo/vendor/gio-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gio-sys/gio-sys-0.20.0.crate",
+ "sha256": "e4feb96b31c32730ea3e1e89aecd2e4e37ecb1c473ad8f685e3430a159419f63",
+ "dest": "cargo/vendor/gio-sys-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"e4feb96b31c32730ea3e1e89aecd2e4e37ecb1c473ad8f685e3430a159419f63\", \"files\": {}}",
+ "dest": "cargo/vendor/gio-sys-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/glib/glib-0.20.0.crate",
+ "sha256": "fee90a615ce05be7a32932cfb8adf2c4bbb4700e80d37713c981fb24c0c56238",
+ "dest": "cargo/vendor/glib-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"fee90a615ce05be7a32932cfb8adf2c4bbb4700e80d37713c981fb24c0c56238\", \"files\": {}}",
+ "dest": "cargo/vendor/glib-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/glib-macros/glib-macros-0.20.0.crate",
+ "sha256": "4da558d8177c0c8c54368818b508a4244e1286fce2858cef4e547023f0cfa5ef",
+ "dest": "cargo/vendor/glib-macros-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"4da558d8177c0c8c54368818b508a4244e1286fce2858cef4e547023f0cfa5ef\", \"files\": {}}",
+ "dest": "cargo/vendor/glib-macros-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/glib-sys/glib-sys-0.20.0.crate",
+ "sha256": "4958c26e5a01c9af00dea669a97369eccbec29a8e6d125c24ea2d85ee7467b60",
+ "dest": "cargo/vendor/glib-sys-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"4958c26e5a01c9af00dea669a97369eccbec29a8e6d125c24ea2d85ee7467b60\", \"files\": {}}",
+ "dest": "cargo/vendor/glib-sys-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gobject-sys/gobject-sys-0.20.0.crate",
+ "sha256": "c6908864f5ffff15b56df7e90346863904f49b949337ed0456b9287af61903b8",
+ "dest": "cargo/vendor/gobject-sys-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"c6908864f5ffff15b56df7e90346863904f49b949337ed0456b9287af61903b8\", \"files\": {}}",
+ "dest": "cargo/vendor/gobject-sys-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/graphene-rs/graphene-rs-0.20.0.crate",
+ "sha256": "630e940ad5824f90221d6579043a9cd1f8bec86b4a17faaf7827d58eb16e8c1f",
+ "dest": "cargo/vendor/graphene-rs-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"630e940ad5824f90221d6579043a9cd1f8bec86b4a17faaf7827d58eb16e8c1f\", \"files\": {}}",
+ "dest": "cargo/vendor/graphene-rs-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/graphene-sys/graphene-sys-0.20.0.crate",
+ "sha256": "6fb8fade7b754982f47ebbed241fd2680816fdd4598321784da10b9e1168836a",
+ "dest": "cargo/vendor/graphene-sys-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"6fb8fade7b754982f47ebbed241fd2680816fdd4598321784da10b9e1168836a\", \"files\": {}}",
+ "dest": "cargo/vendor/graphene-sys-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gsk4/gsk4-0.9.0.crate",
+ "sha256": "1f3cf2091e1af185b347b3450817d93dea6fe435df7abd4c2cd7fb5bcb4cfda8",
+ "dest": "cargo/vendor/gsk4-0.9.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"1f3cf2091e1af185b347b3450817d93dea6fe435df7abd4c2cd7fb5bcb4cfda8\", \"files\": {}}",
+ "dest": "cargo/vendor/gsk4-0.9.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gsk4-sys/gsk4-sys-0.9.0.crate",
+ "sha256": "6aa69614a26d8760c186c3690f1b0fbb917572ca23ef83137445770ceddf8cde",
+ "dest": "cargo/vendor/gsk4-sys-0.9.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"6aa69614a26d8760c186c3690f1b0fbb917572ca23ef83137445770ceddf8cde\", \"files\": {}}",
+ "dest": "cargo/vendor/gsk4-sys-0.9.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gst-plugin-version-helper/gst-plugin-version-helper-0.8.2.crate",
+ "sha256": "4e5e874f1660252fd2ec81c602066df3633b3a6fcbe2b196f7f93c27cf069b2a",
+ "dest": "cargo/vendor/gst-plugin-version-helper-0.8.2"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"4e5e874f1660252fd2ec81c602066df3633b3a6fcbe2b196f7f93c27cf069b2a\", \"files\": {}}",
+ "dest": "cargo/vendor/gst-plugin-version-helper-0.8.2",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer/gstreamer-0.23.0.crate",
+ "sha256": "21e95b1d1153239a621ec143501fdcca6c1ad3efb87d268597285f85c4136f73",
+ "dest": "cargo/vendor/gstreamer-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"21e95b1d1153239a621ec143501fdcca6c1ad3efb87d268597285f85c4136f73\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-allocators/gstreamer-allocators-0.23.0.crate",
+ "sha256": "cab5a724c4af4f18bb5cbe8b03adc188c3254f6a6acfc981ec28e00cf2f4f088",
+ "dest": "cargo/vendor/gstreamer-allocators-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"cab5a724c4af4f18bb5cbe8b03adc188c3254f6a6acfc981ec28e00cf2f4f088\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-allocators-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-allocators-sys/gstreamer-allocators-sys-0.23.0.crate",
+ "sha256": "05c49cf4d560666db1d83afa3aa3200d6dff3675ab672746260514e8583f4b68",
+ "dest": "cargo/vendor/gstreamer-allocators-sys-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"05c49cf4d560666db1d83afa3aa3200d6dff3675ab672746260514e8583f4b68\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-allocators-sys-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-base/gstreamer-base-0.23.0.crate",
+ "sha256": "a3faa0b3cf361bf538dcb25b5cb7f6e73bd872ed031d85f3997b42d3fbd66409",
+ "dest": "cargo/vendor/gstreamer-base-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"a3faa0b3cf361bf538dcb25b5cb7f6e73bd872ed031d85f3997b42d3fbd66409\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-base-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-base-sys/gstreamer-base-sys-0.23.0.crate",
+ "sha256": "4a6643ef963c636b8022adc93aa19eac6f356bd174a187c499339fc5d64c1e05",
+ "dest": "cargo/vendor/gstreamer-base-sys-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"4a6643ef963c636b8022adc93aa19eac6f356bd174a187c499339fc5d64c1e05\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-base-sys-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-gl/gstreamer-gl-0.23.0.crate",
+ "sha256": "cfe28e4b7c72022958add8a3d86e7293ff227a5086c426731b5ec5a15ffbc759",
+ "dest": "cargo/vendor/gstreamer-gl-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"cfe28e4b7c72022958add8a3d86e7293ff227a5086c426731b5ec5a15ffbc759\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-gl-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-gl-egl/gstreamer-gl-egl-0.23.0.crate",
+ "sha256": "e643d4810c4fab58eecf494504e304bd67fceabce2635dbc238302c904fb2b65",
+ "dest": "cargo/vendor/gstreamer-gl-egl-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"e643d4810c4fab58eecf494504e304bd67fceabce2635dbc238302c904fb2b65\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-gl-egl-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-gl-egl-sys/gstreamer-gl-egl-sys-0.23.0.crate",
+ "sha256": "f5b75c95d1c4ddb23018e01db2103c1012c66bf35771fae00d5cce6270cb5cbe",
+ "dest": "cargo/vendor/gstreamer-gl-egl-sys-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"f5b75c95d1c4ddb23018e01db2103c1012c66bf35771fae00d5cce6270cb5cbe\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-gl-egl-sys-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-gl-sys/gstreamer-gl-sys-0.23.0.crate",
+ "sha256": "2bc2ff7c20ae47c4a80f42a67d85d6889a5fad3bc2385aec6dc9b58795920c5b",
+ "dest": "cargo/vendor/gstreamer-gl-sys-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"2bc2ff7c20ae47c4a80f42a67d85d6889a5fad3bc2385aec6dc9b58795920c5b\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-gl-sys-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-gl-wayland/gstreamer-gl-wayland-0.23.0.crate",
+ "sha256": "4bfdf826d8cd3963d4bf2b195f9c5e83cec326320c7919710c5eea65c766a86a",
+ "dest": "cargo/vendor/gstreamer-gl-wayland-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"4bfdf826d8cd3963d4bf2b195f9c5e83cec326320c7919710c5eea65c766a86a\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-gl-wayland-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-gl-wayland-sys/gstreamer-gl-wayland-sys-0.23.0.crate",
+ "sha256": "558b96fbba96b96ced4cea976fcb159f0aef66c963ca3507cc04b9f9c5e57c35",
+ "dest": "cargo/vendor/gstreamer-gl-wayland-sys-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"558b96fbba96b96ced4cea976fcb159f0aef66c963ca3507cc04b9f9c5e57c35\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-gl-wayland-sys-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-gl-x11/gstreamer-gl-x11-0.23.0.crate",
+ "sha256": "a09d7356fed130cec502fb4d7059e830a28fcbe22495f047e3d58333981aa875",
+ "dest": "cargo/vendor/gstreamer-gl-x11-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"a09d7356fed130cec502fb4d7059e830a28fcbe22495f047e3d58333981aa875\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-gl-x11-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-gl-x11-sys/gstreamer-gl-x11-sys-0.23.0.crate",
+ "sha256": "442f9e3a4c979fb868bdf3c9249bf669370c4a463a3408f940592e15a7eea958",
+ "dest": "cargo/vendor/gstreamer-gl-x11-sys-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"442f9e3a4c979fb868bdf3c9249bf669370c4a463a3408f940592e15a7eea958\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-gl-x11-sys-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-sys/gstreamer-sys-0.23.0.crate",
+ "sha256": "d9c9005b55dd2b1784645963c1ec409f9d420a56f6348d0ae69c2eaff584bcc3",
+ "dest": "cargo/vendor/gstreamer-sys-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"d9c9005b55dd2b1784645963c1ec409f9d420a56f6348d0ae69c2eaff584bcc3\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-sys-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-video/gstreamer-video-0.23.0.crate",
+ "sha256": "57332bca1ae7825a53fe57d993b63389f132d335aed691ac76f0ffe4304548e3",
+ "dest": "cargo/vendor/gstreamer-video-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"57332bca1ae7825a53fe57d993b63389f132d335aed691ac76f0ffe4304548e3\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-video-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gstreamer-video-sys/gstreamer-video-sys-0.23.0.crate",
+ "sha256": "0f5c334d143384e8dc714af948c2e5d7d12cb588fdcfb56f3bf37c24daf350ef",
+ "dest": "cargo/vendor/gstreamer-video-sys-0.23.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"0f5c334d143384e8dc714af948c2e5d7d12cb588fdcfb56f3bf37c24daf350ef\", \"files\": {}}",
+ "dest": "cargo/vendor/gstreamer-video-sys-0.23.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gtk4/gtk4-0.9.0.crate",
+ "sha256": "eaffc6c743c9160514cc9b67eace364e5dc5798369fa809cdb04e035c21c5c5d",
+ "dest": "cargo/vendor/gtk4-0.9.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"eaffc6c743c9160514cc9b67eace364e5dc5798369fa809cdb04e035c21c5c5d\", \"files\": {}}",
+ "dest": "cargo/vendor/gtk4-0.9.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gtk4-macros/gtk4-macros-0.9.0.crate",
+ "sha256": "188211f546ce5801f6d0245c37b6249143a2cb4fa040e54829ca1e76796e9f09",
+ "dest": "cargo/vendor/gtk4-macros-0.9.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"188211f546ce5801f6d0245c37b6249143a2cb4fa040e54829ca1e76796e9f09\", \"files\": {}}",
+ "dest": "cargo/vendor/gtk4-macros-0.9.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/gtk4-sys/gtk4-sys-0.9.0.crate",
+ "sha256": "1114a207af8ada02cf4658a76692f4190f06f093380d5be07e3ca8b43aa7c666",
+ "dest": "cargo/vendor/gtk4-sys-0.9.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"1114a207af8ada02cf4658a76692f4190f06f093380d5be07e3ca8b43aa7c666\", \"files\": {}}",
+ "dest": "cargo/vendor/gtk4-sys-0.9.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/hashbrown/hashbrown-0.14.5.crate",
+ "sha256": "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1",
+ "dest": "cargo/vendor/hashbrown-0.14.5"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1\", \"files\": {}}",
+ "dest": "cargo/vendor/hashbrown-0.14.5",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/heck/heck-0.5.0.crate",
+ "sha256": "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea",
+ "dest": "cargo/vendor/heck-0.5.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea\", \"files\": {}}",
+ "dest": "cargo/vendor/heck-0.5.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/iana-time-zone/iana-time-zone-0.1.60.crate",
+ "sha256": "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141",
+ "dest": "cargo/vendor/iana-time-zone-0.1.60"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141\", \"files\": {}}",
+ "dest": "cargo/vendor/iana-time-zone-0.1.60",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/iana-time-zone-haiku/iana-time-zone-haiku-0.1.2.crate",
+ "sha256": "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f",
+ "dest": "cargo/vendor/iana-time-zone-haiku-0.1.2"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f\", \"files\": {}}",
+ "dest": "cargo/vendor/iana-time-zone-haiku-0.1.2",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/indexmap/indexmap-2.2.6.crate",
+ "sha256": "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26",
+ "dest": "cargo/vendor/indexmap-2.2.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26\", \"files\": {}}",
+ "dest": "cargo/vendor/indexmap-2.2.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/itertools/itertools-0.13.0.crate",
+ "sha256": "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186",
+ "dest": "cargo/vendor/itertools-0.13.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186\", \"files\": {}}",
+ "dest": "cargo/vendor/itertools-0.13.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/js-sys/js-sys-0.3.69.crate",
+ "sha256": "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d",
+ "dest": "cargo/vendor/js-sys-0.3.69"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d\", \"files\": {}}",
+ "dest": "cargo/vendor/js-sys-0.3.69",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/khronos-egl/khronos-egl-6.0.0.crate",
+ "sha256": "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76",
+ "dest": "cargo/vendor/khronos-egl-6.0.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76\", \"files\": {}}",
+ "dest": "cargo/vendor/khronos-egl-6.0.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/libc/libc-0.2.155.crate",
+ "sha256": "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c",
+ "dest": "cargo/vendor/libc-0.2.155"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c\", \"files\": {}}",
+ "dest": "cargo/vendor/libc-0.2.155",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/log/log-0.4.22.crate",
+ "sha256": "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24",
+ "dest": "cargo/vendor/log-0.4.22"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24\", \"files\": {}}",
+ "dest": "cargo/vendor/log-0.4.22",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/memchr/memchr-2.7.4.crate",
+ "sha256": "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3",
+ "dest": "cargo/vendor/memchr-2.7.4"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3\", \"files\": {}}",
+ "dest": "cargo/vendor/memchr-2.7.4",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/memoffset/memoffset-0.9.1.crate",
+ "sha256": "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a",
+ "dest": "cargo/vendor/memoffset-0.9.1"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a\", \"files\": {}}",
+ "dest": "cargo/vendor/memoffset-0.9.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/muldiv/muldiv-1.0.1.crate",
+ "sha256": "956787520e75e9bd233246045d19f42fb73242759cc57fba9611d940ae96d4b0",
+ "dest": "cargo/vendor/muldiv-1.0.1"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"956787520e75e9bd233246045d19f42fb73242759cc57fba9611d940ae96d4b0\", \"files\": {}}",
+ "dest": "cargo/vendor/muldiv-1.0.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/num-integer/num-integer-0.1.46.crate",
+ "sha256": "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f",
+ "dest": "cargo/vendor/num-integer-0.1.46"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f\", \"files\": {}}",
+ "dest": "cargo/vendor/num-integer-0.1.46",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/num-rational/num-rational-0.4.2.crate",
+ "sha256": "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824",
+ "dest": "cargo/vendor/num-rational-0.4.2"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824\", \"files\": {}}",
+ "dest": "cargo/vendor/num-rational-0.4.2",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/num-traits/num-traits-0.2.19.crate",
+ "sha256": "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841",
+ "dest": "cargo/vendor/num-traits-0.2.19"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841\", \"files\": {}}",
+ "dest": "cargo/vendor/num-traits-0.2.19",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/once_cell/once_cell-1.19.0.crate",
+ "sha256": "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92",
+ "dest": "cargo/vendor/once_cell-1.19.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92\", \"files\": {}}",
+ "dest": "cargo/vendor/once_cell-1.19.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/option-operations/option-operations-0.5.0.crate",
+ "sha256": "7c26d27bb1aeab65138e4bf7666045169d1717febcc9ff870166be8348b223d0",
+ "dest": "cargo/vendor/option-operations-0.5.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"7c26d27bb1aeab65138e4bf7666045169d1717febcc9ff870166be8348b223d0\", \"files\": {}}",
+ "dest": "cargo/vendor/option-operations-0.5.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/pango/pango-0.20.0.crate",
+ "sha256": "54768854025df6903061d0084fd9702a253ddfd60db7d9b751d43b76689a7f0a",
+ "dest": "cargo/vendor/pango-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"54768854025df6903061d0084fd9702a253ddfd60db7d9b751d43b76689a7f0a\", \"files\": {}}",
+ "dest": "cargo/vendor/pango-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/pango-sys/pango-sys-0.20.0.crate",
+ "sha256": "b07cc57d10cee4ec661f718a6902cee18c2f4cfae08e87e5a390525946913390",
+ "dest": "cargo/vendor/pango-sys-0.20.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"b07cc57d10cee4ec661f718a6902cee18c2f4cfae08e87e5a390525946913390\", \"files\": {}}",
+ "dest": "cargo/vendor/pango-sys-0.20.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/parking/parking-2.2.0.crate",
+ "sha256": "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae",
+ "dest": "cargo/vendor/parking-2.2.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae\", \"files\": {}}",
+ "dest": "cargo/vendor/parking-2.2.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/paste/paste-1.0.15.crate",
+ "sha256": "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a",
+ "dest": "cargo/vendor/paste-1.0.15"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a\", \"files\": {}}",
+ "dest": "cargo/vendor/paste-1.0.15",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/pin-project-lite/pin-project-lite-0.2.14.crate",
+ "sha256": "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02",
+ "dest": "cargo/vendor/pin-project-lite-0.2.14"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02\", \"files\": {}}",
+ "dest": "cargo/vendor/pin-project-lite-0.2.14",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/pin-utils/pin-utils-0.1.0.crate",
+ "sha256": "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184",
+ "dest": "cargo/vendor/pin-utils-0.1.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184\", \"files\": {}}",
+ "dest": "cargo/vendor/pin-utils-0.1.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/pkg-config/pkg-config-0.3.30.crate",
+ "sha256": "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec",
+ "dest": "cargo/vendor/pkg-config-0.3.30"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec\", \"files\": {}}",
+ "dest": "cargo/vendor/pkg-config-0.3.30",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/proc-macro-crate/proc-macro-crate-3.1.0.crate",
+ "sha256": "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284",
+ "dest": "cargo/vendor/proc-macro-crate-3.1.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284\", \"files\": {}}",
+ "dest": "cargo/vendor/proc-macro-crate-3.1.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/proc-macro2/proc-macro2-1.0.86.crate",
+ "sha256": "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77",
+ "dest": "cargo/vendor/proc-macro2-1.0.86"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77\", \"files\": {}}",
+ "dest": "cargo/vendor/proc-macro2-1.0.86",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/quote/quote-1.0.36.crate",
+ "sha256": "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7",
+ "dest": "cargo/vendor/quote-1.0.36"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7\", \"files\": {}}",
+ "dest": "cargo/vendor/quote-1.0.36",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/rustc_version/rustc_version-0.4.0.crate",
+ "sha256": "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366",
+ "dest": "cargo/vendor/rustc_version-0.4.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366\", \"files\": {}}",
+ "dest": "cargo/vendor/rustc_version-0.4.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/semver/semver-1.0.23.crate",
+ "sha256": "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b",
+ "dest": "cargo/vendor/semver-1.0.23"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b\", \"files\": {}}",
+ "dest": "cargo/vendor/semver-1.0.23",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/serde/serde-1.0.204.crate",
+ "sha256": "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12",
+ "dest": "cargo/vendor/serde-1.0.204"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12\", \"files\": {}}",
+ "dest": "cargo/vendor/serde-1.0.204",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/serde_derive/serde_derive-1.0.204.crate",
+ "sha256": "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222",
+ "dest": "cargo/vendor/serde_derive-1.0.204"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222\", \"files\": {}}",
+ "dest": "cargo/vendor/serde_derive-1.0.204",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/serde_spanned/serde_spanned-0.6.6.crate",
+ "sha256": "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0",
+ "dest": "cargo/vendor/serde_spanned-0.6.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0\", \"files\": {}}",
+ "dest": "cargo/vendor/serde_spanned-0.6.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/slab/slab-0.4.9.crate",
+ "sha256": "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67",
+ "dest": "cargo/vendor/slab-0.4.9"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67\", \"files\": {}}",
+ "dest": "cargo/vendor/slab-0.4.9",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/smallvec/smallvec-1.13.2.crate",
+ "sha256": "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67",
+ "dest": "cargo/vendor/smallvec-1.13.2"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67\", \"files\": {}}",
+ "dest": "cargo/vendor/smallvec-1.13.2",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/syn/syn-2.0.70.crate",
+ "sha256": "2f0209b68b3613b093e0ec905354eccaedcfe83b8cb37cbdeae64026c3064c16",
+ "dest": "cargo/vendor/syn-2.0.70"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"2f0209b68b3613b093e0ec905354eccaedcfe83b8cb37cbdeae64026c3064c16\", \"files\": {}}",
+ "dest": "cargo/vendor/syn-2.0.70",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/system-deps/system-deps-7.0.1.crate",
+ "sha256": "6c81f13d9a334a6c242465140bd262fae382b752ff2011c4f7419919a9c97922",
+ "dest": "cargo/vendor/system-deps-7.0.1"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"6c81f13d9a334a6c242465140bd262fae382b752ff2011c4f7419919a9c97922\", \"files\": {}}",
+ "dest": "cargo/vendor/system-deps-7.0.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/target-lexicon/target-lexicon-0.12.15.crate",
+ "sha256": "4873307b7c257eddcb50c9bedf158eb669578359fb28428bef438fec8e6ba7c2",
+ "dest": "cargo/vendor/target-lexicon-0.12.15"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"4873307b7c257eddcb50c9bedf158eb669578359fb28428bef438fec8e6ba7c2\", \"files\": {}}",
+ "dest": "cargo/vendor/target-lexicon-0.12.15",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/thiserror/thiserror-1.0.61.crate",
+ "sha256": "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709",
+ "dest": "cargo/vendor/thiserror-1.0.61"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709\", \"files\": {}}",
+ "dest": "cargo/vendor/thiserror-1.0.61",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/thiserror-impl/thiserror-impl-1.0.61.crate",
+ "sha256": "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533",
+ "dest": "cargo/vendor/thiserror-impl-1.0.61"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533\", \"files\": {}}",
+ "dest": "cargo/vendor/thiserror-impl-1.0.61",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/toml/toml-0.8.14.crate",
+ "sha256": "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335",
+ "dest": "cargo/vendor/toml-0.8.14"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335\", \"files\": {}}",
+ "dest": "cargo/vendor/toml-0.8.14",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/toml_datetime/toml_datetime-0.6.6.crate",
+ "sha256": "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf",
+ "dest": "cargo/vendor/toml_datetime-0.6.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf\", \"files\": {}}",
+ "dest": "cargo/vendor/toml_datetime-0.6.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/toml_edit/toml_edit-0.21.1.crate",
+ "sha256": "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1",
+ "dest": "cargo/vendor/toml_edit-0.21.1"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1\", \"files\": {}}",
+ "dest": "cargo/vendor/toml_edit-0.21.1",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/toml_edit/toml_edit-0.22.15.crate",
+ "sha256": "d59a3a72298453f564e2b111fa896f8d07fabb36f51f06d7e875fc5e0b5a3ef1",
+ "dest": "cargo/vendor/toml_edit-0.22.15"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"d59a3a72298453f564e2b111fa896f8d07fabb36f51f06d7e875fc5e0b5a3ef1\", \"files\": {}}",
+ "dest": "cargo/vendor/toml_edit-0.22.15",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/unicode-ident/unicode-ident-1.0.12.crate",
+ "sha256": "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b",
+ "dest": "cargo/vendor/unicode-ident-1.0.12"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b\", \"files\": {}}",
+ "dest": "cargo/vendor/unicode-ident-1.0.12",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/version-compare/version-compare-0.2.0.crate",
+ "sha256": "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b",
+ "dest": "cargo/vendor/version-compare-0.2.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b\", \"files\": {}}",
+ "dest": "cargo/vendor/version-compare-0.2.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/wasm-bindgen/wasm-bindgen-0.2.92.crate",
+ "sha256": "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8",
+ "dest": "cargo/vendor/wasm-bindgen-0.2.92"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8\", \"files\": {}}",
+ "dest": "cargo/vendor/wasm-bindgen-0.2.92",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/wasm-bindgen-backend/wasm-bindgen-backend-0.2.92.crate",
+ "sha256": "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da",
+ "dest": "cargo/vendor/wasm-bindgen-backend-0.2.92"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da\", \"files\": {}}",
+ "dest": "cargo/vendor/wasm-bindgen-backend-0.2.92",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/wasm-bindgen-macro/wasm-bindgen-macro-0.2.92.crate",
+ "sha256": "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726",
+ "dest": "cargo/vendor/wasm-bindgen-macro-0.2.92"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726\", \"files\": {}}",
+ "dest": "cargo/vendor/wasm-bindgen-macro-0.2.92",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/wasm-bindgen-macro-support/wasm-bindgen-macro-support-0.2.92.crate",
+ "sha256": "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7",
+ "dest": "cargo/vendor/wasm-bindgen-macro-support-0.2.92"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7\", \"files\": {}}",
+ "dest": "cargo/vendor/wasm-bindgen-macro-support-0.2.92",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/wasm-bindgen-shared/wasm-bindgen-shared-0.2.92.crate",
+ "sha256": "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96",
+ "dest": "cargo/vendor/wasm-bindgen-shared-0.2.92"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96\", \"files\": {}}",
+ "dest": "cargo/vendor/wasm-bindgen-shared-0.2.92",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/windows-core/windows-core-0.52.0.crate",
+ "sha256": "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9",
+ "dest": "cargo/vendor/windows-core-0.52.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9\", \"files\": {}}",
+ "dest": "cargo/vendor/windows-core-0.52.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/windows-sys/windows-sys-0.52.0.crate",
+ "sha256": "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d",
+ "dest": "cargo/vendor/windows-sys-0.52.0"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d\", \"files\": {}}",
+ "dest": "cargo/vendor/windows-sys-0.52.0",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/windows-targets/windows-targets-0.52.6.crate",
+ "sha256": "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973",
+ "dest": "cargo/vendor/windows-targets-0.52.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973\", \"files\": {}}",
+ "dest": "cargo/vendor/windows-targets-0.52.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/windows_aarch64_gnullvm/windows_aarch64_gnullvm-0.52.6.crate",
+ "sha256": "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3",
+ "dest": "cargo/vendor/windows_aarch64_gnullvm-0.52.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3\", \"files\": {}}",
+ "dest": "cargo/vendor/windows_aarch64_gnullvm-0.52.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/windows_aarch64_msvc/windows_aarch64_msvc-0.52.6.crate",
+ "sha256": "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469",
+ "dest": "cargo/vendor/windows_aarch64_msvc-0.52.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469\", \"files\": {}}",
+ "dest": "cargo/vendor/windows_aarch64_msvc-0.52.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/windows_i686_gnu/windows_i686_gnu-0.52.6.crate",
+ "sha256": "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b",
+ "dest": "cargo/vendor/windows_i686_gnu-0.52.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b\", \"files\": {}}",
+ "dest": "cargo/vendor/windows_i686_gnu-0.52.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/windows_i686_gnullvm/windows_i686_gnullvm-0.52.6.crate",
+ "sha256": "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66",
+ "dest": "cargo/vendor/windows_i686_gnullvm-0.52.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66\", \"files\": {}}",
+ "dest": "cargo/vendor/windows_i686_gnullvm-0.52.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/windows_i686_msvc/windows_i686_msvc-0.52.6.crate",
+ "sha256": "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66",
+ "dest": "cargo/vendor/windows_i686_msvc-0.52.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66\", \"files\": {}}",
+ "dest": "cargo/vendor/windows_i686_msvc-0.52.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/windows_x86_64_gnu/windows_x86_64_gnu-0.52.6.crate",
+ "sha256": "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78",
+ "dest": "cargo/vendor/windows_x86_64_gnu-0.52.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78\", \"files\": {}}",
+ "dest": "cargo/vendor/windows_x86_64_gnu-0.52.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/windows_x86_64_gnullvm/windows_x86_64_gnullvm-0.52.6.crate",
+ "sha256": "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d",
+ "dest": "cargo/vendor/windows_x86_64_gnullvm-0.52.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d\", \"files\": {}}",
+ "dest": "cargo/vendor/windows_x86_64_gnullvm-0.52.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/windows_x86_64_msvc/windows_x86_64_msvc-0.52.6.crate",
+ "sha256": "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec",
+ "dest": "cargo/vendor/windows_x86_64_msvc-0.52.6"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec\", \"files\": {}}",
+ "dest": "cargo/vendor/windows_x86_64_msvc-0.52.6",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/winnow/winnow-0.5.40.crate",
+ "sha256": "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876",
+ "dest": "cargo/vendor/winnow-0.5.40"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876\", \"files\": {}}",
+ "dest": "cargo/vendor/winnow-0.5.40",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "archive",
+ "archive-type": "tar-gzip",
+ "url": "https://static.crates.io/crates/winnow/winnow-0.6.13.crate",
+ "sha256": "59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1",
+ "dest": "cargo/vendor/winnow-0.6.13"
+ },
+ {
+ "type": "inline",
+ "contents": "{\"package\": \"59b5e5f6c299a3c7890b876a2a587f3115162487e704907d9b6cd29473052ba1\", \"files\": {}}",
+ "dest": "cargo/vendor/winnow-0.6.13",
+ "dest-filename": ".cargo-checksum.json"
+ },
+ {
+ "type": "inline",
+ "contents": "[source.vendored-sources]\ndirectory = \"cargo/vendor\"\n\n[source.crates-io]\nreplace-with = \"vendored-sources\"\n",
+ "dest": "cargo",
+ "dest-filename": "config"
+ }
+]
diff --git a/build-aux/flatpak/org.gnome.Contacts.Devel.json b/build-aux/flatpak/org.gnome.Contacts.Devel.json
index 9ee27804f919aa6ff99d084b5f18cd5273cfb935..d97445f381f91372d9c4be605b545f4c68e9cb44 100644
--- a/build-aux/flatpak/org.gnome.Contacts.Devel.json
+++ b/build-aux/flatpak/org.gnome.Contacts.Devel.json
@@ -4,7 +4,8 @@
"runtime-version": "master",
"sdk": "org.gnome.Sdk",
"sdk-extensions": [
- "org.freedesktop.Sdk.Extension.vala-nightly"
+ "org.freedesktop.Sdk.Extension.vala-nightly",
+ "org.freedesktop.Sdk.Extension.rust-stable"
],
"command": "gnome-contacts",
"tags" : [
@@ -13,7 +14,8 @@
],
"build-options" : {
"prepend-path" : "/usr/lib/sdk/vala-nightly/bin/",
- "prepend-ld-library-path" : "/usr/lib/sdk/vala-nightly/lib"
+ "prepend-ld-library-path" : "/usr/lib/sdk/vala-nightly/lib",
+ "append-path": "/usr/lib/sdk/rust-stable/bin"
},
"finish-args": [
/* X11 + XShm access */
@@ -213,6 +215,27 @@
}
]
},
+ {
+ "name": "gst-plugin-gtk4",
+ "buildsystem": "simple",
+ "sources": [
+ {
+ "type": "archive",
+ "url": "https://crates.io/api/v1/crates/gst-plugin-gtk4/0.13.0/download",
+ "dest-filename": "gst-plugin-gtk4-0.13.0.tar.gz",
+ "sha256": "69b98aeb531b6cf9c3a6eb36742cedc0168054e2f040b76ddc61260c10dec589"
+ },
+ "gst-plugin-gtk4-sources.json"
+ ],
+ "build-commands": [
+ "cargo cinstall --offline --release --features=wayland,x11glx,x11egl,gtk_v4_14 --library-type=cdylib --prefix=/app --libdir=/app/lib"
+ ],
+ "build-options": {
+ "env": {
+ "CARGO_HOME": "/run/build/gst-plugin-gtk4/cargo"
+ }
+ }
+ },
{
"name": "gnome-contacts",
"buildsystem": "meson",
diff --git a/data/ui/contacts-avatar-selector.ui b/data/ui/contacts-avatar-selector.ui
index b8d97f14ad426f00feaa5fe6171b6b92c2f084ec..685e63eace7c8b7b9b1c49b429b941e5c39829d5 100644
--- a/data/ui/contacts-avatar-selector.ui
+++ b/data/ui/contacts-avatar-selector.ui
@@ -84,21 +84,26 @@ SPDX-License-Identifier: GPL-2.0-or-later
+
+
+
+ True
+ True
+
+
diff --git a/meson.build b/meson.build
index 3acbf2acb9e4bf5dab6167c49295d306fcf54cbe..240430cd9aeac98451cc76e018c4e048dc9fbd3b 100644
--- a/meson.build
+++ b/meson.build
@@ -52,12 +52,10 @@ libadwaita_dep = dependency('libadwaita-1', version: '>= 1.4.alpha')
# E-D-S
libebook = dependency('libebook-1.2', version: '>=' + min_eds_version)
libedataserver = dependency('libedataserver-1.2', version: '>=' + min_eds_version)
-# libedataserverui = dependency('libedataserverui-1.2', version: '>=' + min_eds_version)
-# Portals (needed for camera access)
+# Camera
libportal_dep = dependency('libportal-gtk4', version: '>= 0.6')
-# Cheese
-# cheese_dep = dependency('cheese', required: get_option('cheese'))
-# cheese_gtk_dep = dependency('cheese-gtk', version: '>= 3.3.91', required: get_option('cheese'))
+gstreamer_dep = dependency('gstreamer-1.0')
+# QR Code
libqrencode_dep = dependency('libqrencode', version: '>=4.1.1')
# gnome-online-accounts
if get_option('goa')
diff --git a/src/cc-crop-area.c b/src/cc-crop-area.c
index 2b7a3210d2e6ac2457fad0766bfdcbfc813c0d30..cd7530356e3bf2b13311f6c44ba35553d4289111 100644
--- a/src/cc-crop-area.c
+++ b/src/cc-crop-area.c
@@ -581,17 +581,18 @@ cc_crop_area_new (void)
}
/**
- * cc_crop_area_create_pixbuf:
+ * cc_crop_area_create_texture:
* @area: A crop area
*
* Renders the area's paintable, with the cropping applied by the user, into a
- * GdkPixbuf.
+ * GdkTexture.
*
* Returns: (transfer full): The cropped picture
*/
-GdkPixbuf *
-cc_crop_area_create_pixbuf (CcCropArea *area)
+GdkTexture *
+cc_crop_area_create_texture (CcCropArea *area)
{
+ g_autoptr (GdkPaintable) paintable = NULL;
g_autoptr (GtkSnapshot) snapshot = NULL;
g_autoptr (GskRenderNode) node = NULL;
g_autoptr (GskRenderer) renderer = NULL;
@@ -602,9 +603,10 @@ cc_crop_area_create_pixbuf (CcCropArea *area)
g_return_val_if_fail (CC_IS_CROP_AREA (area), NULL);
snapshot = gtk_snapshot_new ();
- gdk_paintable_snapshot (area->paintable, snapshot,
- gdk_paintable_get_intrinsic_width (area->paintable),
- gdk_paintable_get_intrinsic_height (area->paintable));
+ paintable = gdk_paintable_get_current_image (area->paintable);
+ gdk_paintable_snapshot (paintable, snapshot,
+ gdk_paintable_get_intrinsic_width (paintable),
+ gdk_paintable_get_intrinsic_height (paintable));
node = gtk_snapshot_free_to_node (g_steal_pointer (&snapshot));
renderer = gsk_gl_renderer_new ();
@@ -617,7 +619,7 @@ cc_crop_area_create_pixbuf (CcCropArea *area)
texture = gsk_renderer_render_texture (renderer, node, &viewport);
gsk_renderer_unrealize (renderer);
- return gdk_pixbuf_get_from_texture (texture);
+ return g_steal_pointer (&texture);
}
/**
diff --git a/src/cc-crop-area.h b/src/cc-crop-area.h
index eead74a7dd94ee581d05b5f92558ca83a8afda28..a859838fac46721d87d8b66e3e81fde8b4597f0a 100644
--- a/src/cc-crop-area.h
+++ b/src/cc-crop-area.h
@@ -22,7 +22,7 @@ void cc_crop_area_set_paintable (CcCropArea *area,
void cc_crop_area_set_min_size (CcCropArea *area,
int width,
int height);
-GdkPixbuf * cc_crop_area_create_pixbuf (CcCropArea *area);
+GdkTexture * cc_crop_area_create_texture (CcCropArea *area);
G_END_DECLS
diff --git a/src/contacts-avatar-selector.vala b/src/contacts-avatar-selector.vala
index d31658f7c23c67220af8db80cec154b5d9fab00d..53dd35ae20ed8fc4bffce8a2eb0e7b80ab4a9066 100644
--- a/src/contacts-avatar-selector.vala
+++ b/src/contacts-avatar-selector.vala
@@ -11,41 +11,34 @@ const int ICONS_SIZE = 64;
private class Contacts.Thumbnail : Gtk.FlowBoxChild {
- public Gdk.Pixbuf? source_pixbuf { get; construct set; }
+ public Gdk.Texture texture { get; construct set; }
- private Thumbnail (Gdk.Pixbuf? source_pixbuf = null) {
- Object (visible: true,
- halign: Gtk.Align.CENTER,
- source_pixbuf: source_pixbuf);
+ construct {
+ this.halign = Gtk.Align.CENTER;
- this.add_css_class ("circular");
+ add_css_class ("circular");
var avatar = new Avatar (ICONS_SIZE);
- avatar.set_pixbuf (source_pixbuf);
+ avatar.set_paintable (this.texture);
this.set_child (avatar);
}
- public Thumbnail.for_chunk (AvatarChunk chunk)
+ private Thumbnail (Gdk.Texture texture) {
+ Object (texture: texture);
+ }
+
+ public static async Thumbnail? for_chunk (AvatarChunk chunk) throws Error
requires (chunk.avatar != null) {
- Gdk.Pixbuf? pixbuf = null;
- try {
- var stream = chunk.avatar.load (MAIN_SIZE, null);
- pixbuf = new Gdk.Pixbuf.from_stream (stream);
- } catch (Error e) {
- debug ("Couldn't create thumbnail for chunk: %s", e.message);
- }
- this (pixbuf);
+ var stream = yield chunk.avatar.load_async (MAIN_SIZE);
+ var pixbuf = yield new Gdk.Pixbuf.from_stream_async (stream);
+ return new Thumbnail (Gdk.Texture.for_pixbuf (pixbuf));
}
- public Thumbnail.for_filename (string filename) {
- Gdk.Pixbuf? pixbuf = null;
- try {
- pixbuf = new Gdk.Pixbuf.from_file (filename);
- } catch (Error e) {
- debug ("Couldn't create frame for file '%s': %s", filename, e.message);
- }
- this (pixbuf);
+ public static async Thumbnail? for_file (File file) throws Error {
+ var stream = yield file.read_async ();
+ var pixbuf = yield new Gdk.Pixbuf.from_stream_async (stream);
+ return new Thumbnail (Gdk.Texture.for_pixbuf (pixbuf));
}
}
@@ -69,11 +62,7 @@ public class Contacts.AvatarSelector : Adw.Window {
private Xdp.Portal? portal = null;
- private Gdk.Pixbuf? _selected_avatar = null;
- public Gdk.Pixbuf? selected_avatar {
- owned get { return scale_pixbuf_for_avatar_use (this._selected_avatar); }
- private set { this._selected_avatar = value; }
- }
+ private Gdk.Texture? selected = null;
static construct {
install_action ("set-avatar", null, (Gtk.WidgetActionActivateFunc) on_set_avatar);
@@ -93,16 +82,16 @@ public class Contacts.AvatarSelector : Adw.Window {
var selected = thumbnail_grid.get_selected_children ();
if (selected != null) {
unowned var thumbnail = (Thumbnail) selected.data;
- this.selected_avatar = thumbnail.source_pixbuf;
+ this.selected = thumbnail.texture;
} else {
- this.selected_avatar = null;
+ this.selected = null;
}
}
private void on_thumbnail_activated (Gtk.FlowBox thumbnail_grid,
Gtk.FlowBoxChild child) {
unowned var thumbnail = (Thumbnail) child;
- this.selected_avatar = thumbnail.source_pixbuf;
+ this.selected = thumbnail.texture;
activate_action_variant ("set-avatar", null);
}
@@ -117,51 +106,23 @@ public class Contacts.AvatarSelector : Adw.Window {
}
}
- private Gdk.Pixbuf? scale_pixbuf_for_avatar_use (Gdk.Pixbuf? pixbuf) {
- if (pixbuf == null)
- return null;
-
- int w = pixbuf.get_width ();
- int h = pixbuf.get_height ();
-
- if (w <= MAIN_SIZE && h <= MAIN_SIZE)
- return pixbuf;
-
- if (w > h) {
- h = (int) Math.round (h * (float) MAIN_SIZE / w);
- w = MAIN_SIZE;
- } else {
- w = (int) Math.round (w * (float) MAIN_SIZE / h);
- h = MAIN_SIZE;
- }
-
- return pixbuf.scale_simple (w, h, Gdk.InterpType.HYPER);
- }
-
/** Sets the selected avatar on the contact (it does _not_ save it) */
private void on_set_avatar (string action_name, Variant? param) {
- debug ("Setting avatar");
- try {
- uint8[] buffer;
- this.selected_avatar.save_to_buffer (out buffer, "png", null);
- var icon = new BytesIcon (new Bytes (buffer));
-
- // Save into the most relevant avatar
- var avatar_chunk = this.contact.get_most_relevant_chunk ("avatar", true);
- if (avatar_chunk == null)
- avatar_chunk = this.contact.create_chunk ("avatar", null);
- ((AvatarChunk) avatar_chunk).avatar = icon;
- destroy ();
- } catch (Error e) {
- destroy ();
-
- warning ("Failed to set avatar: %s", e.message);
- var dialog = new Adw.MessageDialog (this.transient_for,
- null,
- _("Failed to set avatar"));
- dialog.add_response ("close", _("_Close"));
- dialog.show ();
+ if (this.selected == null) {
+ warning ("Trying to save avatar, but none selected");
+ return;
}
+
+ debug ("Saving avatar");
+ var bytes = this.selected.save_to_png_bytes ();
+ var icon = new BytesIcon (bytes);
+
+ // Save into the most relevant avatar
+ var avatar_chunk = this.contact.get_most_relevant_chunk ("avatar", true);
+ if (avatar_chunk == null)
+ avatar_chunk = this.contact.create_chunk ("avatar", null);
+ ((AvatarChunk) avatar_chunk).avatar = icon;
+ destroy ();
}
private void update_thumbnail_grid () {
@@ -169,31 +130,48 @@ public class Contacts.AvatarSelector : Adw.Window {
var chunks = new Gtk.FilterListModel (this.contact, (owned) filter);
for (uint i = 0; i < chunks.get_n_items (); i++) {
var chunk = (AvatarChunk) chunks.get_item (i);
- var thumbnail = new Thumbnail.for_chunk (chunk);
- if (thumbnail.source_pixbuf != null) {
- this.thumbnail_grid.insert (thumbnail, -1);
- }
+ Thumbnail.for_chunk.begin (chunk, (obj, res) => {
+ try {
+ var thumbnail = Thumbnail.for_chunk.end (res);
+ this.thumbnail_grid.insert (thumbnail, -1);
+ } catch (Error e) {
+ debug ("Couldn't create thumbnail for chunk: %s", e.message);
+ }
+ });
}
var stock_files = Utils.get_stock_avatars ();
- foreach (var file_name in stock_files) {
- var thumbnail = new Thumbnail.for_filename (file_name);
- if (thumbnail.source_pixbuf != null) {
- this.thumbnail_grid.insert (thumbnail, -1);
- }
+ foreach (unowned var filename in stock_files) {
+ var file = File.new_for_path (filename);
+ Thumbnail.for_file.begin (file, (obj, res) => {
+ try {
+ var thumbnail = Thumbnail.for_file.end (res);
+ this.thumbnail_grid.insert (thumbnail, -1);
+ } catch (Error e) {
+ debug ("Couldn't create thumbnail for file '%s': %s", filename, e.message);
+ }
+ });
}
}
[GtkCallback]
private void on_camera_button_clicked (Gtk.Button button) {
- // XXX implement
- // var dialog = new CropDialog.for_portal (this.portal,
- // this.get_root () as Gtk.Window);
- // dialog.show ();
+ var dialog = new CropDialog.for_portal (this.portal,
+ this.get_root () as Gtk.Window);
+ dialog.cropped.connect ((dialog, texture) => {
+ this.selected = texture;
+ activate_action_variant ("set-avatar", null);
+ dialog.destroy ();
+ });
+ dialog.present ();
}
[GtkCallback]
private void on_file_clicked (Gtk.Button button) {
+ choose_file.begin ((obj, res) => { choose_file.end (res); });
+ }
+
+ private async void choose_file () {
var file_dialog = new Gtk.FileDialog ();
file_dialog.title = _("Browse for more pictures");
file_dialog.accept_label = _("_Open");
@@ -223,47 +201,40 @@ public class Contacts.AvatarSelector : Adw.Window {
if (pictures_folder != null)
file_dialog.set_initial_folder (File.new_for_path (pictures_folder));
- file_dialog.open.begin (this.get_root () as Gtk.Window, null, (obj, response) => {
- try {
- var file = file_dialog.open.end (response);
-
- try {
- var in_stream = file.read ();
- var pixbuf = new Gdk.Pixbuf.from_stream (in_stream, null);
- in_stream.close ();
- if (pixbuf.get_width () > MAIN_SIZE || pixbuf.get_height () > MAIN_SIZE) {
- var dialog = new CropDialog.for_pixbuf (pixbuf,
- get_root () as Gtk.Window);
- dialog.cropped.connect ((pixbuf) => {
- this.selected_avatar = pixbuf;
- activate_action_variant ("set-avatar", null);
- });
- dialog.present ();
- } else {
- this.selected_avatar = pixbuf;
- activate_action_variant ("set-avatar", null);
- }
- } catch (GLib.Error e) {
- warning ("Failed to set avatar: %s", e.message);
- var dialog = new Adw.MessageDialog (get_root () as Gtk.Window,
- null,
- _("Failed to set avatar."));
- dialog.add_response ("close", _("_Close"));
- dialog.default_response = "close";
- dialog.show();
- }
- } catch (Error error) {
- switch (error.code) {
- case Gtk.DialogError.CANCELLED:
- case Gtk.DialogError.DISMISSED:
- debug ("Dismissed opening file: %s", error.message);
- break;
- case Gtk.DialogError.FAILED:
- default:
- warning ("Could not open file: %s", error.message);
- break;
- }
+ var parent_window = this.get_root () as Gtk.Window;
+ try {
+ var file = yield file_dialog.open (parent_window, null);
+ var in_stream = yield file.read_async ();
+ var pixbuf = yield new Gdk.Pixbuf.from_stream_async (in_stream, null);
+ var texture = Gdk.Texture.for_pixbuf (pixbuf);
+ in_stream.close ();
+
+ var dialog = new CropDialog.for_paintable (texture, parent_window);
+ dialog.cropped.connect ((dialog, texture) => {
+ this.selected = texture;
+ activate_action_variant ("set-avatar", null);
+ dialog.destroy ();
+ });
+ dialog.present ();
+ } catch (Gtk.DialogError error) {
+ switch (error.code) {
+ case Gtk.DialogError.CANCELLED:
+ case Gtk.DialogError.DISMISSED:
+ debug ("Dismissed opening file: %s", error.message);
+ break;
+ case Gtk.DialogError.FAILED:
+ default:
+ warning ("Could not open file: %s", error.message);
+ break;
}
- });
+ } catch (GLib.Error e) {
+ warning ("Failed to set avatar: %s", e.message);
+ var dialog = new Adw.MessageDialog (get_root () as Gtk.Window,
+ null,
+ _("Failed to set avatar."));
+ dialog.add_response ("close", _("_Close"));
+ dialog.default_response = "close";
+ dialog.show();
+ }
}
}
diff --git a/src/contacts-avatar.vala b/src/contacts-avatar.vala
index 68a1fec74bb6645c84b819c48711779c5221dd82..6cde4af06298814b749033f4d5f2c027ef3d18ec 100644
--- a/src/contacts-avatar.vala
+++ b/src/contacts-avatar.vala
@@ -106,7 +106,7 @@ public class Contacts.Avatar : Adw.Bin {
private async void load_avatar (LoadableIcon? icon) {
if (icon == null) {
- set_pixbuf (null);
+ set_paintable (null);
return;
}
@@ -116,18 +116,18 @@ public class Contacts.Avatar : Adw.Bin {
this.avatar_size,
this.avatar_size,
true);
- this.set_pixbuf (pixbuf);
+ set_paintable (Gdk.Texture.for_pixbuf (pixbuf));
} catch (Error e) {
warning ("Couldn't load avatar of '%s': %s", this.individual.display_name, e.message);
}
}
/**
- * Manually set the avatar to the given pixbuf, even if the contact has an avatar.
+ * Manually set the avatar to the given paintable,
+ * even if the contact has an avatar.
*/
- public void set_pixbuf (Gdk.Pixbuf? a_pixbuf) {
- var img = (a_pixbuf != null)? Gdk.Texture.for_pixbuf (a_pixbuf) : null;
- ((Adw.Avatar) this.child).set_custom_image (img);
+ public void set_paintable (Gdk.Paintable? paintable) {
+ ((Adw.Avatar) this.child).set_custom_image (paintable);
}
/* Find a nice name to generate the label and color for the fallback avatar
diff --git a/src/contacts-crop-dialog.vala b/src/contacts-crop-dialog.vala
index 2cb5cd513780c7c6ef73df502fcd27a1002b879a..3351de744da391096b9fc933eb4ad468e7144c8c 100644
--- a/src/contacts-crop-dialog.vala
+++ b/src/contacts-crop-dialog.vala
@@ -8,33 +8,98 @@
public class Contacts.CropDialog : Adw.Window {
[GtkChild]
- private unowned Adw.ToolbarView toolbar_view;
+ private unowned Cc.CropArea crop_area;
- private Cc.CropArea crop_area;
-
- public signal void cropped (Gdk.Pixbuf pixbuf);
+ public signal void cropped (Gdk.Texture texture);
static construct {
+ typeof (Cc.CropArea).ensure ();
install_action ("crop", null, (Gtk.WidgetActionActivateFunc) on_crop);
}
construct {
- this.crop_area = new Cc.CropArea ();
- this.crop_area.vexpand = true;
- this.crop_area.hexpand = true;
this.crop_area.set_min_size (48, 48);
- this.toolbar_view.content = this.crop_area;
}
- public CropDialog.for_pixbuf (Gdk.Pixbuf pixbuf,
+ public CropDialog.for_paintable (Gdk.Paintable paintable,
+ Gtk.Window? parent = null) {
+ Object (transient_for: parent);
+
+ this.crop_area.set_paintable (paintable);
+ }
+
+ public CropDialog.for_portal (Xdp.Portal portal,
Gtk.Window? parent = null) {
Object (transient_for: parent);
- this.crop_area.set_paintable (Gdk.Texture.for_pixbuf (pixbuf));
+ do_camera.begin(portal, (obj, res) => {
+ do_camera.end (res);
+ });
+ }
+
+ private async void do_camera (Xdp.Portal portal) {
+ var parent = Xdp.parent_new_gtk (this);
+ try {
+ debug ("Requesting camera access");
+ yield portal.access_camera (parent, Xdp.CameraFlags.NONE, null);
+ debug ("Camera access success");
+ } catch (GLib.Error err) {
+ warning ("Couldn't access camera: %s", err.message);
+ return;
+ }
+
+ var pw_fd = portal.open_pipewire_remote_for_camera ();
+ debug ("Got Pipewire fd %d", pw_fd);
+
+ // Setup GStreamer pipeline
+ var pipeline = new Gst.Pipeline (null);
+
+ var source = Gst.ElementFactory.make ("pipewiresrc", null);
+ var queue = Gst.ElementFactory.make ("queue", null);
+ var glsinkbin = Gst.ElementFactory.make ("glsinkbin", null);
+ var paintable_sink = Gst.ElementFactory.make ("gtk4paintablesink", null);
+ if (source == null || queue == null || glsinkbin == null || paintable_sink == null) {
+ warning ("Your GStreamer installation is missing some required elements");
+ return;
+ }
+
+ pipeline.add_many (source, queue, glsinkbin);
+ source.link_many (queue, glsinkbin);
+
+ var paintable = GLib.Value (typeof (Gdk.Paintable));
+ paintable_sink.get_property ("paintable", ref paintable);
+ this.crop_area.set_paintable (paintable as Gdk.Paintable);
+ glsinkbin.set_property ("sink", paintable_sink);
+
+ source.set_property ("fd", pw_fd);
+
+ // Start
+ pipeline.set_state (Gst.State.PLAYING);
+
+ // Handle cleanup on window close
+ this.close_request.connect (() => {
+ pipeline.set_state (Gst.State.NULL);
+ return false;
+ });
+
+ // Watch the bus
+ var bus = pipeline.get_bus ();
+ bus.add_signal_watch ();
+ bus.message.connect ((bus, message) => {
+ if (message.type == Gst.MessageType.ERROR) {
+ GLib.Error err;
+ string debug;
+ message.parse_error (out err, out debug);
+ warning ("GStreamer error: %s. %s", err.message, debug);
+ } else if (message.type == Gst.MessageType.EOS) {
+ warning ("EOS");
+ }
+ });
}
private void on_crop (string action_name, Variant? param) {
- cropped (this.crop_area.create_pixbuf ());
- destroy ();
+ var texture = this.crop_area.create_texture ();
+ close ();
+ cropped (texture);
}
}
diff --git a/src/main.vala b/src/main.vala
index fbb7d055fc15745639e26a2b998c025605005147..39ac89f3b2a33aa80a9bb9d18f29a7934058784e 100644
--- a/src/main.vala
+++ b/src/main.vala
@@ -12,9 +12,9 @@ main (string[] args) {
Intl.bind_textdomain_codeset (Config.GETTEXT_PACKAGE, "UTF-8");
Intl.textdomain (Config.GETTEXT_PACKAGE);
-#if HAVE_CHEESE
- GtkCheese.init (ref args);
-#endif
+ GLib.Environment.set_application_name (_("Contacts"));
+
+ Gst.init (ref args);
var app = new App ();
app.run (args);
diff --git a/src/meson.build b/src/meson.build
index 286539838a2a210e853fdcc4d14830b11ca7f6d1..8beb9b44f6dc83b3b6c2b45894af0738efb52886 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -7,6 +7,8 @@ install_data('org.gnome.Contacts.gschema.xml',
install_dir: get_option('datadir') / 'glib-2.0' / 'schemas',
)
+# Validates gsettings file
+
# Common library
libcontacts_sources = files(
'contacts-chunk-filter.vala',
@@ -54,11 +56,11 @@ contacts_deps = [
gee,
gio_unix,
glib,
+ gstreamer_dep,
gtk4_dep,
libadwaita_dep,
libebook,
libedataserver,
- # libedataserverui,
libportal_dep,
math,
libqrencode_dep,
diff --git a/vapi/custom.vapi b/vapi/custom.vapi
index 9aee3db26cc7c76d3764c2fafd421a4c6a6cc727..658b07f0b252f996f6ac0fe029f5bf162bead43f 100644
--- a/vapi/custom.vapi
+++ b/vapi/custom.vapi
@@ -6,7 +6,7 @@ namespace Cc {
public void set_min_size (int width, int height);
public void set_paintable (Gdk.Paintable paintable);
public Gdk.Paintable get_paintable ();
- public Gdk.Pixbuf create_pixbuf ();
+ public Gdk.Texture create_texture ();
}
}