mirror of
https://github.com/NickHu/sway
synced 2025-01-15 15:41:59 +01:00
Handle seat_get_focused_workspace returning NULL
This modifiers the callers of seat_get_focused_workspace to handle getting NULL as the return value, if they did not already.
This commit is contained in:
parent
a280facd5f
commit
3330faded5
6 changed files with 27 additions and 7 deletions
|
@ -208,6 +208,11 @@ static struct cmd_results *focus_output(struct sway_seat *seat,
|
||||||
"There is no output with that name");
|
"There is no output with that name");
|
||||||
}
|
}
|
||||||
struct sway_workspace *ws = seat_get_focused_workspace(seat);
|
struct sway_workspace *ws = seat_get_focused_workspace(seat);
|
||||||
|
if (!ws) {
|
||||||
|
free(identifier);
|
||||||
|
return cmd_results_new(CMD_FAILURE,
|
||||||
|
"No focused workspace to base directions off of");
|
||||||
|
}
|
||||||
output = output_get_in_direction(ws->output, direction);
|
output = output_get_in_direction(ws->output, direction);
|
||||||
|
|
||||||
if (!output) {
|
if (!output) {
|
||||||
|
|
|
@ -12,6 +12,11 @@ static void scratchpad_toggle_auto(void) {
|
||||||
struct sway_seat *seat = input_manager_current_seat();
|
struct sway_seat *seat = input_manager_current_seat();
|
||||||
struct sway_container *focus = seat_get_focused_container(seat);
|
struct sway_container *focus = seat_get_focused_container(seat);
|
||||||
struct sway_workspace *ws = seat_get_focused_workspace(seat);
|
struct sway_workspace *ws = seat_get_focused_workspace(seat);
|
||||||
|
if (!ws) {
|
||||||
|
sway_log(SWAY_DEBUG,
|
||||||
|
"No focused workspace to toggle scratchpad windows on");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// If the focus is in a floating split container,
|
// If the focus is in a floating split container,
|
||||||
// operate on the split container instead of the child.
|
// operate on the split container instead of the child.
|
||||||
|
|
|
@ -185,8 +185,7 @@ struct cmd_results *cmd_workspace(int argc, char **argv) {
|
||||||
struct sway_seat *seat = config->handler_context.seat;
|
struct sway_seat *seat = config->handler_context.seat;
|
||||||
struct sway_workspace *current = seat_get_focused_workspace(seat);
|
struct sway_workspace *current = seat_get_focused_workspace(seat);
|
||||||
if (!current) {
|
if (!current) {
|
||||||
return cmd_results_new(CMD_FAILURE, "workspace",
|
return cmd_results_new(CMD_FAILURE, "No workspace to switch from");
|
||||||
"No workspace to switch from");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sway_workspace *ws = NULL;
|
struct sway_workspace *ws = NULL;
|
||||||
|
@ -227,6 +226,9 @@ struct cmd_results *cmd_workspace(int argc, char **argv) {
|
||||||
}
|
}
|
||||||
free(name);
|
free(name);
|
||||||
}
|
}
|
||||||
|
if (!ws) {
|
||||||
|
return cmd_results_new(CMD_FAILURE, "No workspace to switch to");
|
||||||
|
}
|
||||||
workspace_switch(ws, no_auto_back_and_forth);
|
workspace_switch(ws, no_auto_back_and_forth);
|
||||||
seat_consider_warp_to_focus(seat);
|
seat_consider_warp_to_focus(seat);
|
||||||
}
|
}
|
||||||
|
|
|
@ -373,7 +373,6 @@ void handle_layer_shell_surface(struct wl_listener *listener, void *data) {
|
||||||
struct sway_seat *seat = input_manager_get_default_seat();
|
struct sway_seat *seat = input_manager_get_default_seat();
|
||||||
if (seat) {
|
if (seat) {
|
||||||
struct sway_workspace *ws = seat_get_focused_workspace(seat);
|
struct sway_workspace *ws = seat_get_focused_workspace(seat);
|
||||||
|
|
||||||
if (ws != NULL) {
|
if (ws != NULL) {
|
||||||
output = ws->output;
|
output = ws->output;
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,6 +96,10 @@ void root_scratchpad_remove_container(struct sway_container *con) {
|
||||||
void root_scratchpad_show(struct sway_container *con) {
|
void root_scratchpad_show(struct sway_container *con) {
|
||||||
struct sway_seat *seat = input_manager_current_seat();
|
struct sway_seat *seat = input_manager_current_seat();
|
||||||
struct sway_workspace *new_ws = seat_get_focused_workspace(seat);
|
struct sway_workspace *new_ws = seat_get_focused_workspace(seat);
|
||||||
|
if (!new_ws) {
|
||||||
|
sway_log(SWAY_DEBUG, "No focused workspace to show scratchpad on");
|
||||||
|
return;
|
||||||
|
}
|
||||||
struct sway_workspace *old_ws = con->workspace;
|
struct sway_workspace *old_ws = con->workspace;
|
||||||
|
|
||||||
// If the current con or any of its parents are in fullscreen mode, we
|
// If the current con or any of its parents are in fullscreen mode, we
|
||||||
|
|
|
@ -368,13 +368,13 @@ struct sway_workspace *workspace_by_name(const char *name) {
|
||||||
struct sway_seat *seat = input_manager_current_seat();
|
struct sway_seat *seat = input_manager_current_seat();
|
||||||
struct sway_workspace *current = seat_get_focused_workspace(seat);
|
struct sway_workspace *current = seat_get_focused_workspace(seat);
|
||||||
|
|
||||||
if (strcmp(name, "prev") == 0) {
|
if (current && strcmp(name, "prev") == 0) {
|
||||||
return workspace_prev(current);
|
return workspace_prev(current);
|
||||||
} else if (strcmp(name, "prev_on_output") == 0) {
|
} else if (current && strcmp(name, "prev_on_output") == 0) {
|
||||||
return workspace_output_prev(current, false);
|
return workspace_output_prev(current, false);
|
||||||
} else if (strcmp(name, "next") == 0) {
|
} else if (current && strcmp(name, "next") == 0) {
|
||||||
return workspace_next(current);
|
return workspace_next(current);
|
||||||
} else if (strcmp(name, "next_on_output") == 0) {
|
} else if (current && strcmp(name, "next_on_output") == 0) {
|
||||||
return workspace_output_next(current, false);
|
return workspace_output_next(current, false);
|
||||||
} else if (strcmp(name, "current") == 0) {
|
} else if (strcmp(name, "current") == 0) {
|
||||||
return current;
|
return current;
|
||||||
|
@ -399,6 +399,11 @@ static struct sway_workspace *workspace_output_prev_next_impl(
|
||||||
struct sway_output *output, int dir, bool create) {
|
struct sway_output *output, int dir, bool create) {
|
||||||
struct sway_seat *seat = input_manager_current_seat();
|
struct sway_seat *seat = input_manager_current_seat();
|
||||||
struct sway_workspace *workspace = seat_get_focused_workspace(seat);
|
struct sway_workspace *workspace = seat_get_focused_workspace(seat);
|
||||||
|
if (!workspace) {
|
||||||
|
sway_log(SWAY_DEBUG,
|
||||||
|
"No focused workspace to base prev/next on output off of");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int index = list_find(output->workspaces, workspace);
|
int index = list_find(output->workspaces, workspace);
|
||||||
if (!workspace_is_empty(workspace) && create &&
|
if (!workspace_is_empty(workspace) && create &&
|
||||||
|
|
Loading…
Reference in a new issue