aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonan Pigott <ronan@rjp.ie>2022-11-16 15:50:34 -0700
committerSimon Ser <contact@emersion.fr>2022-11-26 09:48:58 +0100
commit66568508c06267445489d655c91c94a34d6d9ffe (patch)
tree90b6abe3eefb6c95c89afa554281c0fd67749db3
parent864b3a9a18f236f92f1898bb44ab977ceaebfd68 (diff)
launcher: initialize launcher_ctxs once on startup
-rw-r--r--include/sway/desktop/launcher.h2
-rw-r--r--include/sway/server.h2
-rw-r--r--sway/commands/exec_always.c1
-rw-r--r--sway/desktop/launcher.c18
-rw-r--r--sway/server.c2
5 files changed, 13 insertions, 12 deletions
diff --git a/include/sway/desktop/launcher.h b/include/sway/desktop/launcher.h
index 927d7a37..09b27eb9 100644
--- a/include/sway/desktop/launcher.h
+++ b/include/sway/desktop/launcher.h
@@ -23,6 +23,6 @@ void launcher_ctx_consume(struct launcher_ctx *ctx);
void launcher_ctx_destroy(struct launcher_ctx *ctx);
-void launcher_ctx_create(pid_t pid);
+struct launcher_ctx *launcher_ctx_create(pid_t pid);
#endif
diff --git a/include/sway/server.h b/include/sway/server.h
index 11f6b882..6f29b3f5 100644
--- a/include/sway/server.h
+++ b/include/sway/server.h
@@ -116,6 +116,8 @@ struct sway_server {
struct wlr_xdg_activation_v1 *xdg_activation_v1;
struct wl_listener xdg_activation_v1_request_activate;
+ struct wl_list pending_launcher_ctxs; // launcher_ctx::link
+
// The timeout for transactions, after which a transaction is applied
// regardless of readiness.
size_t txn_timeout_ms;
diff --git a/sway/commands/exec_always.c b/sway/commands/exec_always.c
index d67e416f..0d3254ae 100644
--- a/sway/commands/exec_always.c
+++ b/sway/commands/exec_always.c
@@ -9,6 +9,7 @@
#include "sway/config.h"
#include "sway/server.h"
#include "sway/desktop/launcher.h"
+#include "sway/server.h"
#include "sway/tree/container.h"
#include "sway/tree/root.h"
#include "sway/tree/workspace.h"
diff --git a/sway/desktop/launcher.c b/sway/desktop/launcher.c
index 810a04ef..89a93384 100644
--- a/sway/desktop/launcher.c
+++ b/sway/desktop/launcher.c
@@ -11,8 +11,6 @@
#include "sway/tree/root.h"
#include "log.h"
-static struct wl_list launcher_ctxs;
-
/**
* Get the pid of a parent process given the pid of a child process.
*
@@ -73,8 +71,7 @@ void launcher_ctx_destroy(struct launcher_ctx *ctx) {
}
struct launcher_ctx *launcher_ctx_find_pid(pid_t pid) {
- if (!launcher_ctxs.prev && !launcher_ctxs.next) {
- wl_list_init(&launcher_ctxs);
+ if (wl_list_empty(&server.pending_launcher_ctxs)) {
return NULL;
}
@@ -83,7 +80,7 @@ struct launcher_ctx *launcher_ctx_find_pid(pid_t pid) {
do {
struct launcher_ctx *_ctx = NULL;
- wl_list_for_each(_ctx, &launcher_ctxs, link) {
+ wl_list_for_each(_ctx, &server.pending_launcher_ctxs, link) {
if (pid == _ctx->pid) {
ctx = _ctx;
sway_log(SWAY_DEBUG,
@@ -178,17 +175,14 @@ static void token_handle_destroy(struct wl_listener *listener, void *data) {
launcher_ctx_destroy(ctx);
}
-void launcher_ctx_create(pid_t pid) {
+struct launcher_ctx *launcher_ctx_create(pid_t pid) {
sway_log(SWAY_DEBUG, "Recording workspace for process %d", pid);
- if (!launcher_ctxs.prev && !launcher_ctxs.next) {
- wl_list_init(&launcher_ctxs);
- }
struct sway_seat *seat = input_manager_current_seat();
struct sway_workspace *ws = seat_get_focused_workspace(seat);
if (!ws) {
sway_log(SWAY_DEBUG, "Bailing out, no workspace");
- return;
+ return NULL;
}
struct launcher_ctx *ctx = calloc(1, sizeof(struct launcher_ctx));
@@ -206,5 +200,7 @@ void launcher_ctx_create(pid_t pid) {
ctx->token_destroy.notify = token_handle_destroy;
wl_signal_add(&token->events.destroy, &ctx->token_destroy);
- wl_list_insert(&launcher_ctxs, &ctx->link);
+ wl_list_init(&ctx->link);
+ wl_list_insert(&server.pending_launcher_ctxs, &ctx->link);
+ return ctx;
}
diff --git a/sway/server.c b/sway/server.c
index 042f20be..b750d10c 100644
--- a/sway/server.c
+++ b/sway/server.c
@@ -220,6 +220,8 @@ bool server_init(struct sway_server *server) {
wl_signal_add(&server->xdg_activation_v1->events.request_activate,
&server->xdg_activation_v1_request_activate);
+ wl_list_init(&server->pending_launcher_ctxs);
+
// Avoid using "wayland-0" as display socket
char name_candidate[16];
for (unsigned int i = 1; i <= 32; ++i) {