diff --git a/include/util/hosts_check.hpp b/include/util/hosts_check.hpp new file mode 100644 index 00000000..4179f633 --- /dev/null +++ b/include/util/hosts_check.hpp @@ -0,0 +1,7 @@ +#pragma once + +#include + +namespace waybar::util { +bool valid_host(const Json::Value& config); +} // namespace waybar::util diff --git a/meson.build b/meson.build index 361ade08..02746e9d 100644 --- a/meson.build +++ b/meson.build @@ -182,6 +182,7 @@ src_files = files( 'src/util/ustring_clen.cpp', 'src/util/sanitize_str.cpp', 'src/util/rewrite_string.cpp', + 'src/util/hosts_check.cpp', 'src/util/gtk_icon.cpp', 'src/util/icon_loader.cpp', 'src/util/regex_collection.cpp', diff --git a/src/bar.cpp b/src/bar.cpp index 4bf247b4..bea77db7 100644 --- a/src/bar.cpp +++ b/src/bar.cpp @@ -3,12 +3,14 @@ #include #include +#include #include #include "client.hpp" #include "factory.hpp" #include "group.hpp" #include "util/enum.hpp" +#include "util/hosts_check.hpp" #include "util/kill_signal.hpp" #ifdef HAVE_SWAY @@ -565,6 +567,11 @@ void waybar::Bar::getModules(const Factory& factory, const std::string& pos, for (const auto& name : module_list) { try { auto ref = name.asString(); + + if (config[ref].isMember("hosts") && !waybar::util::valid_host(config[ref])) { + continue; + } + AModule* module; if (ref.compare(0, 6, "group/") == 0 && ref.size() > 6) { diff --git a/src/util/hosts_check.cpp b/src/util/hosts_check.cpp new file mode 100644 index 00000000..1769dd78 --- /dev/null +++ b/src/util/hosts_check.cpp @@ -0,0 +1,17 @@ +#include "util/hosts_check.hpp" + +#include +#include + +namespace waybar::util { +bool valid_host(const Json::Value& config) { + if (config.isMember("hosts") && config["hosts"].isArray()) { + const auto hostname = Glib::get_host_name(); + + if (!std::ranges::any_of(config["hosts"].begin(), config["hosts"].end(), + [&](const auto& h) { return h.asString() == hostname; })) + return false; + } + return true; +} +} // namespace waybar::util