From e8ec8ea7ff9954f7e62f4211c065a38130ac9355 Mon Sep 17 00:00:00 2001 From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Sun, 17 Sep 2023 22:41:46 +0200 Subject: [PATCH] src/ssd: use view->ssd_titlebar_hidden for ssd_thickness calculations Before this patch we were using the internal .enabled flag of the titlebar tree node. This failed due to ssd_thickness() not having view->ssd assigned when initially called. Instead of assigning view->ssd within ssd_create() we just always use the view boolean flag directly. This fixes an issue where a border-only view that has been snapped to an edge or region would have a gap in the size of the titlebar on top after a Reconfigure. Fixes #1083 --- include/ssd.h | 1 - src/ssd/ssd.c | 21 +++++++++++---------- src/view.c | 8 ++++++-- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/include/ssd.h b/include/ssd.h index a539a4a3..f1b27516 100644 --- a/include/ssd.h +++ b/include/ssd.h @@ -65,7 +65,6 @@ void ssd_set_active(struct ssd *ssd, bool active); void ssd_update_title(struct ssd *ssd); void ssd_update_geometry(struct ssd *ssd); void ssd_destroy(struct ssd *ssd); -bool ssd_titlebar_is_hidden(struct ssd *ssd); void ssd_titlebar_hide(struct ssd *ssd); void ssd_enable_keybind_inhibit_indicator(struct ssd *ssd, bool enable); diff --git a/src/ssd/ssd.c b/src/ssd/ssd.c index 54d6070b..ef821b86 100644 --- a/src/ssd/ssd.c +++ b/src/ssd/ssd.c @@ -21,6 +21,13 @@ ssd_thickness(struct view *view) /* * Check preconditions for displaying SSD. Note that this * needs to work even before ssd_create() has been called. + * + * For that reason we are not using the .enabled state of + * the titlebar node here but rather check for the view + * boolean. If we were to use the .enabled state this would + * cause issues on Reconfigure events with views which were + * in border-only deco mode as view->ssd would only be set + * after ssd_create() returns. */ if (!view->ssd_enabled || view->fullscreen) { return (struct border){ 0 }; @@ -30,7 +37,7 @@ ssd_thickness(struct view *view) if (view->maximized) { struct border thickness = { 0 }; - if (!ssd_titlebar_is_hidden(view->ssd)) { + if (!view->ssd_titlebar_hidden) { thickness.top += theme->title_height; } return thickness; @@ -43,7 +50,7 @@ ssd_thickness(struct view *view) .right = theme->border_width, }; - if (ssd_titlebar_is_hidden(view->ssd)) { + if (view->ssd_titlebar_hidden) { thickness.top -= theme->title_height; } return thickness; @@ -177,8 +184,8 @@ ssd_create(struct view *view, bool active) ssd_extents_create(ssd); ssd_border_create(ssd); ssd_titlebar_create(ssd); - if (rc.ssd_keep_border && view->ssd_titlebar_hidden) { - /* Ensure we keep the old state when exiting fullscreen */ + if (view->ssd_titlebar_hidden) { + /* Ensure we keep the old state on Reconfigure or when exiting fullscreen */ ssd_titlebar_hide(ssd); } ssd->margin = ssd_thickness(view); @@ -231,12 +238,6 @@ ssd_update_geometry(struct ssd *ssd) ssd->state.geometry = current; } -bool -ssd_titlebar_is_hidden(struct ssd *ssd) -{ - return ssd && !ssd->titlebar.tree->node.enabled; -} - void ssd_titlebar_hide(struct ssd *ssd) { diff --git a/src/view.c b/src/view.c index 8628c7ee..51798e94 100644 --- a/src/view.c +++ b/src/view.c @@ -740,9 +740,13 @@ view_toggle_decorations(struct view *view) { assert(view); if (rc.ssd_keep_border && view->ssd_enabled && view->ssd - && !ssd_titlebar_is_hidden(view->ssd)) { - ssd_titlebar_hide(view->ssd); + && !view->ssd_titlebar_hidden) { + /* + * ssd_titlebar_hidden has to be set before calling + * ssd_titlebar_hide() to make ssd_thickness() happy. + */ view->ssd_titlebar_hidden = true; + ssd_titlebar_hide(view->ssd); if (!view_is_floating(view)) { view_apply_special_geometry(view); }