From 191305468c0fe9b1acf8b6ad6c8a49b97cf793aa Mon Sep 17 00:00:00 2001 From: emersion Date: Sun, 10 Mar 2019 21:47:30 +0100 Subject: [PATCH] Fix crash in cmd_workspace when layer surface has focus --- sway/commands/workspace.c | 5 +++++ sway/input/seat.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/sway/commands/workspace.c b/sway/commands/workspace.c index 5fde8129..362dcd1b 100644 --- a/sway/commands/workspace.c +++ b/sway/commands/workspace.c @@ -184,6 +184,11 @@ struct cmd_results *cmd_workspace(int argc, char **argv) { bool create = argc > 1 && strcasecmp(argv[1], "--create") == 0; struct sway_seat *seat = config->handler_context.seat; struct sway_workspace *current = seat_get_focused_workspace(seat); + if (!current) { + return cmd_results_new(CMD_FAILURE, "workspace", + "No workspace to switch from"); + } + struct sway_workspace *ws = NULL; if (strcasecmp(argv[0], "number") == 0) { if (argc < 2) { diff --git a/sway/input/seat.c b/sway/input/seat.c index 245326a1..3a68904b 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -1101,7 +1101,7 @@ struct sway_node *seat_get_focus(struct sway_seat *seat) { } struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat) { - struct sway_node *focus = seat_get_focus(seat); + struct sway_node *focus = seat_get_focus_inactive(seat, &root->node); if (!focus) { return NULL; } @@ -1111,7 +1111,7 @@ struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat) { if (focus->type == N_WORKSPACE) { return focus->sway_workspace; } - return NULL; // unreachable + return NULL; // output doesn't have a workspace yet } struct sway_container *seat_get_focused_container(struct sway_seat *seat) {