From c646c7bd1b72cca45887d076dbcfc3b875a7ebb8 Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Sat, 6 Jan 2024 21:36:12 +0000 Subject: [PATCH] view: constrain window size to that of usable area ...on first map (when application is started). Fixes #1399 --- include/view.h | 1 + src/view.c | 19 +++++++++++++++++++ src/xdg.c | 2 ++ src/xwayland.c | 2 ++ 4 files changed, 24 insertions(+) diff --git a/include/view.h b/include/view.h index 8c1c5491..c446df8b 100644 --- a/include/view.h +++ b/include/view.h @@ -407,6 +407,7 @@ void view_center(struct view *view, const struct wlr_box *ref); * @view: view to be placed */ void view_place_initial(struct view *view); +void view_constrain_size_to_that_of_usable_area(struct view *view); void view_restore_to(struct view *view, struct wlr_box geometry); void view_set_untiled(struct view *view); diff --git a/src/view.c b/src/view.c index 72f23812..b39bde17 100644 --- a/src/view.c +++ b/src/view.c @@ -731,6 +731,25 @@ view_place_initial(struct view *view) view_center(view, NULL); } +void +view_constrain_size_to_that_of_usable_area(struct view *view) +{ + if (!view || !view->output) { + return; + } + struct wlr_box *usable_area = &view->output->usable_area; + struct border margin = ssd_get_margin(view->ssd); + struct wlr_box box = { + .x = view->pending.x, + .y = view->pending.y, + .width = MIN(usable_area->width - margin.left - margin.right, + view->pending.width), + .height = MIN(usable_area->height - margin.top - margin.bottom, + view->pending.height), + }; + view_move_resize(view, box); +} + static void view_apply_natural_geometry(struct view *view) { diff --git a/src/xdg.c b/src/xdg.c index 544a0676..de106f8a 100644 --- a/src/xdg.c +++ b/src/xdg.c @@ -420,6 +420,8 @@ position_xdg_toplevel_view(struct view *view) struct wlr_xdg_toplevel *parent_xdg_toplevel = xdg_toplevel_from_view(view)->parent; + view_constrain_size_to_that_of_usable_area(view); + if (parent_xdg_toplevel) { /* Child views are center-aligned relative to their parents */ struct view *parent = lookup_view_by_xdg_toplevel( diff --git a/src/xwayland.c b/src/xwayland.c index 86f7a1ae..b88daa87 100644 --- a/src/xwayland.c +++ b/src/xwayland.c @@ -505,6 +505,8 @@ set_initial_position(struct view *view, XCB_ICCCM_SIZE_HINT_US_POSITION | XCB_ICCCM_SIZE_HINT_P_POSITION)); + view_constrain_size_to_that_of_usable_area(view); + if (has_position) { /* * Make sure a floating view is onscreen. For a -- 2.52.0