From: Michael Stapelberg Date: Tue, 4 Jan 2011 23:26:23 +0000 (+0100) Subject: RandR: use the next unused workspace instead of fixed counting X-Git-Tag: tree-pr2~134 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=2312187439d8efcc656023d57dde351f0700a7c8;p=i3%2Fi3 RandR: use the next unused workspace instead of fixed counting --- diff --git a/src/randr.c b/src/randr.c index 5da9ab2c..26f9102b 100644 --- a/src/randr.c +++ b/src/randr.c @@ -227,7 +227,6 @@ void disable_randr(xcb_connection_t *conn) { void output_init_con(Output *output) { Con *con = NULL, *current; bool reused = false; - static int c = 1; DLOG("init_con for output %s\n", output->name); @@ -266,11 +265,33 @@ void output_init_con(Output *output) { /* add a workspace to this output */ Con *ws = con_new(NULL); ws->type = CT_WORKSPACE; - /* TODO: don't just number workspaces, but get the next assigned one / unused one */ + + /* get the next unused workspace number */ + DLOG("Getting next unused workspace\n"); + int c = 0; + bool exists = true; + while (exists) { + Con *out, *current; + + c++; + + FREE(ws->name); + asprintf(&(ws->name), "%d", c); + + exists = false; + TAILQ_FOREACH(out, &(croot->nodes_head), nodes) { + TAILQ_FOREACH(current, &(out->nodes_head), nodes) { + if (strcasecmp(current->name, ws->name) != 0) + continue; + + exists = true; + break; + } + } + + DLOG("result for ws %s / %d: exists = %d\n", ws->name, c, exists); + } ws->num = c; - FREE(ws->name); - asprintf(&(ws->name), "%d", c); - c++; con_attach(ws, con, false); asprintf(&name, "[i3 con] workspace %s", ws->name); diff --git a/src/workspace.c b/src/workspace.c index eeb756b1..b5095d11 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -26,7 +26,7 @@ Con *workspace_get(const char *num) { TAILQ_FOREACH(output, &(croot->nodes_head), nodes) { TAILQ_FOREACH(current, &(output->nodes_head), nodes) { if (strcasecmp(current->name, num) != 0) - continue; + continue; workspace = current; break;