aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Ashworth <bosrsf04@gmail.com>2019-02-17 13:07:04 -0500
committeremersion <contact@emersion.fr>2019-02-17 19:15:19 +0100
commitfaf15ee733681f14797d8b47078854a00f03f8fc (patch)
tree1d909ff1b9fc25581c32d3a0c8e55e4c49d3ab7f
parent487c83f0de9ca2a7650ad636eed6fd694ddcb82e (diff)
downloadsway-faf15ee733681f14797d8b47078854a00f03f8fc.zip
sway-faf15ee733681f14797d8b47078854a00f03f8fc.tar.gz
sway-faf15ee733681f14797d8b47078854a00f03f8fc.tar.bz2
workspace_next_name: fallback to next available number
This changes `workspace_next_name` to use the next available number as the workspace name instead of the number of outputs. This fixes the case where a number that is already in use could be returned. The workspace numbers in use have no relation to the number of outputs so it makes more sense to use the lowest available number
-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 68f1de5..7332249 100644
--- a/sway/tree/workspace.c
+++ b/sway/tree/workspace.c
@@ -336,16 +336,13 @@ char *workspace_next_name(const char *output_name) {
if (target != NULL) {
return target;
}
- // As a fall back, get the current number of active workspaces
- // and return that + 1 for the next workspace's name
- int ws_num = root->outputs->length;
- int l = snprintf(NULL, 0, "%d", ws_num);
- char *name = malloc(l + 1);
- if (!sway_assert(name, "Could not allocate workspace name")) {
- return NULL;
- }
- sprintf(name, "%d", ws_num++);
- return name;
+ // As a fall back, use the next available number
+ char name[12] = "";
+ unsigned int ws_num = 1;
+ do {
+ snprintf(name, sizeof(name), "%u", ws_num++);
+ } while (workspace_by_number(name));
+ return strdup(name);
}
static bool _workspace_by_number(struct sway_workspace *ws, void *data) {