diff options
author | Ronan Pigott <rpigott@berkeley.edu> | 2021-10-23 21:31:12 -0700 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2021-10-31 10:33:14 +0100 |
commit | e2aff8a9b0c2852931a80b615a3aa367d954c8da (patch) | |
tree | 574df95df3f14d30f1f8d1a77337fe24ccc7de5b | |
parent | 6ad0f819e2d1f030d73bdbf963f2aed709673be9 (diff) |
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.
-rw-r--r-- | include/wlr/types/wlr_xdg_activation_v1.h | 6 | ||||
-rw-r--r-- | types/wlr_xdg_activation_v1.c | 5 |
2 files changed, 11 insertions, 0 deletions
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; |