diff options
author | Brian Ashworth <bosrsf04@gmail.com> | 2019-02-10 20:12:51 -0500 |
---|---|---|
committer | emersion <contact@emersion.fr> | 2019-02-11 10:13:16 +0100 |
commit | fb4f29289fd8d1f94975e64fded6657222ed5390 (patch) | |
tree | 3500b7c5b1fe18b8dd9d5064362444bcc3f9ce6e | |
parent | Abort early when XDG_RUNTIME_DIR is not set (diff) | |
download | sway-fb4f29289fd8d1f94975e64fded6657222ed5390.tar.gz sway-fb4f29289fd8d1f94975e64fded6657222ed5390.tar.zst sway-fb4f29289fd8d1f94975e64fded6657222ed5390.zip |
workspace_get_initial_output: handle focused layer
When a layer surface is focused, `seat_get_focused_workspace` will be
NULL. This changes `workspace_get_initial_output` to use output of the
focus inactive. If the focus inactive is also NULL, then either the
first output or the noop output will be used as fallbacks.
-rw-r--r-- | sway/tree/workspace.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c index 8b3eb2ad..b9780922 100644 --- a/sway/tree/workspace.c +++ b/sway/tree/workspace.c | |||
@@ -42,10 +42,16 @@ struct sway_output *workspace_get_initial_output(const char *name) { | |||
42 | } | 42 | } |
43 | } | 43 | } |
44 | } | 44 | } |
45 | // Otherwise put it on the focused output | 45 | // Otherwise try to put it on the focused output |
46 | struct sway_seat *seat = input_manager_current_seat(); | 46 | struct sway_seat *seat = input_manager_current_seat(); |
47 | struct sway_workspace *focus = seat_get_focused_workspace(seat); | 47 | struct sway_node *focus = seat_get_focus_inactive(seat, &root->node); |
48 | return focus->output; | 48 | if (focus && focus->type == N_WORKSPACE) { |
49 | return focus->sway_workspace->output; | ||
50 | } else if (focus && focus->type == N_CONTAINER) { | ||
51 | return focus->sway_container->workspace->output; | ||
52 | } | ||
53 | // Fallback to the first output or noop output for headless | ||
54 | return root->outputs->length ? root->outputs->items[0] : root->noop_output; | ||
49 | } | 55 | } |
50 | 56 | ||
51 | static void prevent_invalid_outer_gaps(struct sway_workspace *ws) { | 57 | static void prevent_invalid_outer_gaps(struct sway_workspace *ws) { |