aboutsummaryrefslogtreecommitdiffstats
path: root/sway/tree/view.c
diff options
context:
space:
mode:
authorLibravatar Brian Ashworth <bosrsf04@gmail.com>2019-03-24 23:24:02 -0400
committerLibravatar Drew DeVault <sir@cmpwn.com>2019-04-11 09:18:48 -0600
commit195226120fcf4854c90e544a6e7e0ec0b1c3312c (patch)
tree55d6d0e2c7a737897f8941be79ff20697ab3317a /sway/tree/view.c
parentconfig/output: unbreak on 32-bit architectures (diff)
downloadsway-195226120fcf4854c90e544a6e7e0ec0b1c3312c.tar.gz
sway-195226120fcf4854c90e544a6e7e0ec0b1c3312c.tar.zst
sway-195226120fcf4854c90e544a6e7e0ec0b1c3312c.zip
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/view.c')
-rw-r--r--sway/tree/view.c16
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) {
561} 561}
562 562
563void view_map(struct sway_view *view, struct wlr_surface *wlr_surface, 563void view_map(struct sway_view *view, struct wlr_surface *wlr_surface,
564 bool fullscreen, bool decoration) { 564 bool fullscreen, struct wlr_output *fullscreen_output,
565 bool decoration) {
565 if (!sway_assert(view->surface == NULL, "cannot map mapped view")) { 566 if (!sway_assert(view->surface == NULL, "cannot map mapped view")) {
566 return; 567 return;
567 } 568 }
568 view->surface = wlr_surface; 569 view->surface = wlr_surface;
569 570
571 // If there is a request to be opened fullscreen on a specific output, try
572 // to honor that request. Otherwise, fallback to assigns, pid mappings,
573 // focused workspace, etc
574 struct sway_workspace *ws = NULL;
575 if (fullscreen_output && fullscreen_output->data) {
576 struct sway_output *output = fullscreen_output->data;
577 ws = output_get_active_workspace(output);
578 }
579 if (!ws) {
580 ws = select_workspace(view);
581 }
582
570 struct sway_seat *seat = input_manager_current_seat(); 583 struct sway_seat *seat = input_manager_current_seat();
571 struct sway_workspace *ws = select_workspace(view);
572 struct sway_node *node = seat_get_focus_inactive(seat, &ws->node); 584 struct sway_node *node = seat_get_focus_inactive(seat, &ws->node);
573 struct sway_container *target_sibling = node->type == N_CONTAINER ? 585 struct sway_container *target_sibling = node->type == N_CONTAINER ?
574 node->sway_container : NULL; 586 node->sway_container : NULL;