diff options
author | Brian Ashworth <bosrsf04@gmail.com> | 2019-03-24 23:24:02 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-04-11 09:18:48 -0600 |
commit | 195226120fcf4854c90e544a6e7e0ec0b1c3312c (patch) | |
tree | 55d6d0e2c7a737897f8941be79ff20697ab3317a /sway/tree | |
parent | e0324fc88c4a9041e8c97bdf99ee33eb198c1310 (diff) | |
download | sway-195226120fcf4854c90e544a6e7e0ec0b1c3312c.tar.xz |
Honor output for xdg_toplevel_set_fullscreen
This honors the fullscreen output request for
`xdg_toplevel_set_fullscreen` and `zxdg_toplevel_v6_set_fullscreen`.
If the request was sent before mapping, the fullscreen output request
will be retrieved from the client_pending state for the toplevel. The
output will be passed to `view_map` and if there is a workspace on the
output, the view will be placed on that workspace.
If the request comes in after being mapped, the view will be moved to
the workspace on the output (if there is one) before becoming
fullscreen.
Diffstat (limited to 'sway/tree')
-rw-r--r-- | sway/tree/view.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/sway/tree/view.c b/sway/tree/view.c index 4759c998..2c8839f5 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -561,14 +561,26 @@ static bool should_focus(struct sway_view *view) { } void view_map(struct sway_view *view, struct wlr_surface *wlr_surface, - bool fullscreen, bool decoration) { + bool fullscreen, struct wlr_output *fullscreen_output, + bool decoration) { if (!sway_assert(view->surface == NULL, "cannot map mapped view")) { return; } view->surface = wlr_surface; + // If there is a request to be opened fullscreen on a specific output, try + // to honor that request. Otherwise, fallback to assigns, pid mappings, + // focused workspace, etc + struct sway_workspace *ws = NULL; + if (fullscreen_output && fullscreen_output->data) { + struct sway_output *output = fullscreen_output->data; + ws = output_get_active_workspace(output); + } + if (!ws) { + ws = select_workspace(view); + } + struct sway_seat *seat = input_manager_current_seat(); - struct sway_workspace *ws = select_workspace(view); struct sway_node *node = seat_get_focus_inactive(seat, &ws->node); struct sway_container *target_sibling = node->type == N_CONTAINER ? node->sway_container : NULL; |