diff options
author | Brian Ashworth <bosrsf04@gmail.com> | 2019-02-17 13:07:04 -0500 |
---|---|---|
committer | emersion <contact@emersion.fr> | 2019-02-17 19:15:19 +0100 |
commit | faf15ee733681f14797d8b47078854a00f03f8fc (patch) | |
tree | 1d909ff1b9fc25581c32d3a0c8e55e4c49d3ab7f /sway/tree | |
parent | 487c83f0de9ca2a7650ad636eed6fd694ddcb82e (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
Diffstat (limited to 'sway/tree')
-rw-r--r-- | sway/tree/workspace.c | 17 |
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) { 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) { |