mirror of
https://github.com/swaywm/sway.git
synced 2024-11-26 09:51:29 +00:00
cmd_move: Fix crash when moving to scratchpad hidden split containers
This commit is contained in:
parent
d88d4bbd9d
commit
72ad35ba16
|
@ -248,10 +248,11 @@ static void container_move_to_container(struct sway_container *container,
|
||||||
ipc_event_window(container, "move");
|
ipc_event_window(container, "move");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (destination->workspace) {
|
||||||
workspace_focus_fullscreen(destination->workspace);
|
workspace_focus_fullscreen(destination->workspace);
|
||||||
|
|
||||||
// Update workspace urgent state
|
|
||||||
workspace_detect_urgent(destination->workspace);
|
workspace_detect_urgent(destination->workspace);
|
||||||
|
}
|
||||||
|
|
||||||
if (old_workspace && old_workspace != destination->workspace) {
|
if (old_workspace && old_workspace != destination->workspace) {
|
||||||
workspace_detect_urgent(old_workspace);
|
workspace_detect_urgent(old_workspace);
|
||||||
}
|
}
|
||||||
|
@ -519,8 +520,10 @@ static struct cmd_results *cmd_move_container(bool no_auto_back_and_forth,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sway_output *new_output = node_get_output(destination);
|
struct sway_output *new_output = node_get_output(destination);
|
||||||
struct sway_workspace *new_output_last_ws = old_output == new_output ?
|
struct sway_workspace *new_output_last_ws = NULL;
|
||||||
NULL : output_get_active_workspace(new_output);
|
if (new_output && old_output != new_output) {
|
||||||
|
new_output_last_ws = output_get_active_workspace(new_output);
|
||||||
|
}
|
||||||
|
|
||||||
// save focus, in case it needs to be restored
|
// save focus, in case it needs to be restored
|
||||||
struct sway_node *focus = seat_get_focus(seat);
|
struct sway_node *focus = seat_get_focus(seat);
|
||||||
|
@ -551,12 +554,14 @@ static struct cmd_results *cmd_move_container(bool no_auto_back_and_forth,
|
||||||
}
|
}
|
||||||
|
|
||||||
// restore focus on destination output back to its last active workspace
|
// restore focus on destination output back to its last active workspace
|
||||||
struct sway_workspace *new_workspace =
|
struct sway_workspace *new_workspace = new_output ?
|
||||||
output_get_active_workspace(new_output);
|
output_get_active_workspace(new_output) : NULL;
|
||||||
if (!sway_assert(new_workspace, "Expected output to have a workspace")) {
|
if (new_output &&
|
||||||
|
!sway_assert(new_workspace, "Expected output to have a workspace")) {
|
||||||
return cmd_results_new(CMD_FAILURE,
|
return cmd_results_new(CMD_FAILURE,
|
||||||
"Expected output to have a workspace");
|
"Expected output to have a workspace");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_output_last_ws && new_output_last_ws != new_workspace) {
|
if (new_output_last_ws && new_output_last_ws != new_workspace) {
|
||||||
struct sway_node *new_output_last_focus =
|
struct sway_node *new_output_last_focus =
|
||||||
seat_get_focus_inactive(seat, &new_output_last_ws->node);
|
seat_get_focus_inactive(seat, &new_output_last_ws->node);
|
||||||
|
|
Loading…
Reference in a new issue