From e2aff8a9b0c2852931a80b615a3aa367d954c8da Mon Sep 17 00:00:00 2001 From: Ronan Pigott Date: Sat, 23 Oct 2021 21:31:12 -0700 Subject: [PATCH] xdg-activation-v1: add data field and emit token destroy events The data field is useful to track metadata about a token. The destroy events are useful for compositors that track application startup to let them know they can stop doing that. --- include/wlr/types/wlr_xdg_activation_v1.h | 6 ++++++ types/wlr_xdg_activation_v1.c | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/include/wlr/types/wlr_xdg_activation_v1.h b/include/wlr/types/wlr_xdg_activation_v1.h index 89946d84..46356215 100644 --- a/include/wlr/types/wlr_xdg_activation_v1.h +++ b/include/wlr/types/wlr_xdg_activation_v1.h @@ -22,6 +22,12 @@ struct wlr_xdg_activation_token_v1 { char *app_id; // can be NULL struct wl_list link; // wlr_xdg_activation_v1.tokens + void *data; + + struct { + struct wl_signal destroy; + } events; + // private state char *token; diff --git a/types/wlr_xdg_activation_v1.c b/types/wlr_xdg_activation_v1.c index 9fe81419..64864d88 100644 --- a/types/wlr_xdg_activation_v1.c +++ b/types/wlr_xdg_activation_v1.c @@ -32,6 +32,9 @@ void wlr_xdg_activation_token_v1_destroy( if (token->timeout != NULL) { wl_event_source_remove(token->timeout); } + + wlr_signal_emit_safe(&token->events.destroy, NULL); + wl_list_remove(&token->link); wl_list_remove(&token->seat_destroy.link); wl_list_remove(&token->surface_destroy.link); @@ -258,6 +261,7 @@ static void activation_handle_get_activation_token(struct wl_client *client, wl_list_init(&token->link); wl_list_init(&token->seat_destroy.link); wl_list_init(&token->surface_destroy.link); + wl_signal_init(&token->events.destroy); token->activation = activation; @@ -376,6 +380,7 @@ struct wlr_xdg_activation_token_v1 *wlr_xdg_activation_token_v1_create( // Currently no way to set seat/surface wl_list_init(&token->seat_destroy.link); wl_list_init(&token->surface_destroy.link); + wl_signal_init(&token->events.destroy); token->activation = activation;