git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit05f3db1d6f00ae49e98a591b7dd8b50c0fd7fadd
parentdb73e392bf
authorIsaac Freund <[email protected]>
date2021-10-30 12:22
view: respect client size resize of floating views

mpv for example has key bindings to set the window size to a multiple of
the video resolution. This is a valid use case for client-size resizing
of the view and river should respect this if the view is floating.

 river/XdgToplevel.zig | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/river/XdgToplevel.zig b/river/XdgToplevel.zig
index e2a04fb..79eaff7 100644
--- a/river/XdgToplevel.zig
+++ b/river/XdgToplevel.zig
@@ -307,10 +307,15 @@ fn handleCommit(listener: *wl.Listener(*wlr.Surface), surface: *wlr.Surface) voi
         }
     } else {
         view.output.damage.addWhole();
-        // TODO: handle unexpected change in dimensions
-        if (!std.meta.eql(view.surface_box, new_box))
-            log.err("view changed size unexpectedly", .{});
+        const size_changed = !std.meta.eql(view.surface_box, new_box);
         view.surface_box = new_box;
+        // If the client has decided to resize itself and the view is floating,
+        // then respect that resize.
+        if (view.pending.float and size_changed) {
+            view.pending.box.width = new_box.width;
+            view.pending.box.height = new_box.height;
+            view.applyPending();
+        }
     }
 }