Merge branch 'fix-workspace-number'
This commit is contained in:
commit
687ad3b44e
|
@ -75,6 +75,28 @@ static Output *get_output_from_string(Output *current_output, const char *output
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Checks whether we switched to a new workspace and returns false in that case,
|
||||||
|
* signaling that further workspace switching should be done by the calling function
|
||||||
|
* If not, calls workspace_back_and_forth() if workspace_auto_back_and_forth is set
|
||||||
|
* and return true, signaling that no further workspace switching should occur in the calling function.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static bool maybe_back_and_forth(struct CommandResult *cmd_output, char *name) {
|
||||||
|
Con *ws = con_get_workspace(focused);
|
||||||
|
|
||||||
|
/* If we switched to a different workspace, do nothing */
|
||||||
|
if (strcmp(ws->name, name) != 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
DLOG("This workspace is already focused.\n");
|
||||||
|
if (config.workspace_auto_back_and_forth) {
|
||||||
|
workspace_back_and_forth();
|
||||||
|
cmd_output->needs_tree_render = true;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// This code is commented out because we might recycle it for popping up error
|
// This code is commented out because we might recycle it for popping up error
|
||||||
// messages on parser errors.
|
// messages on parser errors.
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -778,16 +800,18 @@ void cmd_workspace_number(I3_CMD, char *which) {
|
||||||
child->num == parsed_num);
|
child->num == parsed_num);
|
||||||
|
|
||||||
if (!workspace) {
|
if (!workspace) {
|
||||||
LOG("There is no workspace with number %d.\n", parsed_num);
|
LOG("There is no workspace with number %d, creating a new one.\n", parsed_num);
|
||||||
y(map_open);
|
ysuccess(true);
|
||||||
ystr("success");
|
/* terminate the which string after the endposition of the number */
|
||||||
y(bool, false);
|
*endptr = '\0';
|
||||||
ystr("error");
|
if (maybe_back_and_forth(cmd_output, which))
|
||||||
ystr("No such workspace");
|
return;
|
||||||
y(map_close);
|
workspace_show_by_name(which);
|
||||||
|
cmd_output->needs_tree_render = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (maybe_back_and_forth(cmd_output, which))
|
||||||
|
return;
|
||||||
workspace_show(workspace);
|
workspace_show(workspace);
|
||||||
|
|
||||||
cmd_output->needs_tree_render = true;
|
cmd_output->needs_tree_render = true;
|
||||||
|
@ -819,20 +843,8 @@ void cmd_workspace_name(I3_CMD, char *name) {
|
||||||
}
|
}
|
||||||
|
|
||||||
DLOG("should switch to workspace %s\n", name);
|
DLOG("should switch to workspace %s\n", name);
|
||||||
|
if (maybe_back_and_forth(cmd_output, name))
|
||||||
Con *ws = con_get_workspace(focused);
|
|
||||||
|
|
||||||
/* Check if the command wants to switch to the current workspace */
|
|
||||||
if (strcmp(ws->name, name) == 0) {
|
|
||||||
DLOG("This workspace is already focused.\n");
|
|
||||||
if (config.workspace_auto_back_and_forth) {
|
|
||||||
workspace_back_and_forth();
|
|
||||||
tree_render();
|
|
||||||
}
|
|
||||||
ysuccess(false);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
workspace_show_by_name(name);
|
workspace_show_by_name(name);
|
||||||
|
|
||||||
cmd_output->needs_tree_render = true;
|
cmd_output->needs_tree_render = true;
|
||||||
|
|
|
@ -134,6 +134,15 @@ cmd 'workspace number 4';
|
||||||
is(focused_ws(), '4: foo', 'now on workspace 4: foo');
|
is(focused_ws(), '4: foo', 'now on workspace 4: foo');
|
||||||
ok(!workspace_exists('4'), 'workspace 4 still does not exist');
|
ok(!workspace_exists('4'), 'workspace 4 still does not exist');
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Check that we "workspace number 5" will create workspace 5 if it does not yet
|
||||||
|
# exist.
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
ok(!workspace_exists('5'), 'workspace 5 does not exist');
|
||||||
|
cmd 'workspace number 5';
|
||||||
|
ok(workspace_exists('5'), 'workspace 5 was created');
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Verify that renaming workspaces works.
|
# Verify that renaming workspaces works.
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
|
@ -59,6 +59,20 @@ ok(get_ws($third_ws)->{focused}, 'third workspace focused');
|
||||||
cmd qq|workspace "$third_ws"|;
|
cmd qq|workspace "$third_ws"|;
|
||||||
ok(get_ws($second_ws)->{focused}, 'second workspace focused');
|
ok(get_ws($second_ws)->{focused}, 'second workspace focused');
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Now see if "workspace number <number>" also works as expected with
|
||||||
|
# workspace_auto_back_and_forth enabled.
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
cmd 'workspace number 5';
|
||||||
|
ok(get_ws('5')->{focused}, 'workspace 5 focused');
|
||||||
|
|
||||||
|
cmd 'workspace number 6';
|
||||||
|
ok(get_ws('6')->{focused}, 'workspace 6 focused');
|
||||||
|
|
||||||
|
cmd 'workspace number 6';
|
||||||
|
ok(get_ws('5')->{focused}, 'workspace 5 focused again');
|
||||||
|
|
||||||
exit_gracefully($pid);
|
exit_gracefully($pid);
|
||||||
|
|
||||||
done_testing;
|
done_testing;
|
||||||
|
|
Loading…
Reference in New Issue