From db1d6fa308979cd49a0a73785046d2022ea32a5a Mon Sep 17 00:00:00 2001 From: John Lindgren Date: Thu, 9 Feb 2023 16:06:07 -0500 Subject: [PATCH] xdg: Fix positioning of initially-maximized views - Don't overwrite pending size in map() if it was already set - Don't reposition view in map() if maximized/fullscreen Also, as future-proofing in case we one day allow initially-tiled views, replace explicit maximized/fullscreen checks with view_is_floating(). --- src/xdg.c | 11 ++++++++--- src/xwayland.c | 4 ++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/xdg.c b/src/xdg.c index 8d39a03f..dcf41b6e 100644 --- a/src/xdg.c +++ b/src/xdg.c @@ -340,16 +340,21 @@ xdg_toplevel_view_map(struct view *view) * view_set_fullscreen/view_maximize() below). "Current" * dimensions remain zero until handle_commit(). */ - view->pending.width = xdg_surface->current.geometry.width; - view->pending.height = xdg_surface->current.geometry.height; + if (wlr_box_empty(&view->pending)) { + view->pending.width = + xdg_surface->current.geometry.width; + view->pending.height = + xdg_surface->current.geometry.height; + } - position_xdg_toplevel_view(view); if (!view->fullscreen && requested->fullscreen) { view_set_fullscreen(view, true, requested->fullscreen_output); } else if (!view->maximized && requested->maximized) { view_maximize(view, true, /*store_natural_geometry*/ true); + } else if (view_is_floating(view)) { + position_xdg_toplevel_view(view); } view_moved(view); diff --git a/src/xwayland.c b/src/xwayland.c index a6064ca8..09ca3cc1 100644 --- a/src/xwayland.c +++ b/src/xwayland.c @@ -534,7 +534,7 @@ map(struct view *view) if (!view->been_mapped) { view_set_decorations(view, want_deco(xwayland_surface)); - if (!view->maximized && !view->fullscreen) { + if (view_is_floating(view)) { set_initial_position(view, xwayland_surface); } @@ -549,7 +549,7 @@ map(struct view *view) view->been_mapped = true; } - if (view->ssd_enabled && !view->fullscreen && !view->maximized) { + if (view->ssd_enabled && view_is_floating(view)) { top_left_edge_boundary_check(view); }