Refactor seat_get_focus functions

Fixes #2467.

This commit introduces seat_get_focus_inactive_floating to supplement
seat_get_focus_inactive_tiling, and uses it during `focus mode_toggle`
which fixes a focus bug.

This also refactors the seat_get_focus_inactive functions so that they
do their selection logic themselves rather than offloading it to
seat_get_focus_by_type which was getting bloated. seat_get_focus_by_type
is now removed.

Lastly, this commit changes seat_get_focus to just return the first
container in the focus stack rather than looping and calling
seat_get_focus_by_type.
This commit is contained in:
Ryan Dwyer 2018-08-17 17:32:53 +10:00
parent 32193c7e4d
commit 3a888163a0
3 changed files with 81 additions and 55 deletions

View file

@ -46,14 +46,13 @@ static struct cmd_results *focus_mode(struct sway_container *con,
struct sway_container *new_focus = NULL;
if (floating) {
new_focus = seat_get_focus_inactive(seat, ws->sway_workspace->floating);
new_focus = seat_get_focus_inactive_floating(seat, ws);
} else {
new_focus = seat_get_focus_inactive_tiling(seat, ws);
}
if (!new_focus) {
new_focus = ws;
if (new_focus) {
seat_set_focus(seat, new_focus);
}
seat_set_focus(seat, new_focus);
return cmd_results_new(CMD_SUCCESS, NULL, NULL);
}