diff options
-rw-r--r-- | sway/ipc-json.c | 69 | ||||
-rw-r--r-- | sway/ipc-server.c | 8 |
2 files changed, 55 insertions, 22 deletions
diff --git a/sway/ipc-json.c b/sway/ipc-json.c index eab6399f..7c5f7304 100644 --- a/sway/ipc-json.c +++ b/sway/ipc-json.c | |||
@@ -66,19 +66,42 @@ static const char *ipc_json_get_output_transform(enum wl_output_transform transf | |||
66 | 66 | ||
67 | static void ipc_json_describe_output(struct sway_container *container, json_object *object) { | 67 | static void ipc_json_describe_output(struct sway_container *container, json_object *object) { |
68 | struct wlr_output *wlr_output = container->sway_output->wlr_output; | 68 | struct wlr_output *wlr_output = container->sway_output->wlr_output; |
69 | json_object_object_add(object, "type", json_object_new_string("output")); | 69 | json_object_object_add(object, "type", |
70 | json_object_object_add(object, "active", json_object_new_boolean(true)); | 70 | json_object_new_string("output")); |
71 | json_object_object_add(object, "primary", json_object_new_boolean(false)); | 71 | json_object_object_add(object, "active", |
72 | json_object_object_add(object, "layout", json_object_new_string("output")); | 72 | json_object_new_boolean(true)); |
73 | json_object_object_add(object, "make", json_object_new_string(wlr_output->make)); | 73 | json_object_object_add(object, "primary", |
74 | json_object_object_add(object, "model", json_object_new_string(wlr_output->model)); | 74 | json_object_new_boolean(false)); |
75 | json_object_object_add(object, "serial", json_object_new_string(wlr_output->serial)); | 75 | json_object_object_add(object, "layout", |
76 | json_object_object_add(object, "scale", json_object_new_double(wlr_output->scale)); | 76 | json_object_new_string("output")); |
77 | json_object_object_add(object, "refresh", json_object_new_int(wlr_output->refresh)); | 77 | json_object_object_add(object, "make", |
78 | json_object_new_string(wlr_output->make)); | ||
79 | json_object_object_add(object, "model", | ||
80 | json_object_new_string(wlr_output->model)); | ||
81 | json_object_object_add(object, "serial", | ||
82 | json_object_new_string(wlr_output->serial)); | ||
83 | json_object_object_add(object, "scale", | ||
84 | json_object_new_double(wlr_output->scale)); | ||
85 | json_object_object_add(object, "refresh", | ||
86 | json_object_new_int(wlr_output->refresh)); | ||
78 | json_object_object_add(object, "transform", | 87 | json_object_object_add(object, "transform", |
79 | json_object_new_string(ipc_json_get_output_transform(wlr_output->transform))); | 88 | json_object_new_string( |
80 | // TODO WLR need to set "current_workspace" to the currently focused | 89 | ipc_json_get_output_transform(wlr_output->transform))); |
81 | // workspace in a way that makes sense with multiseat | 90 | |
91 | struct sway_seat *seat = sway_input_manager_get_default_seat(input_manager); | ||
92 | const char *ws = NULL; | ||
93 | if (seat) { | ||
94 | struct sway_container *focus = | ||
95 | sway_seat_get_focus_inactive(seat, container); | ||
96 | if (focus && focus->type != C_WORKSPACE) { | ||
97 | focus = container_parent(focus, C_WORKSPACE); | ||
98 | } | ||
99 | if (focus) { | ||
100 | ws = focus->name; | ||
101 | } | ||
102 | } | ||
103 | json_object_object_add(object, "current_workspace", | ||
104 | json_object_new_string(ws)); | ||
82 | 105 | ||
83 | json_object *modes_array = json_object_new_array(); | 106 | json_object *modes_array = json_object_new_array(); |
84 | struct wlr_output_mode *mode; | 107 | struct wlr_output_mode *mode; |
@@ -95,16 +118,20 @@ static void ipc_json_describe_output(struct sway_container *container, json_obje | |||
95 | json_object_object_add(object, "modes", modes_array); | 118 | json_object_object_add(object, "modes", modes_array); |
96 | } | 119 | } |
97 | 120 | ||
98 | static void ipc_json_describe_workspace(struct sway_container *workspace, json_object *object) { | 121 | static void ipc_json_describe_workspace(struct sway_container *workspace, |
99 | int num = (isdigit(workspace->name[0])) ? atoi(workspace->name) : -1; | 122 | json_object *object) { |
123 | int num = isdigit(workspace->name[0]) ? atoi(workspace->name) : -1; | ||
100 | 124 | ||
101 | json_object_object_add(object, "num", json_object_new_int(num)); | 125 | json_object_object_add(object, "num", json_object_new_int(num)); |
102 | json_object_object_add(object, "output", (workspace->parent) ? json_object_new_string(workspace->parent->name) : NULL); | 126 | json_object_object_add(object, "output", workspace->parent ? |
127 | json_object_new_string(workspace->parent->name) : NULL); | ||
103 | json_object_object_add(object, "type", json_object_new_string("workspace")); | 128 | json_object_object_add(object, "type", json_object_new_string("workspace")); |
129 | json_object_object_add(object, "urgent", json_object_new_boolean(false)); | ||
104 | } | 130 | } |
105 | 131 | ||
106 | static void ipc_json_describe_view(struct sway_container *c, json_object *object) { | 132 | static void ipc_json_describe_view(struct sway_container *c, json_object *object) { |
107 | json_object_object_add(object, "name", (c->name) ? json_object_new_string(c->name) : NULL); | 133 | json_object_object_add(object, "name", |
134 | c->name ? json_object_new_string(c->name) : NULL); | ||
108 | } | 135 | } |
109 | 136 | ||
110 | json_object *ipc_json_describe_container(struct sway_container *c) { | 137 | json_object *ipc_json_describe_container(struct sway_container *c) { |
@@ -118,28 +145,26 @@ json_object *ipc_json_describe_container(struct sway_container *c) { | |||
118 | json_object *object = json_object_new_object(); | 145 | json_object *object = json_object_new_object(); |
119 | 146 | ||
120 | json_object_object_add(object, "id", json_object_new_int((int)c->id)); | 147 | json_object_object_add(object, "id", json_object_new_int((int)c->id)); |
121 | json_object_object_add(object, "name", (c->name) ? json_object_new_string(c->name) : NULL); | 148 | json_object_object_add(object, "name", |
149 | c->name ? json_object_new_string(c->name) : NULL); | ||
122 | json_object_object_add(object, "rect", ipc_json_create_rect(c)); | 150 | json_object_object_add(object, "rect", ipc_json_create_rect(c)); |
123 | json_object_object_add(object, "focused", json_object_new_boolean(focused)); | 151 | json_object_object_add(object, "focused", |
152 | json_object_new_boolean(focused)); | ||
124 | 153 | ||
125 | switch (c->type) { | 154 | switch (c->type) { |
126 | case C_ROOT: | 155 | case C_ROOT: |
127 | ipc_json_describe_root(c, object); | 156 | ipc_json_describe_root(c, object); |
128 | break; | 157 | break; |
129 | |||
130 | case C_OUTPUT: | 158 | case C_OUTPUT: |
131 | ipc_json_describe_output(c, object); | 159 | ipc_json_describe_output(c, object); |
132 | break; | 160 | break; |
133 | |||
134 | case C_CONTAINER: | 161 | case C_CONTAINER: |
135 | case C_VIEW: | 162 | case C_VIEW: |
136 | ipc_json_describe_view(c, object); | 163 | ipc_json_describe_view(c, object); |
137 | break; | 164 | break; |
138 | |||
139 | case C_WORKSPACE: | 165 | case C_WORKSPACE: |
140 | ipc_json_describe_workspace(c, object); | 166 | ipc_json_describe_workspace(c, object); |
141 | break; | 167 | break; |
142 | |||
143 | case C_TYPES: | 168 | case C_TYPES: |
144 | default: | 169 | default: |
145 | break; | 170 | break; |
diff --git a/sway/ipc-server.c b/sway/ipc-server.c index 394161af..f1854bcc 100644 --- a/sway/ipc-server.c +++ b/sway/ipc-server.c | |||
@@ -398,6 +398,14 @@ static void ipc_get_workspaces_callback(struct sway_container *workspace, | |||
398 | json_object_object_add(workspace_json, "focused", | 398 | json_object_object_add(workspace_json, "focused", |
399 | json_object_new_boolean(focused)); | 399 | json_object_new_boolean(focused)); |
400 | json_object_array_add((json_object *)data, workspace_json); | 400 | json_object_array_add((json_object *)data, workspace_json); |
401 | |||
402 | focused_ws = sway_seat_get_focus_inactive(seat, workspace->parent); | ||
403 | if (focused_ws->type != C_WORKSPACE) { | ||
404 | focused_ws = container_parent(focused_ws, C_WORKSPACE); | ||
405 | } | ||
406 | bool visible = workspace == focused_ws; | ||
407 | json_object_object_add(workspace_json, "visible", | ||
408 | json_object_new_boolean(visible)); | ||
401 | } | 409 | } |
402 | 410 | ||
403 | void ipc_client_handle_command(struct ipc_client *client) { | 411 | void ipc_client_handle_command(struct ipc_client *client) { |