From 7263e39f6423d928b71916b43972c51fb11a00c9 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 2 Sep 2018 21:22:38 +1000 Subject: [PATCH] Fix crash when using focus parent/child from an empty workspace --- sway/commands/focus.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/sway/commands/focus.c b/sway/commands/focus.c index e48e48aa0..83b8c64a8 100644 --- a/sway/commands/focus.c +++ b/sway/commands/focus.c @@ -95,9 +95,6 @@ static struct sway_node *get_node_in_output_direction( static struct sway_node *node_get_in_direction(struct sway_container *container, struct sway_seat *seat, enum movement_direction dir) { - if (dir == MOVE_CHILD) { - return seat_get_active_child(seat, &container->node); - } if (container->is_fullscreen) { if (dir == MOVE_PARENT) { return NULL; @@ -256,8 +253,20 @@ struct cmd_results *cmd_focus(int argc, char **argv) { "or 'focus output '"); } + if (direction == MOVE_CHILD) { + struct sway_node *focus = seat_get_active_child(seat, node); + if (focus) { + seat_set_focus(seat, focus); + } + return cmd_results_new(CMD_SUCCESS, NULL, NULL); + } + if (node->type == N_WORKSPACE) { - // A workspace is focused, so just jump to the next output + if (direction == MOVE_PARENT) { + return cmd_results_new(CMD_SUCCESS, NULL, NULL); + } + + // Jump to the next output struct sway_output *new_output = output_get_in_direction(workspace->output, direction); if (!new_output) {