mirror of
https://github.com/swaywm/sway.git
synced 2024-12-29 16:36:26 +01:00
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
This commit is contained in:
parent
8dadfd42df
commit
892446a0b6
5 changed files with 36 additions and 48 deletions
|
@ -329,7 +329,8 @@ void view_destroy(struct sway_view *view);
|
||||||
|
|
||||||
void view_begin_destroy(struct sway_view *view);
|
void view_begin_destroy(struct sway_view *view);
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
void view_unmap(struct sway_view *view);
|
void view_unmap(struct sway_view *view);
|
||||||
|
|
||||||
|
|
|
@ -406,26 +406,18 @@ static void handle_map(struct wl_listener *listener, void *data) {
|
||||||
view->natural_height = view->wlr_xdg_surface->surface->current.height;
|
view->natural_height = view->wlr_xdg_surface->surface->current.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
view_map(view, view->wlr_xdg_surface->surface);
|
bool csd = false;
|
||||||
|
|
||||||
if (!view->xdg_decoration) {
|
if (!view->xdg_decoration) {
|
||||||
struct sway_server_decoration *deco =
|
struct sway_server_decoration *deco =
|
||||||
decoration_from_surface(xdg_surface->surface);
|
decoration_from_surface(xdg_surface->surface);
|
||||||
bool csd = !deco || deco->wlr_server_decoration->mode ==
|
csd = !deco || deco->wlr_server_decoration->mode ==
|
||||||
WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT;
|
WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT;
|
||||||
view_update_csd_from_client(view, csd);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xdg_surface->toplevel->client_pending.fullscreen) {
|
view_map(view, view->wlr_xdg_surface->surface,
|
||||||
container_set_fullscreen(view->container, true);
|
xdg_surface->toplevel->client_pending.fullscreen, csd);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
transaction_commit_dirty();
|
transaction_commit_dirty();
|
||||||
|
|
||||||
|
|
|
@ -402,25 +402,14 @@ static void handle_map(struct wl_listener *listener, void *data) {
|
||||||
view->natural_width = view->wlr_xdg_surface_v6->surface->current.width;
|
view->natural_width = view->wlr_xdg_surface_v6->surface->current.width;
|
||||||
view->natural_height = view->wlr_xdg_surface_v6->surface->current.height;
|
view->natural_height = view->wlr_xdg_surface_v6->surface->current.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
view_map(view, view->wlr_xdg_surface_v6->surface);
|
|
||||||
|
|
||||||
struct sway_server_decoration *deco =
|
struct sway_server_decoration *deco =
|
||||||
decoration_from_surface(xdg_surface->surface);
|
decoration_from_surface(xdg_surface->surface);
|
||||||
bool csd = !deco || deco->wlr_server_decoration->mode ==
|
bool csd = !deco || deco->wlr_server_decoration->mode
|
||||||
WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT;
|
== WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT;
|
||||||
view_update_csd_from_client(view, csd);
|
|
||||||
|
view_map(view, view->wlr_xdg_surface_v6->surface,
|
||||||
|
xdg_surface->toplevel->client_pending.fullscreen, csd);
|
||||||
|
|
||||||
if (xdg_surface->toplevel->client_pending.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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
transaction_commit_dirty();
|
transaction_commit_dirty();
|
||||||
|
|
||||||
xdg_shell_v6_view->commit.notify = handle_commit;
|
xdg_shell_v6_view->commit.notify = handle_commit;
|
||||||
|
|
|
@ -405,18 +405,8 @@ static void handle_map(struct wl_listener *listener, void *data) {
|
||||||
xwayland_view->commit.notify = handle_commit;
|
xwayland_view->commit.notify = handle_commit;
|
||||||
|
|
||||||
// Put it back into the tree
|
// Put it back into the tree
|
||||||
view_map(view, xsurface->surface);
|
view_map(view, xsurface->surface, xsurface->fullscreen, false);
|
||||||
|
|
||||||
if (xsurface->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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
transaction_commit_dirty();
|
transaction_commit_dirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -535,7 +535,8 @@ static bool should_focus(struct sway_view *view) {
|
||||||
return len == 0;
|
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")) {
|
if (!sway_assert(view->surface == NULL, "cannot map mapped view")) {
|
||||||
return;
|
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);
|
view_update_title(view, false);
|
||||||
container_update_representation(view->container);
|
container_update_representation(view->container);
|
||||||
view_execute_criteria(view);
|
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) {
|
void view_unmap(struct sway_view *view) {
|
||||||
|
|
Loading…
Reference in a new issue