diff options
Diffstat (limited to 'swaybar')
-rw-r--r-- | swaybar/ipc.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/swaybar/ipc.c b/swaybar/ipc.c index 56379fdb..c7fdffae 100644 --- a/swaybar/ipc.c +++ b/swaybar/ipc.c | |||
@@ -367,7 +367,7 @@ bool ipc_initialize(struct swaybar *bar) { | |||
367 | struct swaybar_config *config = bar->config; | 367 | struct swaybar_config *config = bar->config; |
368 | char subscribe[128]; // suitably large buffer | 368 | char subscribe[128]; // suitably large buffer |
369 | len = snprintf(subscribe, 128, | 369 | len = snprintf(subscribe, 128, |
370 | "[ \"barconfig_update\" %s %s ]", | 370 | "[ \"barconfig_update\" , \"bar_state_update\" %s %s ]", |
371 | config->binding_mode_indicator ? ", \"mode\"" : "", | 371 | config->binding_mode_indicator ? ", \"mode\"" : "", |
372 | config->workspace_buttons ? ", \"workspace\"" : ""); | 372 | config->workspace_buttons ? ", \"workspace\"" : ""); |
373 | free(ipc_single_command(bar->ipc_event_socketfd, | 373 | free(ipc_single_command(bar->ipc_event_socketfd, |
@@ -375,6 +375,20 @@ bool ipc_initialize(struct swaybar *bar) { | |||
375 | return true; | 375 | return true; |
376 | } | 376 | } |
377 | 377 | ||
378 | static bool handle_bar_state_update(struct swaybar *bar, json_object *event) { | ||
379 | json_object *json_id; | ||
380 | json_object_object_get_ex(event, "id", &json_id); | ||
381 | const char *id = json_object_get_string(json_id); | ||
382 | if (strcmp(id, bar->id) != 0) { | ||
383 | return false; | ||
384 | } | ||
385 | |||
386 | json_object *visible_by_modifier; | ||
387 | json_object_object_get_ex(event, "visible_by_modifier", &visible_by_modifier); | ||
388 | bar->visible_by_modifier = json_object_get_boolean(visible_by_modifier); | ||
389 | return determine_bar_visibility(bar, false); | ||
390 | } | ||
391 | |||
378 | static bool handle_barconfig_update(struct swaybar *bar, | 392 | static bool handle_barconfig_update(struct swaybar *bar, |
379 | json_object *json_config) { | 393 | json_object *json_config) { |
380 | json_object *json_id; | 394 | json_object *json_id; |
@@ -444,6 +458,9 @@ bool handle_ipc_readable(struct swaybar *bar) { | |||
444 | case IPC_EVENT_BARCONFIG_UPDATE: | 458 | case IPC_EVENT_BARCONFIG_UPDATE: |
445 | bar_is_dirty = handle_barconfig_update(bar, result); | 459 | bar_is_dirty = handle_barconfig_update(bar, result); |
446 | break; | 460 | break; |
461 | case IPC_EVENT_BAR_STATE_UPDATE: | ||
462 | bar_is_dirty = handle_bar_state_update(bar, result); | ||
463 | break; | ||
447 | default: | 464 | default: |
448 | bar_is_dirty = false; | 465 | bar_is_dirty = false; |
449 | break; | 466 | break; |