diff options
author | emersion <contact@emersion.fr> | 2019-03-10 21:47:30 +0100 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-03-10 14:59:34 -0600 |
commit | 191305468c0fe9b1acf8b6ad6c8a49b97cf793aa (patch) | |
tree | e9ae2fe1c00bba124507a3f0e4385b5fa5e6533b | |
parent | 83b68b21541ac00649c9d100cfec198326152fec (diff) |
Fix crash in cmd_workspace when layer surface has focus
-rw-r--r-- | sway/commands/workspace.c | 5 | ||||
-rw-r--r-- | 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) { |