mirror of
https://github.com/rad4day/Waybar.git
synced 2023-12-21 10:22:59 +01:00
Add reset behaviour of modifier key
Add an option to change the behaviour of the modifier key to reset the visibility.
This commit is contained in:
parent
5a0e42cc76
commit
7763d50691
@ -44,6 +44,7 @@ class BarIpcClient {
|
|||||||
Ipc ipc_;
|
Ipc ipc_;
|
||||||
|
|
||||||
swaybar_config bar_config_;
|
swaybar_config bar_config_;
|
||||||
|
std::string modifier_reset_;
|
||||||
bool visible_by_mode_ = false;
|
bool visible_by_mode_ = false;
|
||||||
bool visible_by_modifier_ = false;
|
bool visible_by_modifier_ = false;
|
||||||
bool visible_by_urgency_ = false;
|
bool visible_by_urgency_ = false;
|
||||||
|
@ -77,6 +77,13 @@ Also a minimal example configuration can be found on the at the bottom of this m
|
|||||||
Selects one of the preconfigured display modes. This is an equivalent of the sway-bar(5) *mode* command and supports the same values: *dock*, *hide*, *invisible*, *overlay*. ++
|
Selects one of the preconfigured display modes. This is an equivalent of the sway-bar(5) *mode* command and supports the same values: *dock*, *hide*, *invisible*, *overlay*. ++
|
||||||
Note: *hide* and *invisible* modes may be not as useful without Sway IPC.
|
Note: *hide* and *invisible* modes may be not as useful without Sway IPC.
|
||||||
|
|
||||||
|
modifier-reset ++
|
||||||
|
typeof: string ++
|
||||||
|
default: *press*
|
||||||
|
Defines the timing of modifier key to reset the bar visibility.
|
||||||
|
To reset the visibility of the bar with the press of the modifier key use *press*.
|
||||||
|
Use *release* to reset the visibility upon the release of the modifier key and only if no other action happened while the key was pressed. This prevents hiding the bar when the modifier is used to switch a workspace, change binding mode or start a keybinding.
|
||||||
|
|
||||||
*exclusive* ++
|
*exclusive* ++
|
||||||
typeof: bool ++
|
typeof: bool ++
|
||||||
default: *true* ++
|
default: *true* ++
|
||||||
|
@ -37,6 +37,8 @@ BarIpcClient::BarIpcClient(waybar::Bar& bar) : bar_{bar} {
|
|||||||
subscribe_events.append("binding");
|
subscribe_events.append("binding");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
modifier_reset_ = bar.config.get("modifier-reset", "press").asString();
|
||||||
|
|
||||||
signal_config_.connect(sigc::mem_fun(*this, &BarIpcClient::onConfigUpdate));
|
signal_config_.connect(sigc::mem_fun(*this, &BarIpcClient::onConfigUpdate));
|
||||||
signal_visible_.connect(sigc::mem_fun(*this, &BarIpcClient::onVisibilityUpdate));
|
signal_visible_.connect(sigc::mem_fun(*this, &BarIpcClient::onVisibilityUpdate));
|
||||||
signal_urgency_.connect(sigc::mem_fun(*this, &BarIpcClient::onUrgencyUpdate));
|
signal_urgency_.connect(sigc::mem_fun(*this, &BarIpcClient::onUrgencyUpdate));
|
||||||
@ -188,10 +190,12 @@ void BarIpcClient::onVisibilityUpdate(bool visible_by_modifier) {
|
|||||||
if (visible_by_modifier) {
|
if (visible_by_modifier) {
|
||||||
modifier_no_action_ = true;
|
modifier_no_action_ = true;
|
||||||
}
|
}
|
||||||
if (!visible_by_modifier_ && modifier_no_action_) {
|
|
||||||
// Modifier key was pressed and released without a different action.
|
// Clear on either press or release depending on bar_.bar_config_.action value.
|
||||||
// This signals an acknowledgment and should hide the bar again.
|
// For the check on release, make sure that the modifier key was not used for another action.
|
||||||
// Hide the bar and clear the urgency flag.
|
if (((modifier_reset_ == "press" && visible_by_modifier_) ||
|
||||||
|
(modifier_reset_ == "release" && !visible_by_modifier_ && modifier_no_action_))) {
|
||||||
|
// Clear the flags to hide the bar.
|
||||||
visible_by_urgency_ = false;
|
visible_by_urgency_ = false;
|
||||||
visible_by_mode_ = false;
|
visible_by_mode_ = false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user