Skip to content

Commit

Permalink
[WIP] move arrange into view_map
Browse files Browse the repository at this point in the history
not sure about the decorations and whether decorations and fullscreen have to be
passed as arguments.

Fixes swaywm#2819
  • Loading branch information
Emantor committed Oct 13, 2018
1 parent 8dadfd4 commit 5013022
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 48 deletions.
2 changes: 1 addition & 1 deletion include/sway/tree/view.h
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,7 @@ void view_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);

Expand Down
21 changes: 6 additions & 15 deletions sway/desktop/xdg_shell.c
Original file line number Diff line number Diff line change
Expand Up @@ -406,27 +406,18 @@ static void handle_map(struct wl_listener *listener, void *data) {
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) {
struct sway_server_decoration *deco =
decoration_from_surface(xdg_surface->surface);
bool csd = !deco || deco->wlr_server_decoration->mode ==
WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT;
view_update_csd_from_client(view, csd);
}
decoration_from_surface(xdg_surface->surface);
csd = !deco || deco->wlr_server_decoration->mode ==
WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT;

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);
}
}

view_map(view, view->wlr_xdg_surface->surface, xdg_surface->toplevel->client_pending.fullscreen, csd);

transaction_commit_dirty();

xdg_shell_view->commit.notify = handle_commit;
Expand Down
20 changes: 4 additions & 16 deletions sway/desktop/xdg_shell_v6.c
Original file line number Diff line number Diff line change
Expand Up @@ -402,25 +402,13 @@ static void handle_map(struct wl_listener *listener, void *data) {
view->natural_width = view->wlr_xdg_surface_v6->surface->current.width;
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 =
decoration_from_surface(xdg_surface->surface);
decoration_from_surface(xdg_surface->surface);
bool csd = !deco || deco->wlr_server_decoration->mode ==
WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT;
view_update_csd_from_client(view, csd);
WLR_SERVER_DECORATION_MANAGER_MODE_CLIENT;

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();

xdg_shell_v6_view->commit.notify = handle_commit;
Expand Down
12 changes: 1 addition & 11 deletions sway/desktop/xwayland.c
Original file line number Diff line number Diff line change
Expand Up @@ -405,18 +405,8 @@ static void handle_map(struct wl_listener *listener, void *data) {
xwayland_view->commit.notify = handle_commit;

// 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();
}

Expand Down
26 changes: 21 additions & 5 deletions sway/tree/view.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit 5013022

Please sign in to comment.