XdgToplevel: update clip on geometry x/y change
Currently if a client commits a geometry with a different x/y value but does not change the width/height we might not update the clip coordinates of the surface tree, potentially causing part of the surface to be unintentionally clipped off. To fix this, check for change in geometry x/y as well as width/height on commit if the client is not currently part of an ongoing transaction. Firefox for example it seems may respond to a configure non-atomically with multiple commits: 1. commit new buffer and new geometry of a new width/height. 2. commit again with the same width/height but a new geometry x/y. I don't think this is technically a bug but it doesn't seem like the most efficient way to do things. I think this may also cause imperfect frames. In any case, this should no longer cause river to crop off part of firefox's surface.
This commit is contained in:
parent
d1dc873408
commit
9bbd34a0e3
@ -352,6 +352,11 @@ fn handleCommit(listener: *wl.Listener(*wlr.Surface), _: *wlr.Surface) void {
|
||||
view.pending.box.height = toplevel.geometry.height;
|
||||
view.current = view.inflight;
|
||||
view.updateSceneState();
|
||||
} else if (old_geometry.x != toplevel.geometry.x or
|
||||
old_geometry.y != toplevel.geometry.y)
|
||||
{
|
||||
// We need to update the surface clip box to reflect the geometry change.
|
||||
view.updateSceneState();
|
||||
}
|
||||
},
|
||||
// If the client has not yet acked our configure, we need to send a
|
||||
|
Loading…
Reference in New Issue
Block a user