From 892446a0b6eba9d14cdf7462c86565a7a60d12ae Mon Sep 17 00:00:00 2001 From: Rouven Czerwinski Date: Sat, 13 Oct 2018 21:01:02 +0200 Subject: view: move arrange_workspace into view_map For mouse_warping cursor to correctly work on newly spawned containers, the workspace needs to be arranged before the cursor is warped. The shell functions each implement their own fullscreen and arrange checks, move them into the view_map function and pass their states via boolean arguments. Fixes #2819 --- sway/tree/view.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'sway/tree') 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) { return len == 0; } -void view_map(struct sway_view *view, struct wlr_surface *wlr_surface) { +void view_map(struct sway_view *view, struct wlr_surface *wlr_surface, + bool fullscreen, bool decoration) { if (!sway_assert(view->surface == NULL, "cannot map mapped view")) { return; } @@ -586,13 +587,28 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface) { } } - if (should_focus(view)) { - input_manager_set_focus(input_manager, &view->container->node); - } - view_update_title(view, false); container_update_representation(view->container); view_execute_criteria(view); + + if (decoration) { + view_update_csd_from_client(view, decoration); + } + + if (fullscreen) { + container_set_fullscreen(view->container, true); + arrange_workspace(view->container->workspace); + } else { + if (view->container->parent) { + arrange_container(view->container->parent); + } else if (view->container->workspace) { + arrange_workspace(view->container->workspace); + } + } + + if (should_focus(view)) { + input_manager_set_focus(input_manager, &view->container->node); + } } void view_unmap(struct sway_view *view) { -- cgit v1.2.3 From 1f0aeae33591fb46b3f8a91ca91975daf2a8bbf9 Mon Sep 17 00:00:00 2001 From: Rouven Czerwinski Date: Mon, 15 Oct 2018 16:21:38 +0200 Subject: view: rewarp cursor during view_unmap If the cursor is warped during the destruction of the workspace, we end up in the wrong position. Warp the cursor after arrange_workspace() so we end up in the correct position. --- sway/tree/view.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'sway/tree') diff --git a/sway/tree/view.c b/sway/tree/view.c index bdd5f830..4b9bbfd0 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -637,7 +637,16 @@ void view_unmap(struct sway_view *view) { struct sway_seat *seat; wl_list_for_each(seat, &input_manager->seats, link) { - cursor_send_pointer_motion(seat->cursor, 0, true); + if (config->mouse_warping == WARP_CONTAINER) { + struct sway_node *node = seat_get_focus(seat); + if (node && node->type == N_CONTAINER) { + cursor_warp_to_container(seat->cursor, node->sway_container); + } else if (node && node->type == N_WORKSPACE) { + cursor_warp_to_workspace(seat->cursor, node->sway_workspace); + } + } else { + cursor_send_pointer_motion(seat->cursor, 0, true); + } } transaction_commit_dirty(); -- cgit v1.2.3