diff --git a/src/shell/mod.rs b/src/shell/mod.rs index d80516d2..0cee9910 100644 --- a/src/shell/mod.rs +++ b/src/shell/mod.rs @@ -767,7 +767,7 @@ impl Workspaces { let new_set = self.sets.get_mut(&new_output).unwrap(); let workspace_group = new_set.group; - for mut workspace in set.workspaces.into_iter() { + for (i, mut workspace) in set.workspaces.into_iter().enumerate() { if workspace.is_empty() { workspace_state.remove_workspace(workspace.handle); } else { @@ -778,6 +778,21 @@ impl Workspaces { workspace.set_output(&new_output); workspace.refresh(xdg_activation_state); new_set.workspaces.push(workspace); + + // If workspace was active, and the new set's active workspace is empty, make this workspace + // active on the new set. Instead of leaving an empty workspace active, and a previously active + // workspace hidden. + if i == set.active && new_set.workspaces[new_set.active].is_empty() { + workspace_state.remove_workspace_state( + &new_set.workspaces[new_set.active].handle, + WState::Active, + ); + new_set.active = new_set.workspaces.len() - 1; + workspace_state.add_workspace_state( + &new_set.workspaces[new_set.active].handle, + WState::Active, + ); + } } }