wayland/actor-surface: Do not set opaque region for XWayland clients

XWayland clients get their opaque region set from their window, not the
surface. Doing both resulted in the surface constantly overwriting the
opaque region - effectively disabling culling of XWayland clients.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/1049
This commit is contained in:
Robert Mader 2020-02-12 01:48:29 +01:00
parent 98d7a542b0
commit 1981449776

View File

@ -194,18 +194,22 @@ meta_wayland_actor_surface_real_sync_actor_state (MetaWaylandActorSurface *actor
meta_surface_actor_set_input_region (surface_actor, NULL);
}
if (surface->opaque_region)
if (surface->window &&
surface->window->client_type == META_WINDOW_CLIENT_TYPE_WAYLAND)
{
cairo_region_t *opaque_region;
if (surface->opaque_region)
{
cairo_region_t *opaque_region;
opaque_region = cairo_region_copy (surface->opaque_region);
cairo_region_intersect_rectangle (opaque_region, &surface_rect);
meta_surface_actor_set_opaque_region (surface_actor, opaque_region);
cairo_region_destroy (opaque_region);
}
else
{
meta_surface_actor_set_opaque_region (surface_actor, NULL);
opaque_region = cairo_region_copy (surface->opaque_region);
cairo_region_intersect_rectangle (opaque_region, &surface_rect);
meta_surface_actor_set_opaque_region (surface_actor, opaque_region);
cairo_region_destroy (opaque_region);
}
else
{
meta_surface_actor_set_opaque_region (surface_actor, NULL);
}
}
meta_surface_actor_set_transform (surface_actor, surface->buffer_transform);