user_output_names_find_next: Always initialize target_output
This way, if the user has provided a valid, existing output in the list of outputs, the focus & move workspace to output commands will not report a misleading failure. Side-effect is that the command code will try to execute a no-op e.g. by moving the workspace to the output it already is on. But that's what the user is actually requesting in this case and it shouldn't be a problem. Fixes #4691
This commit is contained in:
parent
d44e1442c2
commit
854616ed2e
1
release-notes/bugfixes/4-failed-workspace-output
Normal file
1
release-notes/bugfixes/4-failed-workspace-output
Normal file
@ -0,0 +1 @@
|
||||
fix wrong failed reply on move workspace to output
|
@ -1052,6 +1052,14 @@ static Output *user_output_names_find_next(user_output_names_head *names, Output
|
||||
Output *target_output = NULL;
|
||||
user_output_name *uo;
|
||||
TAILQ_FOREACH (uo, names, user_output_names) {
|
||||
if (!target_output) {
|
||||
/* The first available output from the list is used in 2 cases:
|
||||
* 1. When we must wrap around the user list. For example, if user
|
||||
* specifies outputs A B C and C is `current_output`.
|
||||
* 2. When the current output is not in the user list. For example,
|
||||
* user specifies A B C and D is `current_output`. */
|
||||
target_output = get_output_from_string(current_output, uo->name);
|
||||
}
|
||||
if (strcasecmp(output_primary_name(current_output), uo->name) == 0) {
|
||||
/* The current output is in the user list */
|
||||
while (true) {
|
||||
@ -1071,14 +1079,6 @@ static Output *user_output_names_find_next(user_output_names_head *names, Output
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (!target_output) {
|
||||
/* The first available output from the list is used in 2 cases:
|
||||
* 1. When we must wrap around the user list. For example, if user
|
||||
* specifies outputs A B C and C is `current_output`.
|
||||
* 2. When the current output is not in the user list. For example,
|
||||
* user specifies A B C and D is `current_output`. */
|
||||
target_output = get_output_from_string(current_output, uo->name);
|
||||
}
|
||||
}
|
||||
return target_output;
|
||||
}
|
||||
|
@ -39,6 +39,16 @@ sub is_ws {
|
||||
is(get_output_for_workspace("$ws_num"), "fake-$out_num", "Workspace $ws_num -> $out_num: $msg");
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Test moving workspace to same output
|
||||
# See issue #4691
|
||||
###############################################################################
|
||||
is_ws(1, 0, 'sanity check');
|
||||
|
||||
my $reply = cmd '[con_mark=aa] move workspace to output fake-0';
|
||||
is_ws(1, 0, 'workspace did not move');
|
||||
ok($reply->[0]->{success}, 'reply success');
|
||||
|
||||
###############################################################################
|
||||
# Test using "next" special keyword
|
||||
###############################################################################
|
||||
|
Loading…
Reference in New Issue
Block a user