aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonan Pigott <rpigott@berkeley.edu>2021-10-23 21:31:12 -0700
committerSimon Ser <contact@emersion.fr>2021-10-31 10:33:14 +0100
commite2aff8a9b0c2852931a80b615a3aa367d954c8da (patch)
tree574df95df3f14d30f1f8d1a77337fe24ccc7de5b
parent6ad0f819e2d1f030d73bdbf963f2aed709673be9 (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.h6
-rw-r--r--types/wlr_xdg_activation_v1.c5
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;