mirror of
https://github.com/swaywm/sway.git
synced 2026-04-21 06:46:22 -04:00
view: associate launch contexts with views
Views now maintain a reference to a launch context which, as a last resort, is populated at map time with a context associated with its pid. This opens the possibility of populating it before map via another source, e.g. xdga-tokens or configuration.
This commit is contained in:
parent
d75c9f9722
commit
864b3a9a18
4 changed files with 64 additions and 39 deletions
|
|
@ -13,18 +13,6 @@
|
|||
|
||||
static struct wl_list launcher_ctxs;
|
||||
|
||||
struct launcher_ctx {
|
||||
pid_t pid;
|
||||
char *name;
|
||||
struct wlr_xdg_activation_token_v1 *token;
|
||||
struct wl_listener token_destroy;
|
||||
|
||||
struct sway_node *node;
|
||||
struct wl_listener node_destroy;
|
||||
|
||||
struct wl_list link;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the pid of a parent process given the pid of a child process.
|
||||
*
|
||||
|
|
@ -59,7 +47,20 @@ static pid_t get_parent_pid(pid_t child) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
static void launcher_ctx_destroy(struct launcher_ctx *ctx) {
|
||||
void launcher_ctx_consume(struct launcher_ctx *ctx) {
|
||||
// The view is now responsible for destroying this ctx
|
||||
wl_list_remove(&ctx->token_destroy.link);
|
||||
wl_list_init(&ctx->token_destroy.link);
|
||||
|
||||
wlr_xdg_activation_token_v1_destroy(ctx->token);
|
||||
ctx->token = NULL;
|
||||
|
||||
// Prevent additional matches
|
||||
wl_list_remove(&ctx->link);
|
||||
wl_list_init(&ctx->link);
|
||||
}
|
||||
|
||||
void launcher_ctx_destroy(struct launcher_ctx *ctx) {
|
||||
if (ctx == NULL) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -71,7 +72,7 @@ static void launcher_ctx_destroy(struct launcher_ctx *ctx) {
|
|||
free(ctx);
|
||||
}
|
||||
|
||||
static struct launcher_ctx *launcher_ctx_find_pid(pid_t pid) {
|
||||
struct launcher_ctx *launcher_ctx_find_pid(pid_t pid) {
|
||||
if (!launcher_ctxs.prev && !launcher_ctxs.next) {
|
||||
wl_list_init(&launcher_ctxs);
|
||||
return NULL;
|
||||
|
|
@ -97,7 +98,7 @@ static struct launcher_ctx *launcher_ctx_find_pid(pid_t pid) {
|
|||
return ctx;
|
||||
}
|
||||
|
||||
static struct sway_workspace *launcher_ctx_get_workspace(
|
||||
struct sway_workspace *launcher_ctx_get_workspace(
|
||||
struct launcher_ctx *ctx) {
|
||||
struct sway_workspace *ws = NULL;
|
||||
struct sway_output *output = NULL;
|
||||
|
|
@ -135,16 +136,6 @@ static struct sway_workspace *launcher_ctx_get_workspace(
|
|||
return ws;
|
||||
}
|
||||
|
||||
struct sway_workspace *workspace_for_pid(pid_t pid) {
|
||||
struct launcher_ctx *ctx = launcher_ctx_find_pid(pid);
|
||||
if (ctx == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
struct sway_workspace *ws = launcher_ctx_get_workspace(ctx);
|
||||
launcher_ctx_destroy(ctx);
|
||||
return ws;
|
||||
}
|
||||
|
||||
static void ctx_handle_node_destroy(struct wl_listener *listener, void *data) {
|
||||
struct launcher_ctx *ctx = wl_container_of(listener, ctx, node_destroy);
|
||||
switch (ctx->node->type) {
|
||||
|
|
@ -217,12 +208,3 @@ void launcher_ctx_create(pid_t pid) {
|
|||
|
||||
wl_list_insert(&launcher_ctxs, &ctx->link);
|
||||
}
|
||||
|
||||
void remove_workspace_pid(pid_t pid) {
|
||||
if (!launcher_ctxs.prev || !launcher_ctxs.next) {
|
||||
return;
|
||||
}
|
||||
|
||||
struct launcher_ctx *ctx = launcher_ctx_find_pid(pid);
|
||||
launcher_ctx_destroy(ctx);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue