compositor: Make pointers visible when an output is unplugged
Previously, if a pointer was inside an output that was unplugged, it
could potentialy end up outside any valid output forever. With this
patch, the pointer is moved to the "closest" output to the pointer.
diff --git a/src/compositor.c b/src/compositor.c
index ed6548c..af33fda 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -3105,6 +3105,19 @@
}
}
+static void
+weston_compositor_verify_pointers(struct weston_compositor *ec)
+{
+ struct weston_seat *seat;
+
+ wl_list_for_each(seat, &ec->seat_list, link) {
+ if (!seat->pointer)
+ continue;
+
+ weston_pointer_verify(seat->pointer);
+ }
+}
+
WL_EXPORT void
weston_output_destroy(struct weston_output *output)
{
@@ -3113,6 +3126,8 @@
weston_compositor_remove_output(output->compositor, output);
wl_list_remove(&output->link);
+ weston_compositor_verify_pointers(output->compositor);
+
wl_signal_emit(&output->destroy_signal, output);
free(output->name);