xdg_shell: update wlr_toplevel size on client resizes

If a floating client resizes itself, sway updates several of its
internal dimensions to match but not wlr_toplevel. This means that the
next time wlroots sends a toplevel configure event, it can have wrong
coordinates that resize the client back to its old size. To fix this,
let's just use wlr_xdg_toplevel_set_size so the wlr_toplevel has the
same dimensions as sway.

Exactly the same as 0183b9d35d0ce750588e700e536b7d2e367b0d0a but the
logic is onlly applied to xdg_shell and not xwayland.
This commit is contained in:
Dudemanguy 2023-08-28 10:49:24 -05:00 committed by Ronan Pigott
parent 60a94b4916
commit 3d5ae9813d

View file

@ -294,6 +294,8 @@ static void handle_commit(struct wl_listener *listener, void *data) {
memcpy(&view->geometry, &new_geo, sizeof(struct wlr_box)); memcpy(&view->geometry, &new_geo, sizeof(struct wlr_box));
if (container_is_floating(view->container)) { if (container_is_floating(view->container)) {
view_update_size(view); view_update_size(view);
wlr_xdg_toplevel_set_size(view->wlr_xdg_toplevel, view->geometry.width,
view->geometry.height);
transaction_commit_dirty_client(); transaction_commit_dirty_client();
} else { } else {
view_center_surface(view); view_center_surface(view);