diff options
author | Ian Fan <ianfan0@gmail.com> | 2018-12-07 12:40:45 +0000 |
---|---|---|
committer | Ian Fan <ianfan0@gmail.com> | 2018-12-31 20:40:18 +0000 |
commit | 2fd41fe9c85a866173fc2770ed7669871258bced (patch) | |
tree | b86d174e5bc5827bd4fdedf8e6e6aee6fb8fc929 /swaybar/tray/item.c | |
parent | swaybar: implement mouse events for tray (diff) | |
download | sway-2fd41fe9c85a866173fc2770ed7669871258bced.tar.gz sway-2fd41fe9c85a866173fc2770ed7669871258bced.tar.zst sway-2fd41fe9c85a866173fc2770ed7669871258bced.zip |
swaybar: set bar dirty on SNI event
Diffstat (limited to 'swaybar/tray/item.c')
-rw-r--r-- | swaybar/tray/item.c | 13 |
1 files changed, 13 insertions, 0 deletions
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 | ||
27 | static 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 | |||
27 | static int read_pixmap(sd_bus_message *msg, struct swaybar_sni *sni, | 34 | static 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 | } | ||
127 | cleanup: | 139 | cleanup: |
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 | } |