wayland: preempt render scheduling in ‘configure’ events

A configure event must be “committed”. In case of resizing, that means
rendering a new frame and committing that surface.

render_resize() will resize the grid and *schedule* a render
refresh. However, if one is already pending, the refresh will take a
very (relatively) long time - until the next frame callback is
received.

This poses a problem when the window is hidden, since in this case,
the frame callback *never* comes. This in turn means we fail to commit
a new surface in response to the ‘configure’ event. And that means the
compositor needs to wait for a transaction timeout before continuing.

The end effect is very slow and jerky window resizing when a hidden
foot window is being resized.

This can happen in tiled compositors, like Sway, where a window can be
tabbed (and thus invisible), but still resized when its container is
resized.

Closes #190
This commit is contained in:
Daniel Eklöf 2020-11-10 19:20:35 +01:00
parent c9de30e2bc
commit 02ee570c27
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 16 additions and 5 deletions

View file

@ -68,6 +68,8 @@
not possible to add a command to these actions when used in mouse
bindings, making them useless
(https://codeberg.org/dnkl/foot/issues/183).
* Resize very slow when window is hidden
(https://codeberg.org/dnkl/foot/issues/190).
### Security