summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFurkan Sahin <furkan-dev@proton.me>2019-02-17 13:07:04 -0500
committerFurkan Sahin <furkan-dev@proton.me>2019-02-17 13:07:04 -0500
commitd7399aee35d5026283c594f0f5e6e803aa6ecf91 (patch)
tree3618a18849457ab89ae16d772f66d5e1fc6acbbf
parentc4df41fb1298b526149d410982cf688564442179 (diff)
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 cda6caf7..9b7c5112 100644
--- a/sway/tree/workspace.c
+++ b/sway/tree/workspace.c
@@ -334,16 +334,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) {