summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ã…dahl <jadahl@gmail.com>2019-10-09 21:53:09 +0200
committerRobert Mader <robert.mader@posteo.de>2021-04-07 13:45:19 +0200
commita38dc8c61d48fd375d4bf41b3a3cbdb0a1a8caa9 (patch)
tree14ee57d776a69e8a415793458e49e96c4919cdc4
parent9502b997652ed82472e72cbeee176b1f344eb2b4 (diff)
downloadmutter-gnome-3-32.tar.gz
wayland/actor-surface: Queue redraw for frame callbackgnome-3-32
A frame callback without damage is still expected to be responded to. Implement this by simply queuing damage if there are any frame callbacks requested and there is no damage yet. If there already is damage, we'll be queued already, but with more correct damage. Without we simply need to make sure we flush the callbacks if any area of surface is not occluded. Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/457 https://gitlab.gnome.org/GNOME/mutter/merge_requests/839 (cherry picked from commit d49d10b14f4e0fa80e6867979b26fab383610b39) Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1813>
-rw-r--r--src/wayland/meta-wayland-actor-surface.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/wayland/meta-wayland-actor-surface.c b/src/wayland/meta-wayland-actor-surface.c
index 2471de0a9..1b7b74953 100644
--- a/src/wayland/meta-wayland-actor-surface.c
+++ b/src/wayland/meta-wayland-actor-surface.c
@@ -253,10 +253,20 @@ meta_wayland_actor_surface_commit (MetaWaylandSurfaceRole *surface_role,
{
MetaWaylandActorSurface *actor_surface =
META_WAYLAND_ACTOR_SURFACE (surface_role);
+ MetaWaylandActorSurfacePrivate *priv =
+ meta_wayland_actor_surface_get_instance_private (actor_surface);
MetaWaylandSurface *surface =
meta_wayland_surface_role_get_surface (surface_role);
MetaWaylandSurface *toplevel_surface;
+ if (!priv->actor)
+ return;
+
+ if (!wl_list_empty (&pending->frame_callback_list) &&
+ cairo_region_is_empty (pending->surface_damage) &&
+ cairo_region_is_empty (pending->buffer_damage))
+ clutter_actor_queue_redraw (CLUTTER_ACTOR (priv->actor));
+
meta_wayland_actor_surface_queue_frame_callbacks (actor_surface, pending);
toplevel_surface = meta_wayland_surface_get_toplevel (surface);