aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/swaybar/bar.h1
-rw-r--r--swaybar/bar.c3
-rw-r--r--swaybar/ipc.c9
3 files changed, 12 insertions, 1 deletions
diff --git a/include/swaybar/bar.h b/include/swaybar/bar.h
index 031993b5..84619237 100644
--- a/include/swaybar/bar.h
+++ b/include/swaybar/bar.h
@@ -23,6 +23,7 @@ struct swaybar {
23 // only relevant when bar is in "hide" mode 23 // only relevant when bar is in "hide" mode
24 bool visible_by_modifier; 24 bool visible_by_modifier;
25 bool visible_by_urgency; 25 bool visible_by_urgency;
26 bool visible_by_mode;
26 bool visible; 27 bool visible;
27 28
28 struct wl_display *display; 29 struct wl_display *display;
diff --git a/swaybar/bar.c b/swaybar/bar.c
index ca7cd88c..a95464f5 100644
--- a/swaybar/bar.c
+++ b/swaybar/bar.c
@@ -148,7 +148,8 @@ bool determine_bar_visibility(struct swaybar *bar, bool moving_layer) {
148 struct swaybar_config *config = bar->config; 148 struct swaybar_config *config = bar->config;
149 bool visible = !(strcmp(config->mode, "invisible") == 0 || 149 bool visible = !(strcmp(config->mode, "invisible") == 0 ||
150 (strcmp(config->mode, config->hidden_state) == 0 // both "hide" 150 (strcmp(config->mode, config->hidden_state) == 0 // both "hide"
151 && !bar->visible_by_modifier && !bar->visible_by_urgency)); 151 && !bar->visible_by_modifier && !bar->visible_by_urgency
152 && !bar->visible_by_mode));
152 153
153 // Create/destroy layer surfaces as needed 154 // Create/destroy layer surfaces as needed
154 struct swaybar_output *output; 155 struct swaybar_output *output;
diff --git a/swaybar/ipc.c b/swaybar/ipc.c
index 1cc55b43..a096f01a 100644
--- a/swaybar/ipc.c
+++ b/swaybar/ipc.c
@@ -499,6 +499,13 @@ static bool handle_bar_state_update(struct swaybar *bar, json_object *event) {
499 json_object *visible_by_modifier; 499 json_object *visible_by_modifier;
500 json_object_object_get_ex(event, "visible_by_modifier", &visible_by_modifier); 500 json_object_object_get_ex(event, "visible_by_modifier", &visible_by_modifier);
501 bar->visible_by_modifier = json_object_get_boolean(visible_by_modifier); 501 bar->visible_by_modifier = json_object_get_boolean(visible_by_modifier);
502 if (bar->visible_by_modifier) {
503 // If the bar is visible by modifier, clear both visible by mode and
504 // urgency as modifier has precedence and the bar should be hidden
505 // again when it is no longer visible by modifier.
506 bar->visible_by_mode = false;
507 bar->visible_by_urgency = false;
508 }
502 return determine_bar_visibility(bar, false); 509 return determine_bar_visibility(bar, false);
503} 510}
504 511
@@ -578,6 +585,8 @@ bool handle_ipc_readable(struct swaybar *bar) {
578 const char *change = json_object_get_string(json_change); 585 const char *change = json_object_get_string(json_change);
579 free(bar->mode); 586 free(bar->mode);
580 bar->mode = strcmp(change, "default") != 0 ? strdup(change) : NULL; 587 bar->mode = strcmp(change, "default") != 0 ? strdup(change) : NULL;
588 bar->visible_by_mode = bar->mode != NULL;
589 determine_bar_visibility(bar, false);
581 } else { 590 } else {
582 sway_log(SWAY_ERROR, "failed to parse response"); 591 sway_log(SWAY_ERROR, "failed to parse response");
583 bar_is_dirty = false; 592 bar_is_dirty = false;