summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client.h20
-rw-r--r--dwl.c6
2 files changed, 24 insertions, 2 deletions
diff --git a/client.h b/client.h
index 191dcc5..c59b7a9 100644
--- a/client.h
+++ b/client.h
@@ -179,3 +179,23 @@ client_surface_at(Client *c, double cx, double cy, double *sx, double *sy)
#endif
return wlr_xdg_surface_surface_at(c->surface.xdg, cx, cy, sx, sy);
}
+
+static inline void
+client_min_size(Client *c, int *width, int *height)
+{
+ struct wlr_xdg_toplevel *toplevel;
+ struct wlr_xdg_toplevel_state *state;
+#ifdef XWAYLAND
+ if (client_is_x11(c)) {
+ struct wlr_xwayland_surface_size_hints *size_hints;
+ size_hints = c->surface.xwayland->size_hints;
+ *width = size_hints->min_width;
+ *height = size_hints->min_height;
+ return;
+ }
+#endif
+ toplevel = c->surface.xdg->toplevel;
+ state = &toplevel->current;
+ *width = state->min_width;
+ *height = state->min_height;
+}
diff --git a/dwl.c b/dwl.c
index c63dbe4..d2f0718 100644
--- a/dwl.c
+++ b/dwl.c
@@ -1636,11 +1636,13 @@ rendermon(struct wl_listener *listener, void *data)
void
resize(Client *c, int x, int y, int w, int h, int interact)
{
+ int min_width = 0, min_height = 0;
struct wlr_box *bbox = interact ? &sgeom : &c->mon->w;
+ client_min_size(c, &min_width, &min_height);
c->geom.x = x;
c->geom.y = y;
- c->geom.width = w;
- c->geom.height = h;
+ c->geom.width = MAX(min_width + 2 * c->bw, w);
+ c->geom.height = MAX(min_height + 2 * c->bw, h);
applybounds(c, bbox);
/* Update scene-graph, including borders */