ext_workspace: Fix activation for output-bound

This commit is contained in:
Victoria Brekenfeld 2022-11-22 16:31:58 +01:00
parent a066edab0b
commit 57f15da85d

View file

@ -1,6 +1,7 @@
// SPDX-License-Identifier: GPL-3.0-only
use crate::{
shell::WorkspaceMode,
state::ClientState,
utils::prelude::*,
wayland::protocols::workspace::{
@ -29,14 +30,21 @@ impl WorkspaceHandler for State {
for request in requests.into_iter() {
match request {
Request::Activate(handle) => {
let output = self.common.last_active_seat().active_output();
let maybe_idx = self
.common
.shell
.workspaces
.spaces_for_output(&output)
.position(|w| w.handle == handle);
if let Some(idx) = maybe_idx {
let maybe = match &self.common.shell.workspaces {
WorkspaceMode::Global(set) => set
.workspaces
.iter()
.position(|w| w.handle == handle)
.map(|i| (self.common.last_active_seat().active_output(), i)),
WorkspaceMode::OutputBound(sets, _) => sets.iter().find_map(|(o, set)| {
set.workspaces
.iter()
.position(|w| w.handle == handle)
.map(|i| (o.clone(), i))
}),
};
if let Some((output, idx)) = maybe {
self.common.shell.activate(&output, idx);
}
}