wayland: Handle min/max sizes in fixed-size windows with viewports#14039
Conversation
e1df180 to
940d919
Compare
|
Should this go in for 3.4? |
|
It can't go in before the backported GNOME fixes are merged, or things will break for users on older versions. |
|
Just to note, the upstream changes are merged, and should ship in 48.7 later in November. |
3f84db6 to
683041d
Compare
|
Tagging this to go in early in the 3.6 cycle. The changes are upstream in GNOME, but they still need time to propagate and be backported where required, and I have some other windowing work that stacked nicely on top of this, regarding how windows with a min/max size and aspect are handled when the compositor demands that the window be a certain size, such as with maximized or tiled windows. |
683041d to
feb5728
Compare
780f96d to
7b44d01
Compare
7b44d01 to
e924f9d
Compare
e924f9d to
ba83f0c
Compare
fecebf2 to
2af0c6b
Compare
5cfec26 to
4051e8b
Compare
0ebb1e3 to
590056a
Compare
|
GNOME has backported and pushed the requires fixes some time ago, I've been running this locally for a couple of months while refining it, and it seems to be ready and regression free at this point. Going to look this over one last time over the weekend, and it should be good for wider testing in 3.6. |
590056a to
66eb9e7
Compare
Wayland is sometimes at-odds with clients that want to enforce an aspect ratio or min/max window size, as certain window states have dimensions that either must be obeyed (maximized), or will give terrible results if they aren't (tiled). Use a viewport and a masking subsurface to handle cases where surfaces are unable to match the exact window size. The changes made to accommodate this also catches some additional windowing related edge-cases, simplifies synchronization, and prevents commits before a buffer has been attached to the surface.
66eb9e7 to
03e3149
Compare
|
One last little cleanup, the build passes, and this should be good to go. |
The associated surface commit causes a warning (previously a crash) on GNOME + libdecor when clients enter fullscreen before the initial buffer commit.
This was only ever needed on GNOME, and is fixed in GNOME 49, but is waiting on upstream backports: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4681 and https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4680
This also cleans up some additional edge-case window handling cases and fixes the issue where Wayland is sometimes at-odds with clients that want to enforce an aspect ratio or min/max window size, as certain window states have dimensions that either must be obeyed (maximized), or will give terrible results if they aren't (tiled). Viewports and a masking subsurface are used to handle cases where surfaces are unable to match the exact window size. The behavior of windows with a min/max limit is much nicer on tiling compositors in particular.
Fixes #14032