diff options
-rw-r--r-- | include/sway/tree/view.h | 3 | ||||
-rw-r--r-- | sway/desktop/xdg_shell.c | 20 | ||||
-rw-r--r-- | sway/desktop/xdg_shell_v6.c | 23 | ||||
-rw-r--r-- | sway/desktop/xwayland.c | 12 | ||||
-rw-r--r-- | sway/tree/view.c | 26 |
5 files changed, 36 insertions, 48 deletions
diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h index 870ef2e0..dc1f0b02 100644 --- a/include/sway/tree/view.h +++ b/include/sway/tree/view.h | |||
@@ -329,7 +329,8 @@ void view_destroy(struct sway_view *view); | |||
329 | 329 | ||
330 | void view_begin_destroy(struct sway_view *view); | 330 | void view_begin_destroy(struct sway_view *view); |
331 | 331 | ||
332 | void view_map(struct sway_view *view, struct wlr_surface *wlr_surface); | 332 | void view_map(struct sway_view *view, struct wlr_surface *wlr_surface, |
333 | bool fullscreen, bool decoration); | ||
333 | 334 | ||
334 | void view_unmap(struct sway_view *view); | 335 | void view_unmap(struct sway_view *view); |
335 | 336 | ||
diff --git a/sway/desktop/xdg_shell.c b/sway/desktop/xdg_shell.c index 46582204..1ed45a6b 100644 --- a/sway/desktop/xdg_shell.c +++ b/sway/desktop/xdg_shell.c | |||
@@ -406,27 +406,19 @@ static void handle_map(struct wl_listener *listener, void *data) { | |||
406 | view->natural_height = view->wlr_xdg_surface->surface->current.height; | 406 | view->natural_height = view->wlr_xdg_surface->surface->current.height; |
407 | } | 407 | } |
408 | 408 | ||
409 | view_map(view, view->wlr_xdg_surface->surface); | 409 | bool csd = false; |
410 | 410 | ||
411 | if (!view->xdg_decoration) { | 411 | if (!view->xdg_decoration) { |
412 | struct sway_server_decoration *deco = | 412 | struct sway_server_decoration *deco = |
413 | decoration_from_surface(xdg_surface->surface); | 413 | decoration_from_surface(xdg_surface->surface); |
414 | bool csd = !deco || deco->wlr_server_decoration->mode == | 414 | csd = !deco || deco->wlr_server_decoration->mode == |
415 | WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT; | 415 | WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT; |
416 | view_update_csd_from_client(view, csd); | ||
417 | } | ||
418 | 416 | ||
419 | if (xdg_surface->toplevel->client_pending.fullscreen) { | ||
420 | container_set_fullscreen(view->container, true); | ||
421 | arrange_workspace(view->container->workspace); | ||
422 | } else { | ||
423 | if (view->container->parent) { | ||
424 | arrange_container(view->container->parent); | ||
425 | } else if (view->container->workspace) { | ||
426 | arrange_workspace(view->container->workspace); | ||
427 | } | ||
428 | } | 417 | } |
429 | 418 | ||
419 | view_map(view, view->wlr_xdg_surface->surface, | ||
420 | xdg_surface->toplevel->client_pending.fullscreen, csd); | ||
421 | |||
430 | transaction_commit_dirty(); | 422 | transaction_commit_dirty(); |
431 | 423 | ||
432 | xdg_shell_view->commit.notify = handle_commit; | 424 | xdg_shell_view->commit.notify = handle_commit; |
diff --git a/sway/desktop/xdg_shell_v6.c b/sway/desktop/xdg_shell_v6.c index 165cc7eb..eb8ba853 100644 --- a/sway/desktop/xdg_shell_v6.c +++ b/sway/desktop/xdg_shell_v6.c | |||
@@ -402,25 +402,14 @@ static void handle_map(struct wl_listener *listener, void *data) { | |||
402 | view->natural_width = view->wlr_xdg_surface_v6->surface->current.width; | 402 | view->natural_width = view->wlr_xdg_surface_v6->surface->current.width; |
403 | view->natural_height = view->wlr_xdg_surface_v6->surface->current.height; | 403 | view->natural_height = view->wlr_xdg_surface_v6->surface->current.height; |
404 | } | 404 | } |
405 | struct sway_server_decoration *deco = | ||
406 | decoration_from_surface(xdg_surface->surface); | ||
407 | bool csd = !deco || deco->wlr_server_decoration->mode | ||
408 | == WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT; | ||
405 | 409 | ||
406 | view_map(view, view->wlr_xdg_surface_v6->surface); | 410 | view_map(view, view->wlr_xdg_surface_v6->surface, |
411 | xdg_surface->toplevel->client_pending.fullscreen, csd); | ||
407 | 412 | ||
408 | struct sway_server_decoration *deco = | ||
409 | decoration_from_surface(xdg_surface->surface); | ||
410 | bool csd = !deco || deco->wlr_server_decoration->mode == | ||
411 | WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT; | ||
412 | view_update_csd_from_client(view, csd); | ||
413 | |||
414 | if (xdg_surface->toplevel->client_pending.fullscreen) { | ||
415 | container_set_fullscreen(view->container, true); | ||
416 | arrange_workspace(view->container->workspace); | ||
417 | } else { | ||
418 | if (view->container->parent) { | ||
419 | arrange_container(view->container->parent); | ||
420 | } else if (view->container->workspace) { | ||
421 | arrange_workspace(view->container->workspace); | ||
422 | } | ||
423 | } | ||
424 | transaction_commit_dirty(); | 413 | transaction_commit_dirty(); |
425 | 414 | ||
426 | xdg_shell_v6_view->commit.notify = handle_commit; | 415 | xdg_shell_v6_view->commit.notify = handle_commit; |
diff --git a/sway/desktop/xwayland.c b/sway/desktop/xwayland.c index ebf2131e..066556b8 100644 --- a/sway/desktop/xwayland.c +++ b/sway/desktop/xwayland.c | |||
@@ -405,18 +405,8 @@ static void handle_map(struct wl_listener *listener, void *data) { | |||
405 | xwayland_view->commit.notify = handle_commit; | 405 | xwayland_view->commit.notify = handle_commit; |
406 | 406 | ||
407 | // Put it back into the tree | 407 | // Put it back into the tree |
408 | view_map(view, xsurface->surface); | 408 | view_map(view, xsurface->surface, xsurface->fullscreen, false); |
409 | 409 | ||
410 | if (xsurface->fullscreen) { | ||
411 | container_set_fullscreen(view->container, true); | ||
412 | arrange_workspace(view->container->workspace); | ||
413 | } else { | ||
414 | if (view->container->parent) { | ||
415 | arrange_container(view->container->parent); | ||
416 | } else if (view->container->workspace) { | ||
417 | arrange_workspace(view->container->workspace); | ||
418 | } | ||
419 | } | ||
420 | transaction_commit_dirty(); | 410 | transaction_commit_dirty(); |
421 | } | 411 | } |
422 | 412 | ||
diff --git a/sway/tree/view.c b/sway/tree/view.c index e613ac0b..bdd5f830 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c | |||
@@ -535,7 +535,8 @@ static bool should_focus(struct sway_view *view) { | |||
535 | return len == 0; | 535 | return len == 0; |
536 | } | 536 | } |
537 | 537 | ||
538 | void view_map(struct sway_view *view, struct wlr_surface *wlr_surface) { | 538 | void view_map(struct sway_view *view, struct wlr_surface *wlr_surface, |
539 | bool fullscreen, bool decoration) { | ||
539 | if (!sway_assert(view->surface == NULL, "cannot map mapped view")) { | 540 | if (!sway_assert(view->surface == NULL, "cannot map mapped view")) { |
540 | return; | 541 | return; |
541 | } | 542 | } |
@@ -586,13 +587,28 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface) { | |||
586 | } | 587 | } |
587 | } | 588 | } |
588 | 589 | ||
589 | if (should_focus(view)) { | ||
590 | input_manager_set_focus(input_manager, &view->container->node); | ||
591 | } | ||
592 | |||
593 | view_update_title(view, false); | 590 | view_update_title(view, false); |
594 | container_update_representation(view->container); | 591 | container_update_representation(view->container); |
595 | view_execute_criteria(view); | 592 | view_execute_criteria(view); |
593 | |||
594 | if (decoration) { | ||
595 | view_update_csd_from_client(view, decoration); | ||
596 | } | ||
597 | |||
598 | if (fullscreen) { | ||
599 | container_set_fullscreen(view->container, true); | ||
600 | arrange_workspace(view->container->workspace); | ||
601 | } else { | ||
602 | if (view->container->parent) { | ||
603 | arrange_container(view->container->parent); | ||
604 | } else if (view->container->workspace) { | ||
605 | arrange_workspace(view->container->workspace); | ||
606 | } | ||
607 | } | ||
608 | |||
609 | if (should_focus(view)) { | ||
610 | input_manager_set_focus(input_manager, &view->container->node); | ||
611 | } | ||
596 | } | 612 | } |
597 | 613 | ||
598 | void view_unmap(struct sway_view *view) { | 614 | void view_unmap(struct sway_view *view) { |