From c72940837c24b5df99c95667befe2e4e5c64575a Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 11 May 2018 23:51:47 +1000 Subject: Implement IPC get_seats command --- swaymsg/main.c | 37 ++++++++++++++++++++++++++++++++++++- swaymsg/swaymsg.1.txt | 3 +++ 2 files changed, 39 insertions(+), 1 deletion(-) (limited to 'swaymsg') diff --git a/swaymsg/main.c b/swaymsg/main.c index 7e3622d9..89af7345 100644 --- a/swaymsg/main.c +++ b/swaymsg/main.c @@ -106,6 +106,35 @@ static void pretty_print_input(json_object *i) { json_object_get_int(vendor)); } +static void pretty_print_seat(json_object *i) { + json_object *name, *capabilities, *devices; + json_object_object_get_ex(i, "name", &name); + json_object_object_get_ex(i, "capabilities", &capabilities); + json_object_object_get_ex(i, "devices", &devices); + + const char *fmt = + "Seat: %s\n" + " Capabilities: %d\n"; + + printf(fmt, json_object_get_string(name), + json_object_get_int(capabilities)); + + size_t devices_len = json_object_array_length(devices); + if (devices_len > 0) { + printf(" Devices:\n"); + for (size_t i = 0; i < devices_len; ++i) { + json_object *device = json_object_array_get_idx(devices, i); + + json_object *device_name; + json_object_object_get_ex(device, "name", &device_name); + + printf(" %s\n", json_object_get_string(device_name)); + } + } + + printf("\n"); +} + static void pretty_print_output(json_object *o) { json_object *name, *rect, *focused, *active, *ws; json_object_object_get_ex(o, "name", &name); @@ -211,7 +240,8 @@ static void pretty_print_clipboard(json_object *v) { static void pretty_print(int type, json_object *resp) { if (type != IPC_COMMAND && type != IPC_GET_WORKSPACES && type != IPC_GET_INPUTS && type != IPC_GET_OUTPUTS && - type != IPC_GET_VERSION && type != IPC_GET_CLIPBOARD) { + type != IPC_GET_VERSION && type != IPC_GET_CLIPBOARD && + type != IPC_GET_SEATS) { printf("%s\n", json_object_to_json_string_ext(resp, JSON_C_TO_STRING_PRETTY | JSON_C_TO_STRING_SPACED)); return; @@ -244,6 +274,9 @@ static void pretty_print(int type, json_object *resp) { case IPC_GET_OUTPUTS: pretty_print_output(obj); break; + case IPC_GET_SEATS: + pretty_print_seat(obj); + break; } } } @@ -324,6 +357,8 @@ int main(int argc, char **argv) { type = IPC_COMMAND; } else if (strcasecmp(cmdtype, "get_workspaces") == 0) { type = IPC_GET_WORKSPACES; + } else if (strcasecmp(cmdtype, "get_seats") == 0) { + type = IPC_GET_SEATS; } else if (strcasecmp(cmdtype, "get_inputs") == 0) { type = IPC_GET_INPUTS; } else if (strcasecmp(cmdtype, "get_outputs") == 0) { diff --git a/swaymsg/swaymsg.1.txt b/swaymsg/swaymsg.1.txt index abc517c8..52209b12 100644 --- a/swaymsg/swaymsg.1.txt +++ b/swaymsg/swaymsg.1.txt @@ -48,6 +48,9 @@ IPC Message Types *get_workspaces*:: Gets a JSON-encoded list of workspaces and their status. +*get_seats*:: + Gets a JSON-encoded list of current seats. + *get_inputs*:: Gets a JSON-encoded list of current inputs. -- cgit v1.2.3-54-g00ecf