aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Brian Ashworth <bosrsf04@gmail.com>2019-04-24 00:25:49 -0400
committerLibravatar Drew DeVault <sir@cmpwn.com>2019-04-24 07:14:48 -0600
commit583ceff6f6129b5c569ad1eb499cffc526a14d1c (patch)
treebffca87361c63ccf1227436a7437b5ea4d5a0902
parentUpdate for wlroots#1660 (diff)
downloadsway-583ceff6f6129b5c569ad1eb499cffc526a14d1c.tar.gz
sway-583ceff6f6129b5c569ad1eb499cffc526a14d1c.tar.zst
sway-583ceff6f6129b5c569ad1eb499cffc526a14d1c.zip
swaybar: hide mode visibility improvements
This allows swaybar to become visible when the mode changes (to any mode other than the default). swaybar will be hidden again when the modifier is pressed and released or when switching back to the default mode. This also applies the same logic to visible by urgency to hide swaybar when the modifier is pressed and released. These changes are to match i3's behavior.
-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;