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.
This commit is contained in:
Ronan Pigott 2021-10-23 21:31:12 -07:00 committed by Simon Ser
parent 6ad0f819e2
commit e2aff8a9b0
2 changed files with 11 additions and 0 deletions

View File

@ -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;

View File

@ -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;