}
static void
+weston_surface_unmap(struct weston_surface *surface)
+{
+ weston_surface_damage_below(surface);
+ weston_surface_flush_damage(surface);
+ surface->output = NULL;
+ wl_list_remove(&surface->link);
+ weston_compositor_repick(surface->compositor);
+ weston_compositor_schedule_repaint(surface->compositor);
+}
+
+static void
destroy_surface(struct wl_resource *resource)
{
struct weston_surface *surface =
struct weston_surface, surface.resource);
struct weston_compositor *compositor = surface->compositor;
- if (surface->output) {
- weston_surface_damage_below(surface);
- weston_surface_flush_damage(surface);
-
- wl_list_remove(&surface->link);
- weston_compositor_repick(compositor);
- }
+ if (surface->output)
+ weston_surface_unmap(surface);
if (surface->texture)
glDeleteTextures(1, &surface->texture);
}
if (!buffer_resource && es->output) {
- wl_list_remove(&es->link);
- es->output = NULL;
+ weston_surface_unmap(es);
es->buffer = NULL;
return;
}