...on first map (when application is started).
Fixes #1399
* @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);
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)
{
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(
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