* 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);
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);
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));
* 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) {
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);
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());
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;