*/
void x_raise_con(Con *con);
+/**
+ * Sets the WM_NAME property (so, no UTF8, but used only for debugging anyways)
+ * of the given name. Used for properly tagging the windows for easily spotting
+ * i3 windows in xwininfo -root -all.
+ *
+ */
+void x_set_name(Con *con, const char *name);
+
#endif
/* 2: create a new container to render the decoration on, add
* it as a floating window to the workspace */
Con *nc = con_new(NULL);
+ /* we need to set the parent afterwards instead of passing it as an
+ * argument to con_new() because nc would be inserted into the tiling layer
+ * otherwise. */
nc->parent = con_get_workspace(con);
+
+ char *name;
+ asprintf(&name, "[i3 con] floatingcon around %p", con);
+ x_set_name(nc, name);
+ free(name);
+
nc->rect = con->rect;
/* add pixels for the decoration */
/* TODO: don’t add them when the user automatically puts new windows into
nc->window = cwindow;
x_reinit(nc);
+ char *name;
+ asprintf(&name, "[i3 con] container around %p", cwindow);
+ x_set_name(nc, name);
+ free(name);
/* set floating if necessary */
bool want_floating = false;
oc->type = CT_OUTPUT;
oc->rect = output->rect;
+ char *name;
+ asprintf(&name, "[i3 con] output %s", oc->name);
+ x_set_name(oc, name);
+ free(name);
+
/* add a workspace to this output */
ws = con_new(oc);
ws->type = CT_WORKSPACE;
asprintf(&(ws->name), "%d", c);
c++;
+
+ asprintf(&name, "[i3 con] workspace %s", ws->name);
+ x_set_name(ws, name);
+ free(name);
+
ws->fullscreen_mode = CF_OUTPUT;
ws->orientation = HORIZ;
}
output = con_get_output(focused);
LOG("got output %p\n", output);
workspace = con_new(output);
+ char *name;
+ asprintf(&name, "[i3 con] workspace %s", num);
+ x_set_name(workspace, name);
+ free(name);
workspace->type = CT_WORKSPACE;
workspace->name = strdup(num);
workspace->orientation = HORIZ;
bool initial;
+ char *name;
+
CIRCLEQ_ENTRY(con_state) state;
CIRCLEQ_ENTRY(con_state) old_state;
} con_state;
LOG("Pushing changes for node %p / %s\n", con, con->name);
state = state_for_frame(con->frame);
+ if (state->name != NULL) {
+ DLOG("pushing name %s\n", state->name);
+
+ xcb_change_property(conn, XCB_PROP_MODE_REPLACE, con->frame,
+ WM_NAME, STRING, 8, strlen(state->name), state->name);
+ FREE(state->name);
+ }
+
/* reparent the child window (when the window was moved due to a sticky
* container) */
if (state->need_reparent && con->window != NULL) {
CIRCLEQ_REMOVE(&state_head, state, state);
CIRCLEQ_INSERT_HEAD(&state_head, state, state);
}
+
+/*
+ * Sets the WM_NAME property (so, no UTF8, but used only for debugging anyways)
+ * of the given name. Used for properly tagging the windows for easily spotting
+ * i3 windows in xwininfo -root -all.
+ *
+ */
+void x_set_name(Con *con, const char *name) {
+ struct con_state *state;
+
+ if ((state = state_for_frame(con->frame)) == NULL) {
+ ELOG("window state not found\n");
+ return;
+ }
+
+ FREE(state->name);
+ state->name = sstrdup(name);
+}