diff options
author | Ian Fan <ianfan0@gmail.com> | 2018-10-12 21:14:52 +0100 |
---|---|---|
committer | Ian Fan <ianfan0@gmail.com> | 2018-10-14 13:33:12 +0100 |
commit | 2f1fd8072673b1824f37759e14f5388d7a87fb5c (patch) | |
tree | 948b7912a2341c2d0b903258b444173b3fd4d1f3 /swaybar/ipc.c | |
parent | swaybar: handle mode/hidden_state changes (diff) | |
download | sway-2f1fd8072673b1824f37759e14f5388d7a87fb5c.tar.gz sway-2f1fd8072673b1824f37759e14f5388d7a87fb5c.tar.zst sway-2f1fd8072673b1824f37759e14f5388d7a87fb5c.zip |
swaybar: show hidden bar on key event
Since wayland does not currently allow swaybar to create global
keybinds, this is handled within sway and sent to the bar using a custom
event, so as not to pollute existing events, called bar_state_update.
Diffstat (limited to 'swaybar/ipc.c')
-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; |