shell: handle multiple popups
This patch implements a popup stack. When the first popup is opened
the grab is started, and it is added to a list. Further popups will
be added to this list but the grab won't change. When a popup is
closed it is removed from the list and, if it is now empty, the grab
is ended.
A click outside the client area will send the popup_done event to
all the popups in the list, and the grab will end.
diff --git a/src/compositor.c b/src/compositor.c
index b734f67..3e24295 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -2705,6 +2705,8 @@
&seat->new_drag_icon_listener);
clipboard_create(seat);
+
+ wl_signal_init(&seat->destroy_signal);
wl_signal_emit(&ec->seat_created_signal, seat);
}
@@ -2722,6 +2724,7 @@
xkb_info_destroy(&seat->xkb_info);
wl_seat_release(&seat->seat);
+ wl_signal_emit(&seat->destroy_signal, seat);
}
static void