wayland: fix CSD decorations glitch when closing

In rare cases destroying subsurfaces before the main surface could
result in a frame where the window is still shown, but decorations
got hidden, right before the window itself disappears.
This commit is contained in:
Kirill Chibisov 2024-04-19 14:40:00 +04:00 committed by GitHub
parent 4f47a4e793
commit 9ab4c03e89
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 8 additions and 3 deletions

View file

@ -253,3 +253,4 @@ changelog entry.
- On Web, fix setting cursor icon overriding cursor visibility.
- On Windows, fix cursor not confined to center of window when grabbed and hidden.
- On macOS, fix sequence of mouse events being out of order when dragging on the trackpad.
- On Wayland, fix decoration glitch on close with some compositors

View file

@ -57,9 +57,6 @@ pub struct WindowState {
/// The connection to Wayland server.
pub connection: Connection,
/// The window frame, which is created from the configure request.
frame: Option<WinitFrame>,
/// The `Shm` to set cursor.
pub shm: WlShm,
@ -155,6 +152,13 @@ pub struct WindowState {
/// The underlying SCTK window.
pub window: Window,
// NOTE: The spec says that destroying parent(`window` in our case), will unmap the
// subsurfaces. Thus to achieve atomic unmap of the client, drop the decorations
// frame after the `window` is dropped. To achieve that we rely on rust's struct
// field drop order guarantees.
/// The window frame, which is created from the configure request.
frame: Option<WinitFrame>,
}
impl WindowState {