feat: Module Visibility ()

Modules can now also be shown and hidden using ipc commands:

    $ polybar-msg [-p PID] cmd hide.mymodule # Hides module mymodule
    $ polybar-msg [-p PID] cmd show.mymodule # Shows module mymodule
    $ polybar-msg [-p PID] cmd toggle.mymodule # Toggles visibility of mymodule

* Hopefully implement visibility checking

* Implement hide command

* Implement `show` and `toggle` commands

* Refactor and add some logging

* Run style checks and update CHANGELOG

* Get around unused parameter warnings

* Change `set_visible` to return nothing

* Make errors more informative

Co-authored-by: Patrick Ziegler <p.ziegler96@gmail.com>

* Update bar when changing module visibility

- Called in the module to maintain dependence on the signal emitter
- Update CHANGELOG to make changes more verbose

* wrong var

* Update include/modules/unsupported.hpp

Co-authored-by: Patrick Ziegler <p.ziegler96@gmail.com>

Co-authored-by: Patrick Ziegler <p.ziegler96@gmail.com>
This commit is contained in:
Nolan Prochnau 2020-12-27 10:05:26 -05:00 committed by GitHub
parent b49f325e1e
commit 8e46e54cb3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 60 additions and 1 deletions
src/components

View file

@ -530,6 +530,25 @@ bool controller::forward_action(const actions_util::action& action_triple) {
return true;
}
void controller::switch_module_visibility(string module_name_raw, int visible) {
for (auto&& mod : m_modules) {
if (mod->name_raw() != module_name_raw)
continue;
if (visible == 0) {
mod->set_visible(false);
} else if (visible == 1) {
mod->set_visible(true);
} else if (visible == 2) {
mod->set_visible(!mod->visible());
}
return;
}
m_log.err("controller: Module '%s' not found for visibility change (state=%s)", module_name_raw, visible ? "shown" : "hidden");
}
/**
* Process stored input data
*/
@ -600,7 +619,7 @@ bool controller::process_update(bool force) {
}
for (const auto& module : block.second) {
if (!module->running()) {
if (!module->running() || !module->visible()) {
continue;
}
@ -833,6 +852,10 @@ bool controller::on(const signals::ipc::command& evt) {
return false;
}
string hide_module{"hide."};
string show_module{"show."};
string toggle_module{"toggle."};
if (command == "quit") {
enqueue(make_quit_evt(false));
} else if (command == "restart") {
@ -843,6 +866,12 @@ bool controller::on(const signals::ipc::command& evt) {
m_bar->show();
} else if (command == "toggle") {
m_bar->toggle();
} else if (command.find(hide_module) == 0) {
switch_module_visibility(command.substr(hide_module.length()), 0);
} else if (command.find(show_module) == 0) {
switch_module_visibility(command.substr(show_module.length()), 1);
} else if (command.find(toggle_module) == 0) {
switch_module_visibility(command.substr(toggle_module.length()), 2);
} else {
m_log.warn("\"%s\" is not a valid ipc command", command);
}