diff --git a/clients/window.c b/clients/window.c index b82a93eb..f44bf643 100644 --- a/clients/window.c +++ b/clients/window.c @@ -3787,6 +3787,15 @@ widget_schedule_resize(struct widget *widget, int32_t width, int32_t height) 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, @@ -3836,7 +3845,14 @@ handle_surface_configure(void *data, struct xdg_surface *xdg_surface, } 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, diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index f22cef8e..fca1c007 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -1832,6 +1832,11 @@ surface_resize(struct shell_surface *shsurf, 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,