mirror of
https://github.com/swaywm/sway.git
synced 2024-11-10 12:33:50 +01:00
launcher: fudge the interface a bit
We want to create a context before knowing the pid it will match with.
This commit is contained in:
parent
66568508c0
commit
bdeb9f9565
@ -23,6 +23,6 @@ void launcher_ctx_consume(struct launcher_ctx *ctx);
|
||||
|
||||
void launcher_ctx_destroy(struct launcher_ctx *ctx);
|
||||
|
||||
struct launcher_ctx *launcher_ctx_create(pid_t pid);
|
||||
struct launcher_ctx *launcher_ctx_create(void);
|
||||
|
||||
#endif
|
||||
|
@ -53,6 +53,7 @@ struct cmd_results *cmd_exec_process(int argc, char **argv) {
|
||||
}
|
||||
|
||||
pid_t pid, child;
|
||||
struct launcher_ctx *ctx = launcher_ctx_create();
|
||||
// Fork process
|
||||
if ((pid = fork()) == 0) {
|
||||
// Fork child process again
|
||||
@ -92,8 +93,12 @@ struct cmd_results *cmd_exec_process(int argc, char **argv) {
|
||||
waitpid(pid, NULL, 0);
|
||||
if (child > 0) {
|
||||
sway_log(SWAY_DEBUG, "Child process created with pid %d", child);
|
||||
launcher_ctx_create(child);
|
||||
if (ctx != NULL) {
|
||||
sway_log(SWAY_DEBUG, "Recording workspace for process %d", child);
|
||||
ctx->pid = child;
|
||||
}
|
||||
} else {
|
||||
launcher_ctx_destroy(ctx);
|
||||
return cmd_results_new(CMD_FAILURE, "Second fork() failed");
|
||||
}
|
||||
|
||||
|
@ -175,13 +175,11 @@ static void token_handle_destroy(struct wl_listener *listener, void *data) {
|
||||
launcher_ctx_destroy(ctx);
|
||||
}
|
||||
|
||||
struct launcher_ctx *launcher_ctx_create(pid_t pid) {
|
||||
sway_log(SWAY_DEBUG, "Recording workspace for process %d", pid);
|
||||
|
||||
struct launcher_ctx *launcher_ctx_create() {
|
||||
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");
|
||||
sway_log(SWAY_DEBUG, "Failed to create launch context. No workspace.");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -192,7 +190,6 @@ struct launcher_ctx *launcher_ctx_create(pid_t pid) {
|
||||
ctx->name = strdup(ws->name);
|
||||
ctx->token = token;
|
||||
ctx->node = &ws->node;
|
||||
ctx->pid = pid;
|
||||
|
||||
ctx->node_destroy.notify = ctx_handle_node_destroy;
|
||||
wl_signal_add(&ctx->node->events.destroy, &ctx->node_destroy);
|
||||
|
Loading…
Reference in New Issue
Block a user