Commit 66da95a1 authored by Olivier Fourdan's avatar Olivier Fourdan Committed by Olivier Fourdan

xwayland: Do not discard frame callbacks on allow commits

Currently, when a X11 client (usually the X11 window manager from a
Wayland compositor) changes the value of the X11 property
`_XWAYLAND_ALLOW_COMMITS` from `false` to `true`, all pending frame
callbacks on the window are discarded so that the commit occurs
immediately.

Weston uses that mechanism to prevent the content of the window from
showing before it's ready when mapping the window initially, but
discarding the pending frame callbacks has no effect on the initial
mapping of the X11 window since at that point there cannot be any frame
callback on a surface which hasn't been committed yet anyway.

However, discarding pending frame callbacks can be problematic if we
were to use the same `_XWAYLAND_ALLOW_COMMITS` mechanism to prevent
damages to be posted before the X11 toplevel is updated completely
(including the window decorations from the X11 window manager).

Remove the portion of code discarding the pending frame callback,
Xwayland should always wait for a pending frame callback if there's one
before posting new damages.
Signed-off-by: default avatarOlivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.com>
Reviewed-by: Michel Dänzer's avatarMichel Dänzer <mdaenzer@redhat.com>
!333
parent 4f984fc0
Pipeline #80408 passed with stages
in 6 minutes and 16 seconds
......@@ -262,8 +262,6 @@ static void
xwl_window_property_allow_commits(struct xwl_window *xwl_window,
PropertyStateRec *propstate)
{
Bool old_allow_commits = xwl_window->allow_commits;
switch (propstate->state) {
case PropertyNewValue:
xwl_window_set_allow_commits_from_property(xwl_window, propstate->prop);
......@@ -276,17 +274,6 @@ xwl_window_property_allow_commits(struct xwl_window *xwl_window,
default:
break;
}
/* If allow_commits turned from off to on, discard any frame
* callback we might be waiting for so that a new buffer is posted
* immediately through block_handler() if there is damage to post.
*/
if (!old_allow_commits && xwl_window->allow_commits) {
if (xwl_window->frame_callback) {
wl_callback_destroy(xwl_window->frame_callback);
xwl_window->frame_callback = NULL;
}
}
}
static void
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment