Merge branch 'wlr-xdg-popup-events-grab' into 'master'

Draft: Add `grab` to `wlr_xdg_popup.events`

See merge request wlroots/wlroots!5265
This commit is contained in:
Johan Malm 2026-04-13 11:53:03 +00:00
commit 825a049fc3
2 changed files with 5 additions and 0 deletions

View file

@ -108,6 +108,7 @@ struct wlr_xdg_popup {
struct wl_signal destroy;
struct wl_signal reposition;
struct wl_signal grab;
} events;
struct wl_list grab_link; // wlr_xdg_popup_grab.popups

View file

@ -312,6 +312,8 @@ static void xdg_popup_handle_grab(struct wl_client *client,
&popup_grab->keyboard_grab);
wlr_seat_touch_start_grab(seat_client->seat,
&popup_grab->touch_grab);
wl_signal_emit_mutable(&popup->events.grab, NULL);
}
static void xdg_popup_handle_reposition(
@ -416,6 +418,7 @@ void create_xdg_popup(struct wlr_xdg_surface *surface, struct wlr_xdg_surface *p
wl_signal_init(&surface->popup->events.destroy);
wl_signal_init(&surface->popup->events.reposition);
wl_signal_init(&surface->popup->events.grab);
if (parent) {
surface->popup->parent = parent->surface;
@ -475,6 +478,7 @@ void destroy_xdg_popup(struct wlr_xdg_popup *popup) {
assert(wl_list_empty(&popup->events.destroy.listener_list));
assert(wl_list_empty(&popup->events.reposition.listener_list));
assert(wl_list_empty(&popup->events.grab.listener_list));
wlr_surface_synced_finish(&popup->synced);
popup->base->popup = NULL;