diff options
Diffstat (limited to 'sway')
-rw-r--r-- | sway/desktop/output.c | 2 | ||||
-rw-r--r-- | sway/desktop/xdg_shell.c | 16 | ||||
-rw-r--r-- | sway/desktop/xdg_shell_v6.c | 10 | ||||
-rw-r--r-- | sway/desktop/xwayland.c | 10 | ||||
-rw-r--r-- | sway/tree/container.c | 13 | ||||
-rw-r--r-- | sway/tree/view.c | 13 |
6 files changed, 48 insertions, 16 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c index b55a3962..541d765d 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -870,7 +870,7 @@ static void render_floating_container(struct sway_output *soutput, render_titlebar(soutput, damage, con, con->current.swayc_x, con->current.swayc_y, con->current.swayc_width, colors, title_texture, marks_texture); - } else { + } else if (con->current.border != B_NONE) { render_top_border(soutput, damage, con, colors); } render_view(soutput, damage, con, colors); diff --git a/sway/desktop/xdg_shell.c b/sway/desktop/xdg_shell.c index 0f45399d..da3a1cdd 100644 --- a/sway/desktop/xdg_shell.c +++ b/sway/desktop/xdg_shell.c @@ -108,6 +108,19 @@ static void set_activated(struct sway_view *view, bool activated) { } } +static void set_tiled(struct sway_view *view, bool tiled) { + if (xdg_shell_view_from_view(view) == NULL) { + return; + } + struct wlr_xdg_surface *surface = view->wlr_xdg_surface; + enum wlr_edges edges = WLR_EDGE_NONE; + if (tiled) { + edges = WLR_EDGE_LEFT | WLR_EDGE_RIGHT | WLR_EDGE_TOP | + WLR_EDGE_BOTTOM; + } + wlr_xdg_toplevel_set_tiled(surface, edges); +} + static void set_fullscreen(struct sway_view *view, bool fullscreen) { if (xdg_shell_view_from_view(view) == NULL) { return; @@ -157,6 +170,7 @@ static const struct sway_view_impl view_impl = { .get_string_prop = get_string_prop, .configure = configure, .set_activated = set_activated, + .set_tiled = set_tiled, .set_fullscreen = set_fullscreen, .wants_floating = wants_floating, .for_each_surface = for_each_surface, @@ -288,8 +302,6 @@ void handle_xdg_shell_surface(struct wl_listener *listener, void *data) { wlr_log(L_DEBUG, "New xdg_shell toplevel title='%s' app_id='%s'", xdg_surface->toplevel->title, xdg_surface->toplevel->app_id); wlr_xdg_surface_ping(xdg_surface); - wlr_xdg_toplevel_set_tiled(xdg_surface, WLR_EDGE_LEFT | WLR_EDGE_RIGHT | - WLR_EDGE_TOP | WLR_EDGE_BOTTOM); struct sway_xdg_shell_view *xdg_shell_view = calloc(1, sizeof(struct sway_xdg_shell_view)); diff --git a/sway/desktop/xdg_shell_v6.c b/sway/desktop/xdg_shell_v6.c index b296f1a8..69819280 100644 --- a/sway/desktop/xdg_shell_v6.c +++ b/sway/desktop/xdg_shell_v6.c @@ -108,6 +108,14 @@ static void set_activated(struct sway_view *view, bool activated) { } } +static void set_tiled(struct sway_view *view, bool tiled) { + if (xdg_shell_v6_view_from_view(view) == NULL) { + return; + } + struct wlr_xdg_surface_v6 *surface = view->wlr_xdg_surface_v6; + wlr_xdg_toplevel_v6_set_maximized(surface, tiled); +} + static void set_fullscreen(struct sway_view *view, bool fullscreen) { if (xdg_shell_v6_view_from_view(view) == NULL) { return; @@ -158,6 +166,7 @@ static const struct sway_view_impl view_impl = { .get_string_prop = get_string_prop, .configure = configure, .set_activated = set_activated, + .set_tiled = set_tiled, .set_fullscreen = set_fullscreen, .wants_floating = wants_floating, .for_each_surface = for_each_surface, @@ -284,7 +293,6 @@ void handle_xdg_shell_v6_surface(struct wl_listener *listener, void *data) { wlr_log(L_DEBUG, "New xdg_shell_v6 toplevel title='%s' app_id='%s'", xdg_surface->toplevel->title, xdg_surface->toplevel->app_id); wlr_xdg_surface_v6_ping(xdg_surface); - wlr_xdg_toplevel_v6_set_maximized(xdg_surface, true); struct sway_xdg_shell_v6_view *xdg_shell_v6_view = calloc(1, sizeof(struct sway_xdg_shell_v6_view)); diff --git a/sway/desktop/xwayland.c b/sway/desktop/xwayland.c index ad893248..6e63c505 100644 --- a/sway/desktop/xwayland.c +++ b/sway/desktop/xwayland.c @@ -200,6 +200,14 @@ static void set_activated(struct sway_view *view, bool activated) { wlr_xwayland_surface_activate(surface, activated); } +static void set_tiled(struct sway_view *view, bool tiled) { + if (xwayland_view_from_view(view) == NULL) { + return; + } + struct wlr_xwayland_surface *surface = view->wlr_xwayland_surface; + wlr_xwayland_surface_set_maximized(surface, tiled); +} + static void set_fullscreen(struct sway_view *view, bool fullscreen) { if (xwayland_view_from_view(view) == NULL) { return; @@ -258,6 +266,7 @@ static const struct sway_view_impl view_impl = { .get_int_prop = get_int_prop, .configure = configure, .set_activated = set_activated, + .set_tiled = set_tiled, .set_fullscreen = set_fullscreen, .wants_floating = wants_floating, .close = _close, @@ -307,7 +316,6 @@ static void handle_map(struct wl_listener *listener, void *data) { xwayland_view->commit.notify = handle_commit; // Put it back into the tree - wlr_xwayland_surface_set_maximized(xsurface, true); view_map(view, xsurface->surface); if (xsurface->fullscreen) { diff --git a/sway/tree/container.c b/sway/tree/container.c index ab3d9dbd..6f6137c4 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -522,21 +522,11 @@ static struct sway_container *container_at_view(struct sway_container *swayc, view_sx, view_sy, &_sx, &_sy); break; case SWAY_VIEW_XDG_SHELL_V6: - // the top left corner of the sway container is the - // coordinate of the top left corner of the window geometry - view_sx += sview->wlr_xdg_surface_v6->geometry.x; - view_sy += sview->wlr_xdg_surface_v6->geometry.y; - _surface = wlr_xdg_surface_v6_surface_at( sview->wlr_xdg_surface_v6, view_sx, view_sy, &_sx, &_sy); break; case SWAY_VIEW_XDG_SHELL: - // the top left corner of the sway container is the - // coordinate of the top left corner of the window geometry - view_sx += sview->wlr_xdg_surface->geometry.x; - view_sy += sview->wlr_xdg_surface->geometry.y; - _surface = wlr_xdg_surface_surface_at( sview->wlr_xdg_surface, view_sx, view_sy, &_sx, &_sy); @@ -954,6 +944,9 @@ void container_set_floating(struct sway_container *container, bool enable) { container_add_child(workspace, container); container->width = container->parent->width; container->height = container->parent->height; + if (container->type == C_VIEW) { + view_set_tiled(container->sway_view, true); + } container->is_sticky = false; container_reap_empty_recursive(workspace->sway_workspace->floating); } diff --git a/sway/tree/view.c b/sway/tree/view.c index 9f85bac0..6263bfb0 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -164,6 +164,9 @@ void view_init_floating(struct sway_view *view) { view->border_left = view->border_right = true; container_set_geometry_from_floating_view(view->swayc); + + // Don't maximize floating windows + view_set_tiled(view, false); } void view_autoconfigure(struct sway_view *view) { @@ -275,6 +278,7 @@ void view_autoconfigure(struct sway_view *view) { view->y = y; view->width = width; view->height = height; + view_set_tiled(view, true); } void view_set_activated(struct sway_view *view, bool activated) { @@ -283,6 +287,13 @@ void view_set_activated(struct sway_view *view, bool activated) { } } +void view_set_tiled(struct sway_view *view, bool tiled) { + view->border = tiled ? config->border : B_NONE; + if (view->impl->set_tiled) { + view->impl->set_tiled(view, tiled); + } +} + void view_set_fullscreen(struct sway_view *view, bool fullscreen) { if (view->is_fullscreen == fullscreen) { return; @@ -948,7 +959,7 @@ bool view_is_visible(struct sway_view *view) { // Check view isn't in a tabbed or stacked container on an inactive tab struct sway_seat *seat = input_manager_current_seat(input_manager); struct sway_container *container = view->swayc; - while (container->type != C_WORKSPACE) { + while (container->type != C_WORKSPACE && container->layout != L_FLOATING) { if (container->parent->layout == L_TABBED || container->parent->layout == L_STACKED) { if (seat_get_active_child(seat, container->parent) != container) { |