wayland: Move check for present window out of the actor-surface class

All child classes of `MetaWaylandShellSurface` as well as
`MetaWaylandSurfaceRoleXWayland` should only sync their actor if
their toplevel surface has a window. Currently this check is done
in the actor-surface class, but not all surface classes have a
toplevel window, e.g. dnd-surfaces.
Move the check to the right places.

For subsurfaces this assumes that the subsurface is not the child of
a window-less surface (like, as stated above, e.g. a dnd-surface).
If we want to support subsurfaces of window-less surfaces in the future
we have to extend the check here.
But as this is not a regression, ignore this case for now.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/537
This commit is contained in:
Robert Mader
2019-04-16 23:35:28 +02:00
committed by Jonas Ådahl
parent 7738b5c00b
commit 7e2a0ede16
4 changed files with 42 additions and 8 deletions

View File

@ -199,8 +199,11 @@ meta_wayland_subsurface_sync_actor_state (MetaWaylandActorSurface *actor_surface
meta_wayland_surface_role_get_surface (surface_role);
MetaWaylandActorSurfaceClass *actor_surface_class =
META_WAYLAND_ACTOR_SURFACE_CLASS (meta_wayland_subsurface_parent_class);
MetaWaylandSurface *toplevel_surface;
actor_surface_class->sync_actor_state (actor_surface);
toplevel_surface = meta_wayland_surface_get_toplevel (surface);
if (toplevel_surface && toplevel_surface->window)
actor_surface_class->sync_actor_state (actor_surface);
sync_actor_subsurface_state (surface);
}