Merge pull request #914 from zandrmartin/container-ids

add unique IDs to containers
master
Drew DeVault 8 years ago committed by GitHub
commit a95ce5ce65

@ -2,6 +2,7 @@
#define _SWAY_CONTAINER_H #define _SWAY_CONTAINER_H
#include <sys/types.h> #include <sys/types.h>
#include <wlc/wlc.h> #include <wlc/wlc.h>
#include <stdint.h>
#include "list.h" #include "list.h"
@ -58,6 +59,12 @@ struct sway_container {
*/ */
wlc_handle handle; wlc_handle handle;
/**
* A unique ID to identify this container. Primarily used in the
* get_tree JSON output.
*/
size_t id;
enum swayc_types type; enum swayc_types type;
enum swayc_layouts layout; enum swayc_layouts layout;
enum swayc_layouts prev_layout; enum swayc_layouts prev_layout;

@ -18,8 +18,12 @@
#define ASSERT_NONNULL(PTR) \ #define ASSERT_NONNULL(PTR) \
sway_assert (PTR, #PTR "must be non-null") sway_assert (PTR, #PTR "must be non-null")
static swayc_t *new_swayc(enum swayc_types type) { static swayc_t *new_swayc(enum swayc_types type) {
// next id starts at 1 because 0 is assigned to root_container in layout.c
static size_t next_id = 1;
swayc_t *c = calloc(1, sizeof(swayc_t)); swayc_t *c = calloc(1, sizeof(swayc_t));
c->id = next_id++;
c->handle = -1; c->handle = -1;
c->gaps = -1; c->gaps = -1;
c->layout = L_NONE; c->layout = L_NONE;

@ -161,7 +161,6 @@ static void ipc_json_describe_view(swayc_t *c, json_object *object) {
ipc_json_layout_description(c->parent->prev_layout) : "none"; ipc_json_layout_description(c->parent->prev_layout) : "none";
wlc_handle parent = wlc_view_get_parent(c->handle); wlc_handle parent = wlc_view_get_parent(c->handle);
json_object_object_add(object, "id", json_object_new_int(c->handle));
json_object_object_add(object, "type", json_object_new_string((c->is_floating) ? "floating_con" : "con")); json_object_object_add(object, "type", json_object_new_string((c->is_floating) ? "floating_con" : "con"));
json_object_object_add(object, "scratchpad_state", json_object_object_add(object, "scratchpad_state",
@ -211,7 +210,7 @@ json_object *ipc_json_describe_container(swayc_t *c) {
json_object *object = json_object_new_object(); json_object *object = json_object_new_object();
json_object_object_add(object, "id", json_object_new_int((uintptr_t)&c)); json_object_object_add(object, "id", json_object_new_int((int)c->id));
json_object_object_add(object, "name", (c->name) ? json_object_new_string(c->name) : NULL); json_object_object_add(object, "name", (c->name) ? json_object_new_string(c->name) : NULL);
json_object_object_add(object, "rect", ipc_json_create_rect(c)); json_object_object_add(object, "rect", ipc_json_create_rect(c));
json_object_object_add(object, "visible", json_object_new_boolean(c->visible)); json_object_object_add(object, "visible", json_object_new_boolean(c->visible));

@ -22,6 +22,7 @@ int min_sane_h = 60;
int min_sane_w = 100; int min_sane_w = 100;
void init_layout(void) { void init_layout(void) {
root_container.id = 0; // normally assigned in new_swayc()
root_container.type = C_ROOT; root_container.type = C_ROOT;
root_container.layout = L_NONE; root_container.layout = L_NONE;
root_container.name = strdup("root"); root_container.name = strdup("root");

Loading…
Cancel
Save