xwayland: populate window_properties in json for views

window_properties is documented to contain a subset of the X11 properties
of a window (its title, class, instance, role, and transient ID). This
commit adds the missing json object from the get_tree output for
xwayland windows only.

This is a follow-up of #2911.

Signed-off-by: Franklin "Snaipe" Mathieu <me@snai.pe>
This commit is contained in:
Franklin "Snaipe" Mathieu 2018-10-22 20:17:27 +01:00
parent 429787510e
commit 8fc9328334
4 changed files with 38 additions and 0 deletions

View file

@ -266,6 +266,29 @@ static void ipc_json_describe_view(struct sway_container *c, json_object *object
if (c->view->type == SWAY_VIEW_XWAYLAND) {
json_object_object_add(object, "window",
json_object_new_int(view_get_x11_window_id(c->view)));
json_object *window_props = json_object_new_object();
json_object_object_add(window_props, "class",
class ? json_object_new_string(class) : NULL);
const char *instance = view_get_instance(c->view);
json_object_object_add(window_props, "instance",
instance ? json_object_new_string(instance) : NULL);
json_object_object_add(window_props, "title",
c->title ? json_object_new_string(c->title) : NULL);
// the transient_for key is always present in i3's output
uint32_t parent_id = view_get_x11_parent_id(c->view);
json_object_object_add(window_props, "transient_for",
parent_id ? json_object_new_int(parent_id) : NULL);
const char *role = view_get_window_role(c->view);
if (role) {
json_object_object_add(window_props, "window_role",
json_object_new_string(role));
}
json_object_object_add(object, "window_properties", window_props);
}
#endif
}