From f9103d4381cab9d6c10024ab8fbcdb35b14ef239 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sat, 16 Apr 2022 11:26:28 +0200 Subject: [PATCH] wayland: add helper functions wayl_win_csd_{titlebar,borders}_visible() --- render.c | 33 +++++++++++++++------------------ wayland.c | 20 ++++++++++++++++++-- wayland.h | 3 +++ 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/render.c b/render.c index ba470fa2..0d5f4286 100644 --- a/render.c +++ b/render.c @@ -1560,15 +1560,17 @@ get_csd_data(const struct terminal *term, enum csd_surface surf_idx) { xassert(term->window->csd_mode == CSD_YES); + const bool borders_visible = wayl_win_csd_borders_visible(term->window); + const bool title_visible = wayl_win_csd_titlebar_visible(term->window); + /* Only title bar is rendered in maximized mode */ - const int border_width = !term->window->is_maximized + const int border_width = borders_visible ? term->conf->csd.border_width * term->scale : 0; - const int title_height = term->window->is_fullscreen - ? 0 - : term->conf->csd.title_height * term->scale; + const int title_height = title_visible + ? term->conf->csd.title_height * term->scale : 0; - const int button_width = !term->window->is_fullscreen + const int button_width = title_visible ? term->conf->csd.button_width * term->scale : 0; const int button_close_width = term->width >= 1 * button_width @@ -3575,11 +3577,9 @@ maybe_resize(struct terminal *term, int width, int height, bool force) width = term->conf->size.width; height = term->conf->size.height; - if (term->window->csd_mode == CSD_YES) { - /* Take CSD title bar into account */ - xassert(!term->window->is_fullscreen); + /* Take CSDs into account */ + if (wayl_win_csd_titlebar_visible(term->window)) height -= term->conf->csd.title_height; - } width *= scale; height *= scale; @@ -3760,17 +3760,14 @@ damage_view: #endif { - bool title_shown = - !term->window->is_fullscreen && - term->window->csd_mode == CSD_YES; + const bool title_shown = wayl_win_csd_titlebar_visible(term->window); + const bool border_shown = wayl_win_csd_borders_visible(term->window); - bool border_shown = - !term->window->is_fullscreen && - !term->window->is_maximized && - term->window->csd_mode == CSD_YES; + const int title_height = + title_shown ? term->conf->csd.title_height : 0; + const int border_width = + border_shown ? term->conf->csd.border_width_visible : 0; - int title_height = title_shown ? term->conf->csd.title_height : 0; - int border_width = border_shown ? term->conf->csd.border_width_visible : 0; xdg_surface_set_window_geometry( term->window->xdg_surface, -border_width, diff --git a/wayland.c b/wayland.c index d77cd65d..020ff914 100644 --- a/wayland.c +++ b/wayland.c @@ -747,9 +747,10 @@ xdg_surface_configure(void *data, struct xdg_surface *xdg_surface, csd_destroy(win); if (enable_csd && new_width > 0 && new_height > 0) { - new_height -= win->term->conf->csd.title_height; + if (wayl_win_csd_titlebar_visible(win)) + new_height -= win->term->conf->csd.title_height; - if (!win->is_maximized) { + if (wayl_win_csd_borders_visible(win)) { new_height -= 2 * win->term->conf->csd.border_width_visible; new_width -= 2 * win->term->conf->csd.border_width_visible; } @@ -1763,6 +1764,21 @@ wayl_win_set_urgent(struct wl_window *win) #endif } +bool +wayl_win_csd_titlebar_visible(const struct wl_window *win) +{ + return win->csd_mode == CSD_YES && + !win->is_fullscreen; +} + +bool +wayl_win_csd_borders_visible(const struct wl_window *win) +{ + return win->csd_mode == CSD_YES && + !win->is_fullscreen && + !win->is_maximized; +} + bool wayl_win_subsurface_new_with_custom_parent( struct wl_window *win, struct wl_surface *parent, diff --git a/wayland.h b/wayland.h index e593073e..62ab1d5f 100644 --- a/wayland.h +++ b/wayland.h @@ -511,6 +511,9 @@ void wayl_win_destroy(struct wl_window *win); bool wayl_win_set_urgent(struct wl_window *win); +bool wayl_win_csd_titlebar_visible(const struct wl_window *win); +bool wayl_win_csd_borders_visible(const struct wl_window *win); + bool wayl_win_subsurface_new( struct wl_window *win, struct wl_surf_subsurf *surf); bool wayl_win_subsurface_new_with_custom_parent(