aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sway/tree/workspace.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c
index 68f1de50..73322491 100644
--- a/sway/tree/workspace.c
+++ b/sway/tree/workspace.c
@@ -336,16 +336,13 @@ char *workspace_next_name(const char *output_name) {
336 if (target != NULL) { 336 if (target != NULL) {
337 return target; 337 return target;
338 } 338 }
339 // As a fall back, get the current number of active workspaces 339 // As a fall back, use the next available number
340 // and return that + 1 for the next workspace's name 340 char name[12] = "";
341 int ws_num = root->outputs->length; 341 unsigned int ws_num = 1;
342 int l = snprintf(NULL, 0, "%d", ws_num); 342 do {
343 char *name = malloc(l + 1); 343 snprintf(name, sizeof(name), "%u", ws_num++);
344 if (!sway_assert(name, "Could not allocate workspace name")) { 344 } while (workspace_by_number(name));
345 return NULL; 345 return strdup(name);
346 }
347 sprintf(name, "%d", ws_num++);
348 return name;
349} 346}
350 347
351static bool _workspace_by_number(struct sway_workspace *ws, void *data) { 348static bool _workspace_by_number(struct sway_workspace *ws, void *data) {