Skip to content
This repository has been archived by the owner on Apr 18, 2023. It is now read-only.

Commit

Permalink
Merge pull request #3221 from ograff/issue-3208
Browse files Browse the repository at this point in the history
Issue #3208
  • Loading branch information
orestisfl committed Apr 5, 2018
2 parents bc760c2 + e4a184e commit bfe047e
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 11 deletions.
2 changes: 1 addition & 1 deletion include/workspace.h
Expand Up @@ -207,4 +207,4 @@ Con *workspace_encapsulate(Con *ws);
* This returns true if and only if moving the workspace was successful.
*
*/
bool workspace_move_to_output(Con *ws, const char *output);
bool workspace_move_to_output(Con *ws, Output *output);
23 changes: 21 additions & 2 deletions src/commands.c
Expand Up @@ -1128,7 +1128,21 @@ void cmd_move_workspace_to_output(I3_CMD, const char *name) {
continue;
}

bool success = workspace_move_to_output(ws, name);
Output *current_output = get_output_for_con(ws);
if (current_output == NULL) {
ELOG("Cannot get current output. This is a bug in i3.\n");
ysuccess(false);
return;
}

Output *target_output = get_output_from_string(current_output, name);
if (!target_output) {
ELOG("Could not get output from string \"%s\"\n", name);
ysuccess(false);
return;
}

bool success = workspace_move_to_output(ws, target_output);
if (!success) {
ELOG("Failed to move workspace to output.\n");
ysuccess(false);
Expand Down Expand Up @@ -1990,7 +2004,12 @@ void cmd_rename_workspace(I3_CMD, const char *old_name, const char *new_name) {
continue;
}

workspace_move_to_output(workspace, assignment->output);
Output *target_output = get_output_by_name(assignment->output, true);
if (!target_output) {
LOG("Could not get output named \"%s\"\n", assignment->output);
continue;
}
workspace_move_to_output(workspace, target_output);

if (previously_focused)
workspace_show(con_get_workspace(previously_focused));
Expand Down
10 changes: 2 additions & 8 deletions src/workspace.c
Expand Up @@ -923,21 +923,15 @@ Con *workspace_encapsulate(Con *ws) {
* Move the given workspace to the specified output.
* This returns true if and only if moving the workspace was successful.
*/
bool workspace_move_to_output(Con *ws, const char *name) {
LOG("Trying to move workspace %p / %s to output \"%s\".\n", ws, ws->name, name);
bool workspace_move_to_output(Con *ws, Output *output) {
LOG("Trying to move workspace %p / %s to output %p / \"%s\".\n", ws, ws->name, output, output_primary_name(output));

Output *current_output = get_output_for_con(ws);
if (current_output == NULL) {
ELOG("Cannot get current output. This is a bug in i3.\n");
return false;
}

Output *output = get_output_from_string(current_output, name);
if (!output) {
ELOG("Could not get output from string \"%s\"\n", name);
return false;
}

Con *content = output_get_content(output->con);
LOG("got output %p with content %p\n", output, content);

Expand Down
12 changes: 12 additions & 0 deletions testcases/t/522-rename-assigned-workspace.t
Expand Up @@ -28,6 +28,7 @@ workspace 1 output fake-0
workspace 2 output fake-1
workspace 3:foo output fake-1
workspace baz output fake-1
workspace 5 output left
EOT

my $i3 = i3(get_socket_path());
Expand Down Expand Up @@ -82,4 +83,15 @@ cmd 'rename workspace to baz';
is(get_output_for_workspace('baz'), 'fake-1',
'Renaming the workspace to a number and name should move it to the assigned output');

##########################################################################
# Renaming a workspace so that it is assigned a directional output does
# not move the workspace or crash
##########################################################################

cmd 'focus output fake-0';
cmd 'workspace bar';
cmd 'rename workspace to 5';
is(get_output_for_workspace('5'), 'fake-0',
'Renaming the workspace to a workspace assigned to a directional output should not move the workspace');

done_testing;

0 comments on commit bfe047e

Please sign in to comment.