When an output is being destroyed reassign the output of the views
that were in it, to be sure not to keep a dangling pointer which could
be used later on by calling weston_surface_assign_output() on the
view's surface.
Also make sure we send wl_surface.leave events to the surfaces that
were in that output.
---

I had forgotten about this one...
changes since v1:
- reassign the output for all relevant views
- send wl_surface.leave

 src/compositor.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/compositor.c b/src/compositor.c
index 150d1fb..2a117d8 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -1079,6 +1079,9 @@ weston_view_assign_output(struct weston_view *ev)
        mask = 0;
        pixman_region32_init(&region);
        wl_list_for_each(output, &ec->output_list, link) {
+               if (output->destroying)
+                       continue;
+
                pixman_region32_intersect(&region, &ev->transform.boundingbox,
                                          &output->region);
 
@@ -3888,9 +3891,15 @@ WL_EXPORT void
 weston_output_destroy(struct weston_output *output)
 {
        struct wl_resource *resource;
+       struct weston_view *view;
 
        output->destroying = 1;
 
+       wl_list_for_each(view, &output->compositor->view_list, link) {
+               if (view->output_mask & (1 << output->id))
+                       weston_view_assign_output(view);
+       }
+
        wl_event_source_remove(output->repaint_timer);
 
        weston_presentation_feedback_discard_list(&output->feedback_list);
-- 
2.4.5

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to