From d0741975f1424de00b241c229fdd2c30fcc4f3eb Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Thu, 4 Aug 2011 00:10:23 +0200 Subject: [PATCH] Bugfix: Use the appropriate number when assigning numbered workspaces in randr.c --- src/randr.c | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/src/randr.c b/src/randr.c index 505eb49b..e48e2065 100644 --- a/src/randr.c +++ b/src/randr.c @@ -392,27 +392,40 @@ void init_ws_for_output(Output *output, Con *content) { GREP_FIRST(current, output_get_content(out), !strcasecmp(child->name, ws->name)); exists = (current != NULL); - if (!exists) + if (!exists) { + /* Set ->num to the number of the workspace, if the name actually + * is a number or starts with a number */ + long parsed_num = strtol(ws->name, NULL, 10); + if (parsed_num == LONG_MIN || + parsed_num == LONG_MAX || + parsed_num <= 0) + ws->num = -1; + else ws->num = parsed_num; + LOG("Used number %d for workspace with name %s\n", ws->num, ws->name); + break; + } } - /* get the next unused workspace number */ - DLOG("Getting next unused workspace\n"); - int c = 0; - while (exists) { - c++; + if (exists) { + /* get the next unused workspace number */ + DLOG("Getting next unused workspace by number\n"); + int c = 0; + while (exists) { + c++; - FREE(ws->name); - asprintf(&(ws->name), "%d", c); + FREE(ws->name); + asprintf(&(ws->name), "%d", c); - current = NULL; - TAILQ_FOREACH(out, &(croot->nodes_head), nodes) - GREP_FIRST(current, output_get_content(out), !strcasecmp(child->name, ws->name)); - exists = (current != NULL); + current = NULL; + TAILQ_FOREACH(out, &(croot->nodes_head), nodes) + GREP_FIRST(current, output_get_content(out), !strcasecmp(child->name, ws->name)); + exists = (current != NULL); - DLOG("result for ws %s / %d: exists = %d\n", ws->name, c, exists); + DLOG("result for ws %s / %d: exists = %d\n", ws->name, c, exists); + } + ws->num = c; } - ws->num = c; con_attach(ws, content, false); asprintf(&name, "[i3 con] workspace %s", ws->name);