From 431e98dc352437f1118ea5be9d5c55d2354db9f5 Mon Sep 17 00:00:00 2001 From: Sebastian Ullrich Date: Wed, 7 Aug 2013 17:20:22 +0200 Subject: [PATCH] Respect workspace numbers when looking for a free workspace name This prevents a ws '1' appearing on a new output when there's already a ws '1: www' on an existing output --- src/workspace.c | 9 +++---- testcases/t/515-create-workspace.t | 40 ++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 testcases/t/515-create-workspace.t diff --git a/src/workspace.c b/src/workspace.c index af9325f7..3f70ced7 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -197,17 +197,16 @@ Con *create_workspace_on_output(Output *output, Con *content) { while (exists) { c++; - FREE(ws->name); - sasprintf(&(ws->name), "%d", c); + ws->num = c; current = NULL; TAILQ_FOREACH(out, &(croot->nodes_head), nodes) - GREP_FIRST(current, output_get_content(out), !strcasecmp(child->name, ws->name)); + GREP_FIRST(current, output_get_content(out), child->num == ws->num); exists = (current != NULL); - DLOG("result for ws %s / %d: exists = %d\n", ws->name, c, exists); + DLOG("result for ws %d: exists = %d\n", c, exists); } - ws->num = c; + sasprintf(&(ws->name), "%d", c); } con_attach(ws, content, false); diff --git a/testcases/t/515-create-workspace.t b/testcases/t/515-create-workspace.t new file mode 100644 index 00000000..be790bf0 --- /dev/null +++ b/testcases/t/515-create-workspace.t @@ -0,0 +1,40 @@ +#!perl +# vim:ts=4:sw=4:expandtab +# +# Please read the following documents before working on tests: +# • http://build.i3wm.org/docs/testsuite.html +# (or docs/testsuite) +# +# • http://build.i3wm.org/docs/lib-i3test.html +# (alternatively: perldoc ./testcases/lib/i3test.pm) +# +# • http://build.i3wm.org/docs/ipc.html +# (or docs/ipc) +# +# • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf +# (unless you are already familiar with Perl) +# +# Tests that new workspace names are taken from the config, +# then from the first free number starting with 1. +# +use i3test i3_autostart => 0; + +my $config = <get_workspaces->recv; + +is($ws->[0]->{name}, '1: eggs', 'new workspace uses config name'); +is($ws->[1]->{name}, '2', 'naming continues with next free number'); + +exit_gracefully($pid); + +done_testing; -- 2.39.5