aboutsummaryrefslogtreecommitdiffstats
path: root/swaybar
diff options
context:
space:
mode:
authorLibravatar Ian Fan <ianfan0@gmail.com>2018-12-07 12:40:45 +0000
committerLibravatar Ian Fan <ianfan0@gmail.com>2018-12-31 20:40:18 +0000
commit2fd41fe9c85a866173fc2770ed7669871258bced (patch)
treeb86d174e5bc5827bd4fdedf8e6e6aee6fb8fc929 /swaybar
parentswaybar: implement mouse events for tray (diff)
downloadsway-2fd41fe9c85a866173fc2770ed7669871258bced.tar.gz
sway-2fd41fe9c85a866173fc2770ed7669871258bced.tar.zst
sway-2fd41fe9c85a866173fc2770ed7669871258bced.zip
swaybar: set bar dirty on SNI event
Diffstat (limited to 'swaybar')
-rw-r--r--swaybar/bar.c2
-rw-r--r--swaybar/tray/host.c2
-rw-r--r--swaybar/tray/item.c13
3 files changed, 16 insertions, 1 deletions
diff --git a/swaybar/bar.c b/swaybar/bar.c
index ebb9bc12..4fd9c488 100644
--- a/swaybar/bar.c
+++ b/swaybar/bar.c
@@ -124,7 +124,7 @@ static void destroy_layer_surface(struct swaybar_output *output) {
124 output->frame_scheduled = false; 124 output->frame_scheduled = false;
125} 125}
126 126
127static void set_bar_dirty(struct swaybar *bar) { 127void set_bar_dirty(struct swaybar *bar) {
128 struct swaybar_output *output; 128 struct swaybar_output *output;
129 wl_list_for_each(output, &bar->outputs, link) { 129 wl_list_for_each(output, &bar->outputs, link) {
130 set_output_dirty(output); 130 set_output_dirty(output);
diff --git a/swaybar/tray/host.c b/swaybar/tray/host.c
index 8ab896d4..c5756f17 100644
--- a/swaybar/tray/host.c
+++ b/swaybar/tray/host.c
@@ -4,6 +4,7 @@
4#include <stdlib.h> 4#include <stdlib.h>
5#include <string.h> 5#include <string.h>
6#include <unistd.h> 6#include <unistd.h>
7#include "swaybar/bar.h"
7#include "swaybar/tray/host.h" 8#include "swaybar/tray/host.h"
8#include "swaybar/tray/item.h" 9#include "swaybar/tray/item.h"
9#include "swaybar/tray/tray.h" 10#include "swaybar/tray/tray.h"
@@ -56,6 +57,7 @@ static int handle_sni_unregistered(sd_bus_message *msg, void *data,
56 wlr_log(WLR_DEBUG, "Unregistering Status Notifier Item '%s'", id); 57 wlr_log(WLR_DEBUG, "Unregistering Status Notifier Item '%s'", id);
57 destroy_sni(tray->items->items[idx]); 58 destroy_sni(tray->items->items[idx]);
58 list_del(tray->items, idx); 59 list_del(tray->items, idx);
60 set_bar_dirty(tray->bar);
59 } 61 }
60 return ret; 62 return ret;
61} 63}
diff --git a/swaybar/tray/item.c b/swaybar/tray/item.c
index 450b6882..98d3dc1f 100644
--- a/swaybar/tray/item.c
+++ b/swaybar/tray/item.c
@@ -24,6 +24,13 @@ static bool sni_ready(struct swaybar_sni *sni) {
24 sni->icon_name || sni->icon_pixmap); 24 sni->icon_name || sni->icon_pixmap);
25} 25}
26 26
27static void set_sni_dirty(struct swaybar_sni *sni) {
28 if (sni_ready(sni)) {
29 sni->min_size = sni->max_size = 0; // invalidate previous icon
30 set_bar_dirty(sni->tray->bar);
31 }
32}
33
27static int read_pixmap(sd_bus_message *msg, struct swaybar_sni *sni, 34static int read_pixmap(sd_bus_message *msg, struct swaybar_sni *sni,
28 const char *prop, list_t **dest) { 35 const char *prop, list_t **dest) {
29 int ret = sd_bus_message_enter_container(msg, 'a', "(iiay)"); 36 int ret = sd_bus_message_enter_container(msg, 'a', "(iiay)");
@@ -124,6 +131,11 @@ static int get_property_callback(sd_bus_message *msg, void *data,
124 *str = strdup(*str); 131 *str = strdup(*str);
125 } 132 }
126 } 133 }
134
135 if (strcmp(prop, "Status") == 0 || (sni->status && (sni->status[0] == 'N' ?
136 prop[0] == 'A' : strncmp(prop, "Icon", 4) == 0))) {
137 set_sni_dirty(sni);
138 }
127cleanup: 139cleanup:
128 free(data); 140 free(data);
129 return ret; 141 return ret;
@@ -185,6 +197,7 @@ static int handle_new_status(sd_bus_message *msg, void *data, sd_bus_error *erro
185 free(sni->status); 197 free(sni->status);
186 sni->status = strdup(status); 198 sni->status = strdup(status);
187 wlr_log(WLR_DEBUG, "%s has new Status '%s'", sni->watcher_id, status); 199 wlr_log(WLR_DEBUG, "%s has new Status '%s'", sni->watcher_id, status);
200 set_sni_dirty(sni);
188 } 201 }
189 return ret; 202 return ret;
190} 203}