window_schedule_resize(widget->window, width, height);
}
+static int
+window_get_shadow_margin(struct window *window)
+{
+ if (window->frame)
+ return frame_get_shadow_margin(window->frame->frame);
+ else
+ return 0;
+}
+
static void
handle_surface_configure(void *data, struct xdg_surface *xdg_surface,
int32_t width, int32_t height,
}
if (width > 0 && height > 0) {
- window_schedule_resize(window, width, height);
+ /* The width / height params are for window geometry,
+ * but window_schedule_resize takes allocation. Add
+ * on the shadow margin to get the difference. */
+ int margin = window_get_shadow_margin(window);
+
+ window_schedule_resize(window,
+ width + margin * 2,
+ height + margin * 2);
} else {
window_schedule_resize(window,
window->saved_allocation.width,
surface_subsurfaces_boundingbox(shsurf->surface, NULL, NULL,
&resize->width, &resize->height);
+ resize->width -= shsurf->margin.left;
+ resize->width -= shsurf->margin.right;
+ resize->height -= shsurf->margin.top;
+ resize->height -= shsurf->margin.bottom;
+
shsurf->resize_edges = edges;
shell_surface_state_changed(shsurf);
shell_grab_start(&resize->base, &resize_grab_interface, shsurf,