* Add toggle_visible action * Add set_visible and set_invisible actions * Rename toggle_visible method to match `action_toggle_visible` -> `action_toggle_visibility` Matches with `EVENT_TOGGLE_VISIBILITY` * Update CHANGELOG * Revert #2320 IPC commands IPC commands are no longer necessary now that the actions are implemented. Changed some method permissions as well to reflect this. * Add logging and change action names - `module_toggle` - `module_show` - `module_hide` Delineate common actions to all modules with a `module_` prefix (for future actions too) * Update documentation
This commit is contained in:
parent
dcd33057fd
commit
06932007a0
7 changed files with 53 additions and 46 deletions
|
@ -76,12 +76,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
([`#316`](https://github.com/polybar/polybar/issues/316))
|
([`#316`](https://github.com/polybar/polybar/issues/316))
|
||||||
- Added .ini extension check to the default config search.
|
- Added .ini extension check to the default config search.
|
||||||
([`#2323`](https://github.com/polybar/polybar/issues/2323))
|
([`#2323`](https://github.com/polybar/polybar/issues/2323))
|
||||||
- IPC commands to change visibility of modules
|
|
||||||
(`hide.<name>`, `show.<name>`, and `toggle.<name>`)
|
|
||||||
([`#2108`](https://github.com/polybar/polybar/issues/2108))
|
|
||||||
- Config option to hide a certain module
|
- Config option to hide a certain module
|
||||||
(`hidden = false`)
|
(`hidden = false`)
|
||||||
([`#2108`](https://github.com/polybar/polybar/issues/2108))
|
([`#2108`](https://github.com/polybar/polybar/issues/2108))
|
||||||
|
- Actions to control visibility of modules
|
||||||
|
(`module_toggle`, `module_show`, and `module_hide`)
|
||||||
|
([`#2108`](https://github.com/polybar/polybar/issues/2108))
|
||||||
- `internal/xworkspaces`: Make the urgent hint persistent
|
- `internal/xworkspaces`: Make the urgent hint persistent
|
||||||
([`#1081`](https://github.com/polybar/polybar/issues/1081))
|
([`#1081`](https://github.com/polybar/polybar/issues/1081))
|
||||||
- `internal/network`: `interface-type` may be used in place of `interface` to
|
- `internal/network`: `interface-type` may be used in place of `interface` to
|
||||||
|
|
|
@ -121,6 +121,19 @@ Available Actions
|
||||||
The following modules have actions available. Most of them are already used by
|
The following modules have actions available. Most of them are already used by
|
||||||
the module by default for click and scroll events.
|
the module by default for click and scroll events.
|
||||||
|
|
||||||
|
All Modules
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
These actions are available to all modules and are prefixed with ``module_``.
|
||||||
|
|
||||||
|
:``module_show``, ``module_hide``:
|
||||||
|
Shows/Hides a module. The module is still running in the background when
|
||||||
|
hidden, it is just not drawn. The starting state can be configured with the
|
||||||
|
`hidden` configuration option.
|
||||||
|
|
||||||
|
:``module_toggle``:
|
||||||
|
Toggles the visibility of a module.
|
||||||
|
|
||||||
internal/date
|
internal/date
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
|
|
@ -76,8 +76,6 @@ class controller
|
||||||
bool forward_action(const actions_util::action& cmd);
|
bool forward_action(const actions_util::action& cmd);
|
||||||
bool try_forward_legacy_action(const string& cmd);
|
bool try_forward_legacy_action(const string& cmd);
|
||||||
|
|
||||||
void switch_module_visibility(string module_name_raw, int visible);
|
|
||||||
|
|
||||||
connection& m_connection;
|
connection& m_connection;
|
||||||
signal_emitter& m_sig;
|
signal_emitter& m_sig;
|
||||||
const logger& m_log;
|
const logger& m_log;
|
||||||
|
|
|
@ -118,7 +118,6 @@ namespace modules {
|
||||||
virtual string name() const = 0;
|
virtual string name() const = 0;
|
||||||
virtual bool running() const = 0;
|
virtual bool running() const = 0;
|
||||||
virtual bool visible() const = 0;
|
virtual bool visible() const = 0;
|
||||||
virtual void set_visible(bool value) = 0;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle action, possibly with data attached
|
* Handle action, possibly with data attached
|
||||||
|
@ -145,6 +144,10 @@ namespace modules {
|
||||||
module(const bar_settings bar, string name);
|
module(const bar_settings bar, string name);
|
||||||
~module() noexcept;
|
~module() noexcept;
|
||||||
|
|
||||||
|
static constexpr auto EVENT_MODULE_TOGGLE = "module_toggle";
|
||||||
|
static constexpr auto EVENT_MODULE_SHOW = "module_show";
|
||||||
|
static constexpr auto EVENT_MODULE_HIDE = "module_hide";
|
||||||
|
|
||||||
string type() const override;
|
string type() const override;
|
||||||
|
|
||||||
string name_raw() const override;
|
string name_raw() const override;
|
||||||
|
@ -152,7 +155,6 @@ namespace modules {
|
||||||
bool running() const override;
|
bool running() const override;
|
||||||
|
|
||||||
bool visible() const override;
|
bool visible() const override;
|
||||||
void set_visible(bool value) override;
|
|
||||||
|
|
||||||
void stop() override;
|
void stop() override;
|
||||||
void halt(string error_message) override;
|
void halt(string error_message) override;
|
||||||
|
@ -171,6 +173,12 @@ namespace modules {
|
||||||
string get_format() const;
|
string get_format() const;
|
||||||
string get_output();
|
string get_output();
|
||||||
|
|
||||||
|
void set_visible(bool value);
|
||||||
|
|
||||||
|
void action_module_toggle();
|
||||||
|
void action_module_show();
|
||||||
|
void action_module_hide();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
signal_emitter& m_sig;
|
signal_emitter& m_sig;
|
||||||
const bar_settings m_bar;
|
const bar_settings m_bar;
|
||||||
|
|
|
@ -26,7 +26,11 @@ namespace modules {
|
||||||
, m_builder(make_unique<builder>(bar))
|
, m_builder(make_unique<builder>(bar))
|
||||||
, m_formatter(make_unique<module_formatter>(m_conf, m_name))
|
, m_formatter(make_unique<module_formatter>(m_conf, m_name))
|
||||||
, m_handle_events(m_conf.get(m_name, "handle-events", true))
|
, m_handle_events(m_conf.get(m_name, "handle-events", true))
|
||||||
, m_visible(!m_conf.get(m_name, "hidden", false)) {}
|
, m_visible(!m_conf.get(m_name, "hidden", false)) {
|
||||||
|
m_router->register_action(EVENT_MODULE_TOGGLE, &module<Impl>::action_module_toggle);
|
||||||
|
m_router->register_action(EVENT_MODULE_SHOW, &module<Impl>::action_module_show);
|
||||||
|
m_router->register_action(EVENT_MODULE_HIDE, &module<Impl>::action_module_hide);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Impl>
|
template <typename Impl>
|
||||||
module<Impl>::~module() noexcept {
|
module<Impl>::~module() noexcept {
|
||||||
|
@ -67,13 +71,6 @@ namespace modules {
|
||||||
return static_cast<bool>(m_visible);
|
return static_cast<bool>(m_visible);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Impl>
|
|
||||||
void module<Impl>::set_visible(bool value) {
|
|
||||||
m_log.info("%s: Visibility changed (state=%s)", m_name, value ? "shown" : "hidden");
|
|
||||||
m_visible = value;
|
|
||||||
broadcast();
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Impl>
|
template <typename Impl>
|
||||||
void module<Impl>::stop() {
|
void module<Impl>::stop() {
|
||||||
if (!static_cast<bool>(m_enabled)) {
|
if (!static_cast<bool>(m_enabled)) {
|
||||||
|
@ -231,6 +228,28 @@ namespace modules {
|
||||||
return format->decorate(&*m_builder, m_builder->flush());
|
return format->decorate(&*m_builder, m_builder->flush());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Impl>
|
||||||
|
void module<Impl>::set_visible(bool value) {
|
||||||
|
m_log.notice("%s: Visibility changed (state=%s)", m_name, value ? "shown" : "hidden");
|
||||||
|
m_visible = value;
|
||||||
|
broadcast();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Impl>
|
||||||
|
void module<Impl>::action_module_toggle() {
|
||||||
|
set_visible(!m_visible);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Impl>
|
||||||
|
void module<Impl>::action_module_show() {
|
||||||
|
set_visible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Impl>
|
||||||
|
void module<Impl>::action_module_hide() {
|
||||||
|
set_visible(false);
|
||||||
|
}
|
||||||
|
|
||||||
// }}}
|
// }}}
|
||||||
} // namespace modules
|
} // namespace modules
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,6 @@ namespace modules {
|
||||||
bool visible() const override { \
|
bool visible() const override { \
|
||||||
return false; \
|
return false; \
|
||||||
} \
|
} \
|
||||||
void set_visible(bool) override {} \
|
|
||||||
void start() override {} \
|
void start() override {} \
|
||||||
void stop() override {} \
|
void stop() override {} \
|
||||||
void halt(string) override {} \
|
void halt(string) override {} \
|
||||||
|
|
|
@ -528,26 +528,6 @@ bool controller::forward_action(const actions_util::action& action_triple) {
|
||||||
return true;
|
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
|
* Process stored input data
|
||||||
*/
|
*/
|
||||||
|
@ -839,10 +819,6 @@ bool controller::on(const signals::ipc::command& evt) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
string hide_module{"hide."};
|
|
||||||
string show_module{"show."};
|
|
||||||
string toggle_module{"toggle."};
|
|
||||||
|
|
||||||
if (command == "quit") {
|
if (command == "quit") {
|
||||||
enqueue(make_quit_evt(false));
|
enqueue(make_quit_evt(false));
|
||||||
} else if (command == "restart") {
|
} else if (command == "restart") {
|
||||||
|
@ -853,12 +829,6 @@ bool controller::on(const signals::ipc::command& evt) {
|
||||||
m_bar->show();
|
m_bar->show();
|
||||||
} else if (command == "toggle") {
|
} else if (command == "toggle") {
|
||||||
m_bar->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 {
|
} else {
|
||||||
m_log.warn("\"%s\" is not a valid ipc command", command);
|
m_log.warn("\"%s\" is not a valid ipc command", command);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue