diff options
Diffstat (limited to 'sway/xdg_activation_v1.c')
-rw-r--r-- | sway/xdg_activation_v1.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/sway/xdg_activation_v1.c b/sway/xdg_activation_v1.c index 99e7f9b5..2b94136c 100644 --- a/sway/xdg_activation_v1.c +++ b/sway/xdg_activation_v1.c @@ -1,4 +1,5 @@ #include <wlr/types/wlr_xdg_activation_v1.h> +#include "sway/desktop/launcher.h" #include "sway/tree/view.h" void xdg_activation_v1_handle_request_activate(struct wl_listener *listener, @@ -15,7 +16,22 @@ void xdg_activation_v1_handle_request_activate(struct wl_listener *listener, return; } struct sway_view *view = xdg_surface->data; - if (!xdg_surface->mapped || view == NULL) { + if (view == NULL) { + return; + } + + if (!xdg_surface->mapped) { + // This is a startup notification. If we are tracking it, the data + // field is a launcher_ctx. + struct launcher_ctx *ctx = event->token->data; + if (!ctx || ctx->activated) { + // This ctx has already been activated and cannot be used again + // for a startup notification. It will be destroyed + return; + } else { + ctx->activated = true; + view_assign_ctx(view, ctx); + } return; } |