aboutsummaryrefslogtreecommitdiffstats
path: root/swaybar/ipc.c
diff options
context:
space:
mode:
authorLibravatar Ian Fan <ianfan0@gmail.com>2018-10-12 21:14:52 +0100
committerLibravatar Ian Fan <ianfan0@gmail.com>2018-10-14 13:33:12 +0100
commit2f1fd8072673b1824f37759e14f5388d7a87fb5c (patch)
tree948b7912a2341c2d0b903258b444173b3fd4d1f3 /swaybar/ipc.c
parentswaybar: handle mode/hidden_state changes (diff)
downloadsway-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.c19
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
378static 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
378static bool handle_barconfig_update(struct swaybar *bar, 392static 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;