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 /sway | |
parent | Update language in sway.desktop & sway(1) (diff) | |
download | sway-191305468c0fe9b1acf8b6ad6c8a49b97cf793aa.tar.gz sway-191305468c0fe9b1acf8b6ad6c8a49b97cf793aa.tar.zst sway-191305468c0fe9b1acf8b6ad6c8a49b97cf793aa.zip |
Fix crash in cmd_workspace when layer surface has focus
Diffstat (limited to 'sway')
-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) { | |||
184 | bool create = argc > 1 && strcasecmp(argv[1], "--create") == 0; | 184 | bool create = argc > 1 && strcasecmp(argv[1], "--create") == 0; |
185 | struct sway_seat *seat = config->handler_context.seat; | 185 | struct sway_seat *seat = config->handler_context.seat; |
186 | struct sway_workspace *current = seat_get_focused_workspace(seat); | 186 | struct sway_workspace *current = seat_get_focused_workspace(seat); |
187 | if (!current) { | ||
188 | return cmd_results_new(CMD_FAILURE, "workspace", | ||
189 | "No workspace to switch from"); | ||
190 | } | ||
191 | |||
187 | struct sway_workspace *ws = NULL; | 192 | struct sway_workspace *ws = NULL; |
188 | if (strcasecmp(argv[0], "number") == 0) { | 193 | if (strcasecmp(argv[0], "number") == 0) { |
189 | if (argc < 2) { | 194 | 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) { | |||
1101 | } | 1101 | } |
1102 | 1102 | ||
1103 | struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat) { | 1103 | struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat) { |
1104 | struct sway_node *focus = seat_get_focus(seat); | 1104 | struct sway_node *focus = seat_get_focus_inactive(seat, &root->node); |
1105 | if (!focus) { | 1105 | if (!focus) { |
1106 | return NULL; | 1106 | return NULL; |
1107 | } | 1107 | } |
@@ -1111,7 +1111,7 @@ struct sway_workspace *seat_get_focused_workspace(struct sway_seat *seat) { | |||
1111 | if (focus->type == N_WORKSPACE) { | 1111 | if (focus->type == N_WORKSPACE) { |
1112 | return focus->sway_workspace; | 1112 | return focus->sway_workspace; |
1113 | } | 1113 | } |
1114 | return NULL; // unreachable | 1114 | return NULL; // output doesn't have a workspace yet |
1115 | } | 1115 | } |
1116 | 1116 | ||
1117 | struct sway_container *seat_get_focused_container(struct sway_seat *seat) { | 1117 | struct sway_container *seat_get_focused_container(struct sway_seat *seat) { |