From 2995d0e8e06c77e51e47279f05eb328fa74b18c9 Mon Sep 17 00:00:00 2001 From: John Lindgren Date: Wed, 16 Nov 2022 16:46:52 -0500 Subject: [PATCH] view: Fix positioning of initially-maximized XWayland views map() in xwayland.c called ssd_create() but did not call view_apply_maximized_geometry() afterward, resulting in the decorations being displayed off-screen. Rather than calling view_apply_maximized_geometry() in more places, let's reuse the existing call in view_set_decorations(), and extend ssd_update_geometry() to call ssd_create() when needed. --- src/ssd/ssd.c | 6 ++++-- src/xdg.c | 6 +----- src/xwayland.c | 5 +---- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/ssd/ssd.c b/src/ssd/ssd.c index 6cb8ae13..f556b24d 100644 --- a/src/ssd/ssd.c +++ b/src/ssd/ssd.c @@ -169,16 +169,18 @@ ssd_create(struct view *view) void ssd_update_geometry(struct view *view) { - if (!view->ssd.tree || !view->scene_node) { + if (!view->scene_node) { return; } if (!view->ssd.enabled) { - if (view->ssd.tree->node.enabled) { + if (view->ssd.tree && view->ssd.tree->node.enabled) { wlr_scene_node_set_enabled(&view->ssd.tree->node, false); view->margin = ssd_thickness(view); } return; + } else if (!view->ssd.tree) { + ssd_create(view); } else if (!view->ssd.tree->node.enabled) { wlr_scene_node_set_enabled(&view->ssd.tree->node, true); view->margin = ssd_thickness(view); diff --git a/src/xdg.c b/src/xdg.c index 487a7b69..1d8815c3 100644 --- a/src/xdg.c +++ b/src/xdg.c @@ -303,11 +303,7 @@ xdg_toplevel_view_map(struct view *view) struct wlr_xdg_toplevel_requested *requested = &view->xdg_surface->toplevel->requested; foreign_toplevel_handle_create(view); - - view->ssd.enabled = has_ssd(view); - if (view->ssd.enabled) { - ssd_create(view); - } + view_set_decorations(view, has_ssd(view)); position_xdg_toplevel_view(view); if (!view->fullscreen && requested->fullscreen) { diff --git a/src/xwayland.c b/src/xwayland.c index b360b1c7..8bfa31a8 100644 --- a/src/xwayland.c +++ b/src/xwayland.c @@ -389,10 +389,7 @@ map(struct view *view) } if (!view->been_mapped) { - view->ssd.enabled = want_deco(view); - if (view->ssd.enabled) { - ssd_create(view); - } + view_set_decorations(view, want_deco(view)); if (!view->maximized && !view->fullscreen) { set_initial_position(view);