Merge pull request #2053 from paul-ri/exlude-in-array

This commit is contained in:
Alex 2023-03-13 11:04:25 +01:00 committed by GitHub
commit 473eb0982b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 27 additions and 5 deletions

View File

@ -29,4 +29,4 @@ jobs:
- name: build - name: build
run: ninja -C build run: ninja -C build
- name: test - name: test
run: meson test -C build --no-rebuild --verbose --suite waybar run: make test

View File

@ -19,5 +19,9 @@ run: build
debug-run: build-debug debug-run: build-debug
./build/waybar --log-level debug ./build/waybar --log-level debug
test:
meson test -C build --no-rebuild --verbose --suite waybar
.PHONY: test
clean: clean:
rm -rf build rm -rf build

View File

@ -30,6 +30,7 @@ Also a minimal example configuration can be found on the at the bottom of this m
*output* ++ *output* ++
typeof: string|array ++ typeof: string|array ++
Specifies on which screen this bar will be displayed. Exclamation mark(*!*) can be used to exclude specific output. Specifies on which screen this bar will be displayed. Exclamation mark(*!*) can be used to exclude specific output.
In an array, star '*\**' can be used at the end to accept all outputs, in case all previous entries are exclusions.
*position* ++ *position* ++
typeof: string ++ typeof: string ++

View File

@ -124,9 +124,21 @@ bool isValidOutput(const Json::Value &config, const std::string &name,
const std::string &identifier) { const std::string &identifier) {
if (config["output"].isArray()) { if (config["output"].isArray()) {
for (auto const &output_conf : config["output"]) { for (auto const &output_conf : config["output"]) {
if (output_conf.isString() && if (output_conf.isString()) {
(output_conf.asString() == name || output_conf.asString() == identifier)) { auto config_output = output_conf.asString();
return true; if (config_output.substr(0, 1) == "!") {
if (config_output.substr(1) == name || config_output.substr(1) == identifier) {
return false;
} else {
continue;
}
}
if (config_output == name || config_output == identifier) {
return true;
}
if (config_output.substr(0, 1) == "*") {
return true;
}
} }
} }
return false; return false;

View File

@ -31,7 +31,7 @@ TEST_CASE("Load config with multiple bars", "[config]") {
SECTION("select multiple configs #1") { SECTION("select multiple configs #1") {
auto data = conf.getOutputConfigs("DP-0", "Fake DisplayPort output #0"); auto data = conf.getOutputConfigs("DP-0", "Fake DisplayPort output #0");
REQUIRE(data.size() == 3); REQUIRE(data.size() == 4);
REQUIRE(data[0]["layer"].asString() == "bottom"); REQUIRE(data[0]["layer"].asString() == "bottom");
REQUIRE(data[0]["height"].asInt() == 20); REQUIRE(data[0]["height"].asInt() == 20);
REQUIRE(data[1]["layer"].asString() == "top"); REQUIRE(data[1]["layer"].asString() == "top");
@ -40,6 +40,7 @@ TEST_CASE("Load config with multiple bars", "[config]") {
REQUIRE(data[2]["layer"].asString() == "overlay"); REQUIRE(data[2]["layer"].asString() == "overlay");
REQUIRE(data[2]["position"].asString() == "right"); REQUIRE(data[2]["position"].asString() == "right");
REQUIRE(data[2]["height"].asInt() == 23); REQUIRE(data[2]["height"].asInt() == 23);
REQUIRE(data[3]["height"].asInt() == 24);
} }
SECTION("select multiple configs #2") { SECTION("select multiple configs #2") {
auto data = conf.getOutputConfigs("HDMI-0", "Fake HDMI output #0"); auto data = conf.getOutputConfigs("HDMI-0", "Fake HDMI output #0");

View File

@ -21,5 +21,9 @@
"layer": "overlay", "layer": "overlay",
"height": 23, "height": 23,
"output": "!HDMI-1" "output": "!HDMI-1"
},
{
"height": 24,
"output": ["!HDMI-0", "!HDMI-1", "*"]
} }
] ]