From c639cdba0608e66c700c74c524a5b3690bb0f065 Mon Sep 17 00:00:00 2001 From: John Lindgren Date: Sat, 18 Feb 2023 00:55:42 -0500 Subject: [PATCH] xdg: Save natural_geometry.x/y with initially maximized view Fixes an issue where, if Thunar was started maximized, it would un-maximize to the top-left corner rather than the center. --- src/xdg.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/xdg.c b/src/xdg.c index 99b54b75..1d1496cc 100644 --- a/src/xdg.c +++ b/src/xdg.c @@ -332,6 +332,19 @@ xdg_toplevel_view_map(struct view *view) xdg_surface->current.geometry.height; } + /* + * Set initial "pending" position for floating views. + * Do this before view_set_fullscreen/view_maximize() so + * that the position is saved with the natural geometry. + * + * FIXME: the natural geometry is not saved if either + * handle_request_fullscreen/handle_request_maximize() + * is called before map (try "foot --maximized"). + */ + if (view_is_floating(view)) { + position_xdg_toplevel_view(view); + } + if (!view->fullscreen && requested->fullscreen) { struct output *output = output_from_wlr_output( view->server, requested->fullscreen_output); @@ -339,10 +352,15 @@ xdg_toplevel_view_map(struct view *view) } 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); } + /* + * Set initial "current" position directly before + * calling view_moved() to reduce flicker + */ + view->current.x = view->pending.x; + view->current.y = view->pending.y; + view_moved(view); view->been_mapped = true; }