compositor: make sure to reset views' pointers to destroyed output
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. Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
This commit is contained in:
parent
f53beb8fb9
commit
2f2a70cc85
@ -1079,6 +1079,9 @@ weston_view_assign_output(struct weston_view *ev)
|
||||
mask = 0;
|
||||
pixman_region32_init(®ion);
|
||||
wl_list_for_each(output, &ec->output_list, link) {
|
||||
if (output->destroying)
|
||||
continue;
|
||||
|
||||
pixman_region32_intersect(®ion, &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);
|
||||
|
Loading…
Reference in New Issue
Block a user