aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Tony Crisci <tony@dubstepdish.com>2018-04-05 17:33:35 -0400
committerLibravatar Tony Crisci <tony@dubstepdish.com>2018-04-05 17:33:35 -0400
commitbbfc5487bce982ad7ad782fe00e7ac7c8de4c9d2 (patch)
tree8559f475468407e37ea9ce31e2b90216596fadda
parentMerge pull request #1745 from swaywm/swaybar-hotplugging (diff)
downloadsway-bbfc5487bce982ad7ad782fe00e7ac7c8de4c9d2.tar.gz
sway-bbfc5487bce982ad7ad782fe00e7ac7c8de4c9d2.tar.zst
sway-bbfc5487bce982ad7ad782fe00e7ac7c8de4c9d2.zip
add layout to ipc containers
-rw-r--r--sway/ipc-json.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/sway/ipc-json.c b/sway/ipc-json.c
index 54824a36..44828a0d 100644
--- a/sway/ipc-json.c
+++ b/sway/ipc-json.c
@@ -11,6 +11,40 @@
11#include <wlr/types/wlr_output.h> 11#include <wlr/types/wlr_output.h>
12#include "wlr-layer-shell-unstable-v1-protocol.h" 12#include "wlr-layer-shell-unstable-v1-protocol.h"
13 13
14static const char *ipc_json_layout_description(enum sway_container_layout l) {
15 const char *layout;
16
17 switch (l) {
18 case L_VERT:
19 layout = "splitv";
20 break;
21
22 case L_HORIZ:
23 layout = "splith";
24 break;
25
26 case L_TABBED:
27 layout = "tabbed";
28 break;
29
30 case L_STACKED:
31 layout = "stacked";
32 break;
33
34 case L_FLOATING:
35 layout = "floating";
36 break;
37
38 case L_NONE: // fallthrough
39 case L_LAYOUTS: // fallthrough; this should never happen, I'm just trying to silence compiler warnings
40 default:
41 layout = "null";
42 break;
43 }
44
45 return layout;
46}
47
14json_object *ipc_json_get_version() { 48json_object *ipc_json_get_version() {
15 int major = 0, minor = 0, patch = 0; 49 int major = 0, minor = 0, patch = 0;
16 json_object *version = json_object_new_object(); 50 json_object *version = json_object_new_object();
@@ -116,6 +150,9 @@ static void ipc_json_describe_output(struct sway_container *container, json_obje
116 json_object_array_add(modes_array, mode_object); 150 json_object_array_add(modes_array, mode_object);
117 } 151 }
118 json_object_object_add(object, "modes", modes_array); 152 json_object_object_add(object, "modes", modes_array);
153
154
155 json_object_object_add(object, "layout", json_object_new_string("output"));
119} 156}
120 157
121static void ipc_json_describe_workspace(struct sway_container *workspace, 158static void ipc_json_describe_workspace(struct sway_container *workspace,
@@ -127,12 +164,23 @@ static void ipc_json_describe_workspace(struct sway_container *workspace,
127 json_object_new_string(workspace->parent->name) : NULL); 164 json_object_new_string(workspace->parent->name) : NULL);
128 json_object_object_add(object, "type", json_object_new_string("workspace")); 165 json_object_object_add(object, "type", json_object_new_string("workspace"));
129 json_object_object_add(object, "urgent", json_object_new_boolean(false)); 166 json_object_object_add(object, "urgent", json_object_new_boolean(false));
167
168 const char *layout = ipc_json_layout_description(workspace->workspace_layout);
169 json_object_object_add(object, "layout", (strcmp(layout, "null") == 0) ?
170 NULL : json_object_new_string(layout));
130} 171}
131 172
132static void ipc_json_describe_view(struct sway_container *c, json_object *object) { 173static void ipc_json_describe_view(struct sway_container *c, json_object *object) {
133 json_object_object_add(object, "name", 174 json_object_object_add(object, "name",
134 c->name ? json_object_new_string(c->name) : NULL); 175 c->name ? json_object_new_string(c->name) : NULL);
135 json_object_object_add(object, "type", json_object_new_string("con")); 176 json_object_object_add(object, "type", json_object_new_string("con"));
177
178 if (c->parent) {
179 const char *layout = (c->parent->type == C_CONTAINER) ?
180 ipc_json_layout_description(c->parent->layout) : "none";
181 json_object_object_add(object, "layout",
182 (strcmp(layout, "null") == 0) ? NULL : json_object_new_string(layout));
183 }
136} 184}
137 185
138json_object *ipc_json_describe_container(struct sway_container *c) { 186json_object *ipc_json_describe_container(struct sway_container *c) {