diff options
-rw-r--r-- | sway/input/keyboard.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/sway/input/keyboard.c b/sway/input/keyboard.c index 06ae99c4..5a965185 100644 --- a/sway/input/keyboard.c +++ b/sway/input/keyboard.c | |||
@@ -424,11 +424,18 @@ static int handle_keyboard_repeat(void *data) { | |||
424 | static void determine_bar_visibility(uint32_t modifiers) { | 424 | static void determine_bar_visibility(uint32_t modifiers) { |
425 | for (int i = 0; i < config->bars->length; ++i) { | 425 | for (int i = 0; i < config->bars->length; ++i) { |
426 | struct bar_config *bar = config->bars->items[i]; | 426 | struct bar_config *bar = config->bars->items[i]; |
427 | if (strcmp(bar->mode, bar->hidden_state) == 0) { // both are "hide" | 427 | if (bar->modifier == 0) { |
428 | bool should_be_visible = | 428 | continue; |
429 | bar->modifier != 0 && (~modifiers & bar->modifier) == 0; | 429 | } |
430 | if (bar->visible_by_modifier != should_be_visible) { | 430 | |
431 | bar->visible_by_modifier = should_be_visible; | 431 | bool vis_by_mod = (~modifiers & bar->modifier) == 0; |
432 | if (bar->visible_by_modifier != vis_by_mod) { | ||
433 | // If visible by modifier is set, send that it is no longer visible | ||
434 | // by modifier (regardless of bar mode and state). Otherwise, only | ||
435 | // send the visible by modifier status if mode and state are hide | ||
436 | if (bar->visible_by_modifier | ||
437 | || strcmp(bar->mode, bar->hidden_state) == 0) { | ||
438 | bar->visible_by_modifier = vis_by_mod; | ||
432 | ipc_event_bar_state_update(bar); | 439 | ipc_event_bar_state_update(bar); |
433 | } | 440 | } |
434 | } | 441 | } |