12 Commits
0.3.2 ... 0.3.3

Author SHA1 Message Date
Tom A. Wagner
85e249cb32 Release 0.3.3 2022-01-28 13:49:49 +01:00
Tom A. Wagner
c54aed2e14 Update dependencies 2022-01-28 13:49:49 +01:00
Tom A. Wagner
6da232debf meson: Fix incorrect output file name
This fixes a typo from 96c61e43 that caused the binary to be generated with the wrong name.
2022-01-28 13:48:46 +01:00
Tom A. Wagner
96c61e43d2 meson: Remove custom build scripts 2022-01-28 13:01:35 +01:00
Tom A. Wagner
872ef7890d readme: Credit gtk-rust-template 2022-01-28 12:11:32 +01:00
Tom A. Wagner
76ad8d11d7 Change application id to org.pipewire.Helvum 2022-01-28 10:14:21 +01:00
Tom A. Wagner
4075b66865 deps: Update gtk-rs to latest release 2022-01-17 12:00:00 +01:00
Tom A. Wagner
96182826e4 logging: Use glib as log backend instead of env_logger.
This makes log output use the same logger as gtk itself and as most other gtk applications
2022-01-11 12:15:14 +01:00
Mihai Fufezan
e1fbb0cf49 Use gtk4-update-icon-cache instead of gtk3 one 2021-12-18 19:50:39 +00:00
Alireza Haghshenas
3653f2bb11 Emphasized that the flatpak-builder command needs be run inside a local clone of the project 2021-12-10 04:34:49 +00:00
Tom A. Wagner
56523f1b30 docs: Add documentation for making a release 2021-12-01 19:56:17 +01:00
Tom A. Wagner
7818bed159 Add appstream metadata file 2021-12-01 19:56:17 +01:00
20 changed files with 373 additions and 324 deletions

View File

@@ -10,7 +10,7 @@ stages:
- extras - extras
variables: variables:
FDO_UPSTREAM_REPO: 'ryuukyu/helvum' FDO_UPSTREAM_REPO: 'pipewire/helvum'
# Version and tag for our current container # Version and tag for our current container
.fedora: .fedora:

318
Cargo.lock generated
View File

@@ -13,18 +13,18 @@ dependencies = [
[[package]] [[package]]
name = "ansi_term" name = "ansi_term"
version = "0.11.0" version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
dependencies = [ dependencies = [
"winapi", "winapi",
] ]
[[package]] [[package]]
name = "anyhow" name = "anyhow"
version = "1.0.44" version = "1.0.53"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0"
[[package]] [[package]]
name = "arrayvec" name = "arrayvec"
@@ -51,15 +51,15 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]] [[package]]
name = "bindgen" name = "bindgen"
version = "0.59.1" version = "0.59.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "453c49e5950bb0eb63bb3df640e31618846c89d5b7faa54040d76e98e0134375" checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cexpr", "cexpr",
"clang-sys", "clang-sys",
"clap", "clap",
"env_logger 0.8.4", "env_logger",
"lazy_static", "lazy_static",
"lazycell", "lazycell",
"log", "log",
@@ -80,9 +80,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]] [[package]]
name = "bitvec" name = "bitvec"
version = "0.19.5" version = "0.19.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8942c8d352ae1838c9dda0b0ca2ab657696ef2232a20147cf1b30ae1a9cb4321" checksum = "55f93d0ef3363c364d5976646a38f04cf67cfe1d4c8d160cdea02cab2c116b33"
dependencies = [ dependencies = [
"funty", "funty",
"radium", "radium",
@@ -92,9 +92,9 @@ dependencies = [
[[package]] [[package]]
name = "cairo-rs" name = "cairo-rs"
version = "0.14.7" version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9164355c892b026d6257e696dde5f3cb39beb3718297f0f161b562fe2ee3ab86" checksum = "b869e97a87170f96762f9f178eae8c461147e722ba21dd8814105bf5716bf14a"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cairo-sys-rs", "cairo-sys-rs",
@@ -105,28 +105,28 @@ dependencies = [
[[package]] [[package]]
name = "cairo-sys-rs" name = "cairo-sys-rs"
version = "0.14.0" version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7c9c3928781e8a017ece15eace05230f04b647457d170d2d9641c94a444ff80" checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
"system-deps 3.2.0", "system-deps 6.0.0",
] ]
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.0.70" version = "1.0.72"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee"
[[package]] [[package]]
name = "cexpr" name = "cexpr"
version = "0.5.0" version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db507a7679252d2276ed0dd8113c6875ec56d3089f9225b2b42c30cc1f8e5c89" checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
dependencies = [ dependencies = [
"nom", "nom 7.1.0",
] ]
[[package]] [[package]]
@@ -161,9 +161,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]] [[package]]
name = "clang-sys" name = "clang-sys"
version = "1.2.2" version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10612c0ec0e0a1ff0e97980647cb058a6e7aedb913d01d009c406b8b7d0b26ee" checksum = "fa66045b9cb23c2e9c1520732030608b02ee07e5cfaa5a521ec15ded7fa24c90"
dependencies = [ dependencies = [
"glob", "glob",
"libc", "libc",
@@ -172,9 +172,9 @@ dependencies = [
[[package]] [[package]]
name = "clap" name = "clap"
version = "2.33.3" version = "2.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
dependencies = [ dependencies = [
"ansi_term", "ansi_term",
"atty", "atty",
@@ -197,19 +197,6 @@ version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
[[package]]
name = "env_logger"
version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
dependencies = [
"atty",
"humantime",
"log",
"regex",
"termcolor",
]
[[package]] [[package]]
name = "env_logger" name = "env_logger"
version = "0.9.0" version = "0.9.0"
@@ -225,9 +212,9 @@ dependencies = [
[[package]] [[package]]
name = "errno" name = "errno"
version = "0.2.7" version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa68f2fb9cae9d37c9b2b3584aba698a2e97f72d7aef7b9f7aa71d8b54ce46fe" checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
dependencies = [ dependencies = [
"errno-dragonfly", "errno-dragonfly",
"libc", "libc",
@@ -262,24 +249,24 @@ checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7"
[[package]] [[package]]
name = "futures-channel" name = "futures-channel"
version = "0.3.17" version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" checksum = "ba3dda0b6588335f360afc675d0564c17a77a2bda81ca178a4b6081bd86c7f0b"
dependencies = [ dependencies = [
"futures-core", "futures-core",
] ]
[[package]] [[package]]
name = "futures-core" name = "futures-core"
version = "0.3.17" version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" checksum = "d0c8ff0461b82559810cdccfde3215c3f373807f5e5232b71479bff7bb2583d7"
[[package]] [[package]]
name = "futures-executor" name = "futures-executor"
version = "0.3.17" version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c" checksum = "29d6d2ff5bb10fb95c85b8ce46538a2e5f5e7fdc755623a7d4529ab8a4ed9d2a"
dependencies = [ dependencies = [
"futures-core", "futures-core",
"futures-task", "futures-task",
@@ -288,23 +275,22 @@ dependencies = [
[[package]] [[package]]
name = "futures-io" name = "futures-io"
version = "0.3.17" version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" checksum = "b1f9d34af5a1aac6fb380f735fe510746c38067c5bf16c7fd250280503c971b2"
[[package]] [[package]]
name = "futures-task" name = "futures-task"
version = "0.3.17" version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" checksum = "6ee7c6485c30167ce4dfb83ac568a849fe53274c831081476ee13e0dce1aad72"
[[package]] [[package]]
name = "futures-util" name = "futures-util"
version = "0.3.17" version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164"
dependencies = [ dependencies = [
"autocfg",
"futures-core", "futures-core",
"futures-task", "futures-task",
"pin-project-lite", "pin-project-lite",
@@ -314,10 +300,11 @@ dependencies = [
[[package]] [[package]]
name = "gdk-pixbuf" name = "gdk-pixbuf"
version = "0.14.0" version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f" checksum = "172dfe1d9dfb62936bf7ad3ede2913a1b21b1e3db56990e46e00789201de9070"
dependencies = [ dependencies = [
"bitflags",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
"gio", "gio",
"glib", "glib",
@@ -326,22 +313,22 @@ dependencies = [
[[package]] [[package]]
name = "gdk-pixbuf-sys" name = "gdk-pixbuf-sys"
version = "0.14.0" version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590" checksum = "413424d9818621fa3cfc8a3a915cdb89a7c3c507d56761b4ec83a9a98e587171"
dependencies = [ dependencies = [
"gio-sys", "gio-sys",
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
"libc", "libc",
"system-deps 3.2.0", "system-deps 6.0.0",
] ]
[[package]] [[package]]
name = "gdk4" name = "gdk4"
version = "0.3.0" version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c0f7f98ad25b81ac9462f74a091b0e4c0983ed1e74d19a38230c772b4dcef81" checksum = "319c74160dbe3e29cc1bf36ae4a08b9072f352b751e9e3e5501b3aa3ca633f66"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cairo-rs", "cairo-rs",
@@ -355,26 +342,26 @@ dependencies = [
[[package]] [[package]]
name = "gdk4-sys" name = "gdk4-sys"
version = "0.3.0" version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "262a79666b42e1884577f11a050439a964b95dec55343ac6ace7930e1415fa18" checksum = "48a39e34abe35ee2cf54a1e29dd983accecd113ad30bdead5050418fa92f2a1b"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
"gio-sys", "gio-sys",
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
"graphene-sys",
"libc", "libc",
"pango-sys", "pango-sys",
"system-deps 4.0.0", "pkg-config",
"system-deps 6.0.0",
] ]
[[package]] [[package]]
name = "gio" name = "gio"
version = "0.14.6" version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3a29d8062af72045518271a2cd98b4e1617ce43f5b4223ad0fb9a0eff8f718c" checksum = "4f80391bd2ac4981a3433137691211775bbb37c5347f8cfb7c0980187e0300c5"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"futures-channel", "futures-channel",
@@ -389,22 +376,22 @@ dependencies = [
[[package]] [[package]]
name = "gio-sys" name = "gio-sys"
version = "0.14.0" version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa" checksum = "04b57719ccaacf2a0d9c79f151be629f3a3ef3991658ee2af0bb66287e4ea86c"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
"libc", "libc",
"system-deps 3.2.0", "system-deps 6.0.0",
"winapi", "winapi",
] ]
[[package]] [[package]]
name = "glib" name = "glib"
version = "0.14.5" version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4a930b7208e6e0ab839eea5f65ac2b82109f729621430d47fe905e2e09d33f4" checksum = "4a703581e2538fe699c5476cf26b456d694c5272b6e999d3ab47711c5eaa2dd2"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"futures-channel", "futures-channel",
@@ -415,18 +402,20 @@ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
"libc", "libc",
"log",
"once_cell", "once_cell",
"smallvec", "smallvec",
"thiserror",
] ]
[[package]] [[package]]
name = "glib-macros" name = "glib-macros"
version = "0.14.1" version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2aad66361f66796bfc73f530c51ef123970eb895ffba991a234fcf7bea89e518" checksum = "e58b262ff65ef771003873cea8c10e0fe854f1c508d48d62a4111a1ff163f7d1"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"heck", "heck 0.4.0",
"proc-macro-crate", "proc-macro-crate",
"proc-macro-error", "proc-macro-error",
"proc-macro2", "proc-macro2",
@@ -436,12 +425,12 @@ dependencies = [
[[package]] [[package]]
name = "glib-sys" name = "glib-sys"
version = "0.14.0" version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c1d60554a212445e2a858e42a0e48cece1bd57b311a19a9468f70376cf554ae" checksum = "c668102c6e15e0a7f6b99b59f602c2e806967bb86414f617b77e19b1de5b3fac"
dependencies = [ dependencies = [
"libc", "libc",
"system-deps 3.2.0", "system-deps 6.0.0",
] ]
[[package]] [[package]]
@@ -452,20 +441,20 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
[[package]] [[package]]
name = "gobject-sys" name = "gobject-sys"
version = "0.14.0" version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa92cae29759dae34ab5921d73fff5ad54b3d794ab842c117e36cafc7994c3f5" checksum = "6edb1f0b3e4c08e2a0a490d1082ba9e902cdff8ff07091e85c6caec60d17e2ab"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
"system-deps 3.2.0", "system-deps 6.0.0",
] ]
[[package]] [[package]]
name = "graphene-rs" name = "graphene-rs"
version = "0.14.0" version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1460a39f06e491e6112f27e71e51435c833ba370723224dd1743dfd1f201f19" checksum = "7c54f9fbbeefdb62c99f892dfca35f83991e2cb5b46a8dc2a715e58612f85570"
dependencies = [ dependencies = [
"glib", "glib",
"graphene-sys", "graphene-sys",
@@ -474,21 +463,21 @@ dependencies = [
[[package]] [[package]]
name = "graphene-sys" name = "graphene-sys"
version = "0.14.0" version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7d23fb7a9547e5f072a7e0cd49cd648fedeb786d122b106217511980cbb8962" checksum = "03f311acb023cf7af5537f35de028e03706136eead7f25a31e8fd26f5011e0b3"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"libc", "libc",
"pkg-config", "pkg-config",
"system-deps 3.2.0", "system-deps 6.0.0",
] ]
[[package]] [[package]]
name = "gsk4" name = "gsk4"
version = "0.3.0" version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20b71f2e2cc699c2e0fbfa22899eeaffd84f9c1dc01e9263deac8664eec22dc0" checksum = "0672c63e4101e19d5e9cb4a0aed8b3278e9573529bd0b6a86d9c748c71bd9882"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cairo-rs", "cairo-rs",
@@ -502,9 +491,9 @@ dependencies = [
[[package]] [[package]]
name = "gsk4-sys" name = "gsk4-sys"
version = "0.3.0" version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30468aff80e4faadf22f9ba164ea17511a69a9995d7a13827a13424ef47b2472" checksum = "e31d21d7ce02ba261bb24c50c4ab238a10b41a2c97c32afffae29471b7cca69b"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk4-sys", "gdk4-sys",
@@ -513,14 +502,14 @@ dependencies = [
"graphene-sys", "graphene-sys",
"libc", "libc",
"pango-sys", "pango-sys",
"system-deps 4.0.0", "system-deps 6.0.0",
] ]
[[package]] [[package]]
name = "gtk4" name = "gtk4"
version = "0.3.0" version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "906f9308d15789d96a736881582181d710ae0937197119df459f3d2b46ef6776" checksum = "d6f9e36fb6db3d70edf5cea9f4a20928c1d08ed3f27697cfd2d21ca3d8ac4a2d"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"cairo-rs", "cairo-rs",
@@ -541,13 +530,11 @@ dependencies = [
[[package]] [[package]]
name = "gtk4-macros" name = "gtk4-macros"
version = "0.3.0" version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d0d008cdf23214c697482415dd20f666bdf3cc9f5e803b017223c17c5b59a6e" checksum = "573db42bb64973a4d5f718b73caa7204285a1a665308a23b11723d0ee56ec305"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"heck",
"itertools",
"proc-macro-crate", "proc-macro-crate",
"proc-macro-error", "proc-macro-error",
"proc-macro2", "proc-macro2",
@@ -557,9 +544,9 @@ dependencies = [
[[package]] [[package]]
name = "gtk4-sys" name = "gtk4-sys"
version = "0.3.0" version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d06be0a6322aa77dd372f726e97efbcbb192d9a824a414a8874f238effd7747c" checksum = "c47c075e8f795c38f6e9a47b51a73eab77b325f83c0154979ed4d4245c36490d"
dependencies = [ dependencies = [
"cairo-sys-rs", "cairo-sys-rs",
"gdk-pixbuf-sys", "gdk-pixbuf-sys",
@@ -571,7 +558,7 @@ dependencies = [
"gsk4-sys", "gsk4-sys",
"libc", "libc",
"pango-sys", "pango-sys",
"system-deps 4.0.0", "system-deps 6.0.0",
] ]
[[package]] [[package]]
@@ -583,11 +570,17 @@ dependencies = [
"unicode-segmentation", "unicode-segmentation",
] ]
[[package]]
name = "heck"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
[[package]] [[package]]
name = "helvum" name = "helvum"
version = "0.3.2" version = "0.3.3"
dependencies = [ dependencies = [
"env_logger 0.9.0", "glib",
"gtk4", "gtk4",
"log", "log",
"once_cell", "once_cell",
@@ -611,9 +604,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]] [[package]]
name = "itertools" name = "itertools"
version = "0.10.1" version = "0.10.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69ddb889f9d0d08a67338271fa9b62996bc788c7796a5c18cf057420aaed5eaf" checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
dependencies = [ dependencies = [
"either", "either",
] ]
@@ -645,15 +638,15 @@ dependencies = [
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.103" version = "0.2.115"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6" checksum = "0a8d982fa7a96a000f6ec4cfe966de9703eccde29750df2bb8949da91b0e818d"
[[package]] [[package]]
name = "libloading" name = "libloading"
version = "0.7.0" version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f84d96438c15fcd6c3f244c8fce01d1e2b9c6b5623e9c711dc9286d8fc92d6a" checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if 1.0.0",
"winapi", "winapi",
@@ -671,7 +664,7 @@ dependencies = [
"errno", "errno",
"libc", "libc",
"libspa-sys", "libspa-sys",
"nom", "nom 6.2.1",
"system-deps 3.2.0", "system-deps 3.2.0",
] ]
@@ -702,13 +695,19 @@ checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
[[package]] [[package]]
name = "memoffset" name = "memoffset"
version = "0.6.4" version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9" checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
dependencies = [ dependencies = [
"autocfg", "autocfg",
] ]
[[package]]
name = "minimal-lexical"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]] [[package]]
name = "nix" name = "nix"
version = "0.14.1" version = "0.14.1"
@@ -736,16 +735,27 @@ dependencies = [
] ]
[[package]] [[package]]
name = "once_cell" name = "nom"
version = "1.8.0" version = "7.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" checksum = "1b1d11e1ef389c76fe5b81bcaf2ea32cf88b62bc494e19f493d0b30e7a930109"
dependencies = [
"memchr",
"minimal-lexical",
"version_check",
]
[[package]]
name = "once_cell"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5"
[[package]] [[package]]
name = "pango" name = "pango"
version = "0.14.3" version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1fc88307d9797976ea62722ff2ec5de3fae279c6e20100ed3f49ca1a4bf3f96" checksum = "79211eff430c29cc38c69e0ab54bc78fa1568121ca9737707eee7f92a8417a94"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"glib", "glib",
@@ -756,14 +766,14 @@ dependencies = [
[[package]] [[package]]
name = "pango-sys" name = "pango-sys"
version = "0.14.0" version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe" checksum = "7022c2fb88cd2d9d55e1a708a8c53a3ae8678234c4a54bf623400aeb7f31fac2"
dependencies = [ dependencies = [
"glib-sys", "glib-sys",
"gobject-sys", "gobject-sys",
"libc", "libc",
"system-deps 3.2.0", "system-deps 6.0.0",
] ]
[[package]] [[package]]
@@ -783,9 +793,9 @@ dependencies = [
[[package]] [[package]]
name = "pin-project-lite" name = "pin-project-lite"
version = "0.2.7" version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
[[package]] [[package]]
name = "pin-utils" name = "pin-utils"
@@ -824,9 +834,9 @@ dependencies = [
[[package]] [[package]]
name = "pkg-config" name = "pkg-config"
version = "0.3.20" version = "0.3.24"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c9b1041b4387893b91ee6746cddfc28516aff326a3519fb2adf820932c5e6cb" checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
[[package]] [[package]]
name = "proc-macro-crate" name = "proc-macro-crate"
@@ -864,18 +874,18 @@ dependencies = [
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.29" version = "1.0.36"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
dependencies = [ dependencies = [
"unicode-xid", "unicode-xid",
] ]
[[package]] [[package]]
name = "quote" name = "quote"
version = "1.0.9" version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
] ]
@@ -920,9 +930,9 @@ dependencies = [
[[package]] [[package]]
name = "ryu" name = "ryu"
version = "1.0.5" version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
[[package]] [[package]]
name = "semver" name = "semver"
@@ -944,9 +954,9 @@ dependencies = [
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.130" version = "1.0.136"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
[[package]] [[package]]
name = "shlex" name = "shlex"
@@ -966,15 +976,15 @@ dependencies = [
[[package]] [[package]]
name = "slab" name = "slab"
version = "0.4.4" version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
[[package]] [[package]]
name = "smallvec" name = "smallvec"
version = "1.7.0" version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309" checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
[[package]] [[package]]
name = "static_assertions" name = "static_assertions"
@@ -1000,7 +1010,7 @@ version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec" checksum = "d06aaeeee809dbc59eb4556183dd927df67db1540de5be8d3ec0b6636358a5ec"
dependencies = [ dependencies = [
"heck", "heck 0.3.3",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn", "syn",
@@ -1008,9 +1018,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.77" version = "1.0.86"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5239bc68e0fef57495900cfea4e8dc75596d9a319d7e16b1e0a440d24e6fe0a0" checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -1025,27 +1035,27 @@ checksum = "480c269f870722b3b08d2f13053ce0c2ab722839f472863c3e2d61ff3a1c2fa6"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"cfg-expr 0.8.1", "cfg-expr 0.8.1",
"heck", "heck 0.3.3",
"itertools", "itertools",
"pkg-config", "pkg-config",
"strum", "strum",
"strum_macros", "strum_macros",
"thiserror", "thiserror",
"toml", "toml",
"version-compare", "version-compare 0.0.11",
] ]
[[package]] [[package]]
name = "system-deps" name = "system-deps"
version = "4.0.0" version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c1889ab44c2a423ba9ba4d64cd04989b25c0280ca7ade813f05368418722a04" checksum = "7b1487aaddaacbc5d60a2a507ba1617c5ca66c57dd0dd07d0c5efd5b693841d4"
dependencies = [ dependencies = [
"cfg-expr 0.9.0", "cfg-expr 0.9.0",
"heck", "heck 0.3.3",
"pkg-config", "pkg-config",
"toml", "toml",
"version-compare", "version-compare 0.1.0",
] ]
[[package]] [[package]]
@@ -1074,18 +1084,18 @@ dependencies = [
[[package]] [[package]]
name = "thiserror" name = "thiserror"
version = "1.0.29" version = "1.0.30"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "602eca064b2d83369e2b2f34b09c70b605402801927c65c11071ac911d299b88" checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
dependencies = [ dependencies = [
"thiserror-impl", "thiserror-impl",
] ]
[[package]] [[package]]
name = "thiserror-impl" name = "thiserror-impl"
version = "1.0.29" version = "1.0.30"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bad553cc2c78e8de258400763a647e80e6d1b31ee237275d756f6836d204494c" checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -1138,10 +1148,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
[[package]] [[package]]
name = "version_check" name = "version-compare"
version = "0.9.3" version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" checksum = "fe88247b92c1df6b6de80ddc290f3976dbdf2f5f5d3fd049a9fb598c6dd5ca73"
[[package]]
name = "version_check"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]] [[package]]
name = "void" name = "void"
@@ -1151,10 +1167,12 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
[[package]] [[package]]
name = "which" name = "which"
version = "3.1.1" version = "4.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724" checksum = "2a5a7e487e921cf220206864a94a89b6c6905bfc19f1057fa26a4cb360e5c1d2"
dependencies = [ dependencies = [
"either",
"lazy_static",
"libc", "libc",
] ]

View File

@@ -1,12 +1,12 @@
[package] [package]
name = "helvum" name = "helvum"
version = "0.3.2" version = "0.3.3"
authors = ["Tom A. Wagner <tom.a.wagner@protonmail.com>"] authors = ["Tom A. Wagner <tom.a.wagner@protonmail.com>"]
edition = "2021" edition = "2021"
rust-version = "1.56" rust-version = "1.56"
license = "GPL-3.0-only" license = "GPL-3.0-only"
description = "A GTK patchbay for pipewire" description = "A GTK patchbay for pipewire"
repository = "https://gitlab.freedesktop.org/ryuukyu/helvum" repository = "https://gitlab.freedesktop.org/pipewire/helvum"
readme = "README.md" readme = "README.md"
keywords = ["pipewire", "gtk", "patchbay", "gui", "utility"] keywords = ["pipewire", "gtk", "patchbay", "gui", "utility"]
categories = ["gui", "multimedia"] categories = ["gui", "multimedia"]
@@ -15,9 +15,9 @@ categories = ["gui", "multimedia"]
[dependencies] [dependencies]
pipewire = "0.4" pipewire = "0.4"
gtk = { version = "0.3", package = "gtk4" } gtk = { version = "0.4.1", package = "gtk4" }
glib = { version = "0.15.1", features = ["log"] }
log = "0.4.11" log = "0.4.11"
env_logger = "0.9.0"
once_cell = "1.7.2" once_cell = "1.7.2"

View File

@@ -14,9 +14,7 @@ More suggestions are welcome!
# Building # Building
## Via flatpak (recommended) ## Via flatpak
The recommended way to build is using flatpak, which will take care of all dependencies and avoid any problems that may come from different system configurations.
If you don't have the flathub repo in your remote-list for flatpak you will need to add that first: If you don't have the flathub repo in your remote-list for flatpak you will need to add that first:
```shell ```shell
$ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo $ flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
@@ -27,14 +25,14 @@ Then install the required flatpak platform and SDK, if you dont have them alread
$ flatpak install org.gnome.{Platform,Sdk}//41 org.freedesktop.Sdk.Extension.rust-stable//21.08 org.freedesktop.Sdk.Extension.llvm12//21.08 $ flatpak install org.gnome.{Platform,Sdk}//41 org.freedesktop.Sdk.Extension.rust-stable//21.08 org.freedesktop.Sdk.Extension.llvm12//21.08
``` ```
To compile and install as a flatpak, run To compile and install as a flatpak, clone the project, change to the project directory, and run:
```shell ```shell
$ flatpak-builder --install flatpak-build/ build-aux/org.freedesktop.ryuukyu.Helvum.json $ flatpak-builder --install flatpak-build/ build-aux/org.pipewire.Helvum.json
``` ```
You can then run the app via You can then run the app via
```shell ```shell
$ flatpak run org.freedesktop.ryuukyu.Helvum $ flatpak run org.pipewire.Helvum
``` ```
## Manually ## Manually
@@ -56,6 +54,9 @@ $ meson install
in the repository root. in the repository root.
This will install the compiled project files into `/usr/local`. This will install the compiled project files into `/usr/local`.
# License # License and Credits
Helvum is distributed under the terms of the GPL3 license. Helvum is distributed under the terms of the GPL3 license.
See LICENSE for more information. See LICENSE for more information.
Parts of the build system were taken from the [gtk-rust-template](https://gitlab.gnome.org/World/Rust/gtk-rust-template) project,
which is provided under the terms of the [MIT license](https://gitlab.gnome.org/World/Rust/gtk-rust-template/-/blob/master/LICENSE.md).

View File

@@ -1,21 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
export MESON_BUILD_ROOT="$1"
export MESON_SOURCE_ROOT="$2"
export CARGO_TARGET_DIR="$MESON_BUILD_ROOT"/target
export CARGO_HOME="$MESON_BUILD_ROOT"/cargo-home
if [[ $4 = "development" ]]
then
echo "DEBUG MODE"
cargo build --manifest-path \
"$MESON_SOURCE_ROOT/Cargo.toml" && \
cp "$CARGO_TARGET_DIR/debug/$5" "$3"
else
echo "RELEASE MODE"
cargo build --manifest-path \
"$MESON_SOURCE_ROOT/Cargo.toml" --release && \
cp "$CARGO_TARGET_DIR/release/$5" "$3"
fi

View File

@@ -1,12 +0,0 @@
#!/usr/bin/env python3
from os import environ, path
from subprocess import call
if not environ.get('DESTDIR', ''):
PREFIX = environ.get('MESON_INSTALL_PREFIX', '/usr/local')
DATA_DIR = path.join(PREFIX, 'share')
print('Updating icon cache...')
call(['gtk-update-icon-cache', '-qtf', path.join(DATA_DIR, 'icons/hicolor')])
print("Updating desktop database...")
call(["update-desktop-database", path.join(DATA_DIR, 'applications')])

View File

@@ -1,5 +1,5 @@
{ {
"app-id": "org.freedesktop.ryuukyu.Helvum", "app-id": "org.pipewire.Helvum",
"runtime": "org.gnome.Platform", "runtime": "org.gnome.Platform",
"runtime-version": "41", "runtime-version": "41",
"sdk": "org.gnome.Sdk", "sdk": "org.gnome.Sdk",

View File

Before

Width:  |  Height:  |  Size: 589 B

After

Width:  |  Height:  |  Size: 589 B

View File

@@ -10,7 +10,7 @@
id="svg11300" id="svg11300"
sodipodi:version="0.32" sodipodi:version="0.32"
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)" inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
sodipodi:docname="org.freedesktop.ryuukyu.Helvum.Source.svg" sodipodi:docname="org.pipewire.Helvum.Source.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape" inkscape:output_extension="org.inkscape.output.svg.inkscape"
version="1.0" version="1.0"
style="display:inline;enable-background:new" style="display:inline;enable-background:new"

Before

Width:  |  Height:  |  Size: 187 KiB

After

Width:  |  Height:  |  Size: 187 KiB

View File

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

@@ -22,3 +22,28 @@ install_data(
desktop_file, desktop_file,
install_dir: datadir / 'applications' install_dir: datadir / 'applications'
) )
appdata_conf = configuration_data()
appdata_conf.set('app-id', base_id)
appdata_file = configure_file(
input: '@0@.metainfo.xml.in'.format(base_id),
output: '@BASENAME@',
configuration: appdata_conf
)
# Validate Appdata
if appstream_util.found()
test(
'validate-appdata',
appstream_util,
args: [
'validate', '--nonet', appdata_file
],
)
endif
install_data(
appdata_file,
install_dir: datadir / 'metainfo'
)

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2021 Tom A. Wagner <tom.a.wagner@protonmail.com> -->
<component type="desktop-application">
<id>@app-id@</id>
<metadata_license>CC-BY-SA-4.0</metadata_license>
<project_license>GPL-3.0-only</project_license>
<name>Helvum</name>
<summary>Patchbay for PipeWire</summary>
<description>
<p>
Helvum is a graphical patchbay for PipeWire.
It allows creating and removing connections between applications and/or devices to reroute
flow of audio, video and MIDI data to where it is needed.
</p>
</description>
<screenshots>
<screenshot type="default">
<image>https://gitlab.freedesktop.org/pipewire/helvum/-/raw/main/docs/screenshot.png</image>
</screenshot>
</screenshots>
<launchable type="desktop-id">@app-id@.desktop</launchable>
<url type="homepage">https://gitlab.freedesktop.org/pipewire/helvum</url>
<url type="bugtracker">https://gitlab.freedesktop.org/pipewire/helvum/-/issues</url>
<content_rating type="oars-1.0" />
<releases>
<release version="0.3.3" date="2022-01-28" />
<release version="0.3.2" date="2021-11-30" />
<release version="0.3.1" date="2021-09-30" />
<release version="0.3.0" date="2021-08-08" />
<release version="0.2.1" date="2021-06-06" />
<release version="0.2.0" date="2021-05-21" />
<release version="0.1.0" date="2021-01-12" />
</releases>
<kudos>
<kodu>HiDpiIcon</kodu>
<kudo>ModernToolkit</kudo>
</kudos>
<developer_name>Tom A. Wagner</developer_name>
<update_contact>tom.a.wagner@protonmail.com</update_contact>
</component>

22
docs/making_a_release.md Normal file
View File

@@ -0,0 +1,22 @@
# Making a release
The following describes the process of making a new release:
1. In `data/org.pipewire.Helvum.metainfo.xml.in`,
add a new `<release>` tag to the releases section with the appropriate version and date.
2. In `meson.build` and `Cargo.toml`, bumb the projects version to the new version.
3. Ensure cargo dependencies are up-to-date by running `cargo outdated` (may require running `cargo install cargo-outdated`) and updating outdated dependencies (including the versions specified in `Cargo.lock`).
4. Commit the changes with the a message of the format "Release x.y.z"
5. Add a tag to the release with the new version and a description from describing the changes as a message (run `git tag -a x.y.z`, then write the message)
6. Make a **new** meson build directory and run `meson dist`.
Two files should be created in a `meson-dist` subdirectory:
`helvum-x.y.z.tar.xz` and
`helvum-x.y.z.tar.xz.sha256sum`
7. Push the new commit and tag to upstream, then create a new release on gitlab from the new tag, the description from the tags message formatted as markdown, and also add the two files from step 6 to the description.

View File

@@ -1,20 +1,22 @@
project( project(
'helvum', 'helvum',
'rust', 'rust',
version: '0.3.2', version: '0.3.3',
license: 'GPL-3.0', license: 'GPL-3.0',
meson_version: '>=0.50.0' meson_version: '>=0.59.0'
) )
base_id = 'org.freedesktop.ryuukyu.Helvum' gnome = import('gnome')
dependency('glib-2.0', version: '>= 2.48') base_id = 'org.pipewire.Helvum'
dependency('glib-2.0', version: '>= 2.66')
dependency('gtk4', version: '>= 4.4.0') dependency('gtk4', version: '>= 4.4.0')
dependency('libpipewire-0.3') dependency('libpipewire-0.3')
desktop_file_validate = find_program('desktop-file-validate', required: false) desktop_file_validate = find_program('desktop-file-validate', required: false)
appstream_util = find_program('appstream-util', required: false)
cargo = find_program('cargo', required: true) cargo = find_program('cargo', required: true)
cargo_script = find_program('build-aux/cargo.sh')
prefix = get_option('prefix') prefix = get_option('prefix')
bindir = prefix / get_option('bindir') bindir = prefix / get_option('bindir')
@@ -23,16 +25,14 @@ iconsdir = datadir / 'icons'
meson.add_dist_script( meson.add_dist_script(
'build-aux/dist-vendor.sh', 'build-aux/dist-vendor.sh',
meson.build_root() / 'meson-dist' / meson.project_name() + '-' + meson.project_version(), meson.project_build_root() / 'meson-dist' / meson.project_name() + '-' + meson.project_version(),
meson.source_root() meson.project_source_root()
)
cargo_sources = files(
'Cargo.toml',
'Cargo.lock',
) )
subdir('src') subdir('src')
subdir('data') subdir('data')
meson.add_install_script('build-aux/meson_post_install.py') gnome.post_install(
gtk_update_icon_cache: true,
update_desktop_database: true,
)

View File

@@ -25,7 +25,7 @@ use gtk::{
prelude::*, prelude::*,
subclass::prelude::*, subclass::prelude::*,
}; };
use log::{info, warn}; use log::info;
use pipewire::{channel::Sender, spa::Direction}; use pipewire::{channel::Sender, spa::Direction};
use crate::{ use crate::{
@@ -56,10 +56,10 @@ mod imp {
impl ObjectImpl for Application {} impl ObjectImpl for Application {}
impl ApplicationImpl for Application { impl ApplicationImpl for Application {
fn activate(&self, app: &Self::Type) { fn activate(&self, app: &Self::Type) {
let scrollwindow = gtk::ScrolledWindowBuilder::new() let scrollwindow = gtk::ScrolledWindow::builder()
.child(&self.graphview) .child(&self.graphview)
.build(); .build();
let window = gtk::ApplicationWindowBuilder::new() let window = gtk::ApplicationWindow::builder()
.application(app) .application(app)
.default_width(1280) .default_width(1280)
.default_height(720) .default_height(720)
@@ -101,8 +101,7 @@ impl Application {
gtk_receiver: Receiver<PipewireMessage>, gtk_receiver: Receiver<PipewireMessage>,
pw_sender: Sender<GtkMessage>, pw_sender: Sender<GtkMessage>,
) -> Self { ) -> Self {
let app: Application = let app: Application = glib::Object::new(&[("application-id", &"org.pipewire.Helvum")])
glib::Object::new(&[("application-id", &"org.freedesktop.ryuukyu.Helvum")])
.expect("Failed to create new Application"); .expect("Failed to create new Application");
let imp = imp::Application::from_instance(&app); let imp = imp::Application::from_instance(&app);
@@ -170,7 +169,7 @@ impl Application {
let port = view::Port::new(id, name, direction, media_type); let port = view::Port::new(id, name, direction, media_type);
// Create or delete a link if the widget emits the "port-toggled" signal. // Create or delete a link if the widget emits the "port-toggled" signal.
if let Err(e) = port.connect_local( port.connect_local(
"port_toggled", "port_toggled",
false, false,
clone!(@weak self as app => @default-return None, move |args| { clone!(@weak self as app => @default-return None, move |args| {
@@ -182,9 +181,7 @@ impl Application {
None None
}), }),
) { );
warn!("Failed to connect to \"port-toggled\" signal: {}", e);
}
imp.graphview.add_port(node_id, id, port); imp.graphview.add_port(node_id, id, port);
} }

View File

@@ -21,10 +21,8 @@ mod application;
mod pipewire_connection; mod pipewire_connection;
mod view; mod view;
use gtk::{ use glib::PRIORITY_DEFAULT;
glib::{self, PRIORITY_DEFAULT}, use gtk::prelude::*;
prelude::*,
};
use pipewire::spa::Direction; use pipewire::spa::Direction;
/// Messages sent by the GTK thread to notify the pipewire thread. /// Messages sent by the GTK thread to notify the pipewire thread.
@@ -96,8 +94,20 @@ pub struct PipewireLink {
pub port_to: u32, pub port_to: u32,
} }
static GLIB_LOGGER: glib::GlibLogger = glib::GlibLogger::new(
glib::GlibLoggerFormat::Structured,
glib::GlibLoggerDomain::CrateTarget,
);
fn init_glib_logger() {
log::set_logger(&GLIB_LOGGER).expect("Failed to set logger");
// Glib does not have a "Trace" log level, so only print messages "Debug" or higher priority.
log::set_max_level(log::LevelFilter::Debug);
}
fn main() -> Result<(), Box<dyn std::error::Error>> { fn main() -> Result<(), Box<dyn std::error::Error>> {
env_logger::init(); init_glib_logger();
gtk::init()?; gtk::init()?;
// Aquire main context so that we can attach the gtk channel later. // Aquire main context so that we can attach the gtk channel later.

View File

@@ -1,32 +1,31 @@
rust_sources = files( cargo_options = [ '--manifest-path', meson.project_source_root() / 'Cargo.toml' ]
'application.rs', cargo_options += [ '--target-dir', meson.project_build_root() / 'src' ]
'main.rs',
'pipewire_connection.rs', if get_option('profile') == 'default'
'pipewire_connection/state.rs', cargo_options += [ '--release' ]
'style.css', rust_target = 'release'
'view/graph_view.rs', message('Building in release mode')
'view/mod.rs', else
'view/node.rs', rust_target = 'debug'
'view/port.rs', message('Building in debug mode')
) endif
cargo_env = [ 'CARGO_HOME=' + meson.project_build_root() / 'cargo-home' ]
custom_target( custom_target(
'cargo-build', 'cargo-build',
build_by_default: true, build_by_default: true,
input: [ build_always_stale: true,
cargo_sources,
rust_sources
],
output: meson.project_name(), output: meson.project_name(),
console: true, console: true,
install: true, install: true,
install_dir: bindir, install_dir: bindir,
command: [ command: [
cargo_script, 'env',
meson.build_root(), cargo_env,
meson.source_root(), cargo, 'build',
'@OUTPUT@', cargo_options,
get_option('profile'), '&&',
meson.project_name(), 'cp', 'src' / rust_target / meson.project_name(), '@OUTPUT@',
], ],
) )

View File

@@ -70,7 +70,6 @@ mod imp {
let mut drag_state = drag_state.borrow_mut(); let mut drag_state = drag_state.borrow_mut();
let widget = drag_controller let widget = drag_controller
.widget() .widget()
.expect("drag-begin event has no widget")
.dynamic_cast::<Self::Type>() .dynamic_cast::<Self::Type>()
.expect("drag-begin event is not on the GraphView"); .expect("drag-begin event is not on the GraphView");
// pick() should at least return the widget itself. // pick() should at least return the widget itself.
@@ -82,12 +81,8 @@ mod imp {
} else if let Some(target) = target.ancestor(Node::static_type()) { } else if let Some(target) = target.ancestor(Node::static_type()) {
// The user targeted a Node without targeting a specific Port. // The user targeted a Node without targeting a specific Port.
// Drag the Node around the screen. // Drag the Node around the screen.
if let Some((x, y)) = widget.get_node_position(&target) { let (x, y) = widget.get_node_position(&target);
Some((target, x, y)) Some((target, x, y))
} else {
error!("Failed to obtain position of dragged node, drag aborted.");
None
}
} else { } else {
None None
} }
@@ -97,7 +92,6 @@ mod imp {
clone!(@strong drag_state => move |drag_controller, x, y| { clone!(@strong drag_state => move |drag_controller, x, y| {
let widget = drag_controller let widget = drag_controller
.widget() .widget()
.expect("drag-update event has no widget")
.dynamic_cast::<Self::Type>() .dynamic_cast::<Self::Type>()
.expect("drag-update event is not on the GraphView"); .expect("drag-update event is not on the GraphView");
let drag_state = drag_state.borrow(); let drag_state = drag_state.borrow();
@@ -125,25 +119,23 @@ mod imp {
let alloc = widget.allocation(); let alloc = widget.allocation();
let widget_bounds = let widget_bounds =
graphene::Rect::new(0.0, 0.0, alloc.width as f32, alloc.height as f32); graphene::Rect::new(0.0, 0.0, alloc.width() as f32, alloc.height() as f32);
let background_cr = snapshot let background_cr = snapshot.append_cairo(&widget_bounds);
.append_cairo(&widget_bounds)
.expect("Failed to get cairo context");
// Draw a nice grid on the background. // Draw a nice grid on the background.
background_cr.set_source_rgb(0.18, 0.18, 0.18); background_cr.set_source_rgb(0.18, 0.18, 0.18);
background_cr.set_line_width(0.2); // TODO: Set to 1px background_cr.set_line_width(0.2); // TODO: Set to 1px
let mut y = 0.0; let mut y = 0.0;
while y < alloc.height.into() { while y < alloc.height().into() {
background_cr.move_to(0.0, y); background_cr.move_to(0.0, y);
background_cr.line_to(alloc.width.into(), y); background_cr.line_to(alloc.width().into(), y);
y += 20.0; // TODO: Change to em; y += 20.0; // TODO: Change to em;
} }
let mut x = 0.0; let mut x = 0.0;
while x < alloc.width.into() { while x < alloc.width().into() {
background_cr.move_to(x, 0.0); background_cr.move_to(x, 0.0);
background_cr.line_to(x, alloc.height.into()); background_cr.line_to(x, alloc.height().into());
x += 20.0; // TODO: Change to em; x += 20.0; // TODO: Change to em;
} }
if let Err(e) = background_cr.stroke() { if let Err(e) = background_cr.stroke() {
@@ -157,32 +149,26 @@ mod imp {
.for_each(|node| self.instance().snapshot_child(node, snapshot)); .for_each(|node| self.instance().snapshot_child(node, snapshot));
// Draw all links // Draw all links
let link_cr = snapshot let link_cr = snapshot.append_cairo(&graphene::Rect::new(
.append_cairo(&graphene::Rect::new(
0.0, 0.0,
0.0, 0.0,
alloc.width as f32, alloc.width() as f32,
alloc.height as f32, alloc.height() as f32,
)) ));
.expect("Failed to get cairo context");
link_cr.set_line_width(2.0); link_cr.set_line_width(2.0);
let gtk::gdk::RGBA { let rgba = widget
red,
green,
blue,
alpha,
} = widget
.style_context() .style_context()
.lookup_color("graphview-link") .lookup_color("graphview-link")
.unwrap_or(gtk::gdk::RGBA { .unwrap_or_else(|| gtk::gdk::RGBA::new(0.0, 0.0, 0.0, 0.0));
red: 0.0,
green: 0.0, link_cr.set_source_rgba(
blue: 0.0, rgba.red().into(),
alpha: 0.0, rgba.green().into(),
}); rgba.blue().into(),
link_cr.set_source_rgba(red.into(), green.into(), blue.into(), alpha.into()); rgba.alpha().into(),
);
for (link, active) in self.links.borrow().values() { for (link, active) in self.links.borrow().values() {
if let Some((from_x, from_y, to_x, to_y)) = self.get_link_coordinates(link) { if let Some((from_x, from_y, to_x, to_y)) = self.get_link_coordinates(link) {
@@ -239,34 +225,26 @@ mod imp {
// so we manually calculate the needed offsets here. // so we manually calculate the needed offsets here.
let from_port = &nodes.get(&link.node_from)?.get_port(link.port_from)?; let from_port = &nodes.get(&link.node_from)?.get_port(link.port_from)?;
let gtk::Allocation {
x: mut fx,
y: mut fy,
width: fw,
height: fh,
} = from_port.allocation();
let from_node = from_port let from_node = from_port
.ancestor(Node::static_type()) .ancestor(Node::static_type())
.expect("Port is not a child of a node"); .expect("Port is not a child of a node");
let gtk::Allocation { x: fnx, y: fny, .. } = from_node.allocation(); let from_x = from_node.allocation().x()
fx += fnx + fw; + from_port.allocation().x()
fy += fny + (fh / 2); + from_port.allocation().width();
let from_y = from_node.allocation().y()
+ from_port.allocation().y()
+ (from_port.allocation().height() / 2);
let to_port = &nodes.get(&link.node_to)?.get_port(link.port_to)?; let to_port = &nodes.get(&link.node_to)?.get_port(link.port_to)?;
let gtk::Allocation {
x: mut tx,
y: mut ty,
height: th,
..
} = to_port.allocation();
let to_node = to_port let to_node = to_port
.ancestor(Node::static_type()) .ancestor(Node::static_type())
.expect("Port is not a child of a node"); .expect("Port is not a child of a node");
let gtk::Allocation { x: tnx, y: tny, .. } = to_node.allocation(); let to_x = to_node.allocation().x() + to_port.allocation().x();
tx += tnx; let to_y = to_node.allocation().y()
ty += tny + (th / 2); + to_port.allocation().y()
+ (to_port.allocation().height() / 2);
Some((fx.into(), fy.into(), tx.into(), ty.into())) Some((from_x.into(), from_y.into(), to_x.into(), to_y.into()))
} }
} }
} }
@@ -299,8 +277,8 @@ impl GraphView {
.nodes .nodes
.borrow() .borrow()
.values() .values()
.filter_map(|node| { .map(|node| {
// Map nodes to locations, discard nodes without location // Map nodes to their locations
self.get_node_position(&node.clone().upcast()) self.get_node_position(&node.clone().upcast())
}) })
.filter(|(x2, _)| { .filter(|(x2, _)| {
@@ -374,9 +352,7 @@ impl GraphView {
} }
/// Get the position of the specified node inside the graphview. /// Get the position of the specified node inside the graphview.
/// pub(super) fn get_node_position(&self, node: &gtk::Widget) -> (f32, f32) {
/// Returns `None` if the node is not in the graphview.
pub(super) fn get_node_position(&self, node: &gtk::Widget) -> Option<(f32, f32)> {
let layout_manager = self let layout_manager = self
.layout_manager() .layout_manager()
.expect("Failed to get layout manager") .expect("Failed to get layout manager")
@@ -384,13 +360,12 @@ impl GraphView {
.expect("Failed to cast to FixedLayout"); .expect("Failed to cast to FixedLayout");
let node = layout_manager let node = layout_manager
.layout_child(node)? .layout_child(node)
.dynamic_cast::<gtk::FixedLayoutChild>() .dynamic_cast::<gtk::FixedLayoutChild>()
.expect("Could not cast to FixedLayoutChild"); .expect("Could not cast to FixedLayoutChild");
let transform = node node.transform()
.transform() .expect("Failed to obtain transform from layout child")
.expect("Failed to obtain transform from layout child"); .to_translate()
Some(transform.to_translate())
} }
pub(super) fn move_node(&self, node: &gtk::Widget, x: f32, y: f32) { pub(super) fn move_node(&self, node: &gtk::Widget, x: f32, y: f32) {
@@ -407,7 +382,6 @@ impl GraphView {
layout_manager layout_manager
.layout_child(node) .layout_child(node)
.expect("Could not get layout child")
.dynamic_cast::<gtk::FixedLayoutChild>() .dynamic_cast::<gtk::FixedLayoutChild>()
.expect("Could not cast to FixedLayoutChild") .expect("Could not cast to FixedLayoutChild")
.set_transform(&transform); .set_transform(&transform);

View File

@@ -30,14 +30,14 @@ use crate::MediaType;
/// A helper struct for linking a output port to an input port. /// A helper struct for linking a output port to an input port.
/// It carries the output ports id. /// It carries the output ports id.
#[derive(Clone, Debug, glib::GBoxed)] #[derive(Clone, Debug, glib::Boxed)]
#[gboxed(type_name = "HelvumForwardLink")] #[boxed_type(name = "HelvumForwardLink")]
struct ForwardLink(u32); struct ForwardLink(u32);
/// A helper struct for linking an input to an output port. /// A helper struct for linking an input to an output port.
/// It carries the input ports id. /// It carries the input ports id.
#[derive(Clone, Debug, glib::GBoxed)] #[derive(Clone, Debug, glib::Boxed)]
#[gboxed(type_name = "HelvumReversedLink")] #[boxed_type(name = "HelvumReversedLink")]
struct ReversedLink(u32); struct ReversedLink(u32);
mod imp { mod imp {
@@ -123,7 +123,7 @@ impl Port {
// FIXME: We should protect against different media types, e.g. it should not be possible to drop a video port on an audio port. // FIXME: We should protect against different media types, e.g. it should not be possible to drop a video port on an audio port.
// The port will simply provide its pipewire id to the drag target. // The port will simply provide its pipewire id to the drag target.
let drag_src = gtk::DragSourceBuilder::new() let drag_src = gtk::DragSource::builder()
.content(&gdk::ContentProvider::for_value(&match direction { .content(&gdk::ContentProvider::for_value(&match direction {
Direction::Input => ReversedLink(id).to_value(), Direction::Input => ReversedLink(id).to_value(),
Direction::Output => ForwardLink(id).to_value(), Direction::Output => ForwardLink(id).to_value(),
@@ -155,9 +155,7 @@ impl Port {
// Get the callback registered in the widget and call it // Get the callback registered in the widget and call it
drop_target drop_target
.widget() .widget()
.expect("Drop target has no widget") .emit_by_name::<()>("port-toggled", &[&source_id, &this.id()]);
.emit_by_name("port-toggled", &[&source_id, &this.id()])
.expect("Failed to send signal");
} else { } else {
warn!("Invalid type dropped on ingoing port"); warn!("Invalid type dropped on ingoing port");
} }
@@ -173,9 +171,7 @@ impl Port {
// Get the callback registered in the widget and call it // Get the callback registered in the widget and call it
drop_target drop_target
.widget() .widget()
.expect("Drop target has no widget") .emit_by_name::<()>("port-toggled", &[&this.id(), &target_id]);
.emit_by_name("port-toggled", &[&this.id(), &target_id])
.expect("Failed to send signal");
} else { } else {
warn!("Invalid type dropped on outgoing port"); warn!("Invalid type dropped on outgoing port");
} }