tiling: Focus whole stack on Focus::In

This commit is contained in:
Victoria Brekenfeld 2023-06-14 17:29:08 +02:00
parent 5884e287a5
commit 1452281fa7
3 changed files with 18 additions and 1 deletions

View file

@ -465,6 +465,13 @@ impl CosmicMapped {
}
}
pub fn stack_ref(&self) -> Option<&CosmicStack> {
match &self.element {
CosmicMappedInternal::Stack(stack) => Some(stack),
_ => None,
}
}
pub fn stack_ref_mut(&mut self) -> Option<&mut CosmicStack> {
match &mut self.element {
CosmicMappedInternal::Stack(stack) => Some(stack),

View file

@ -436,6 +436,11 @@ impl CosmicStack {
})
}
pub(in super::super) fn focus_stack(&self) {
self.0
.with_program(|p| p.group_focused.store(true, Ordering::SeqCst));
}
pub(super) fn loop_handle(&self) -> LoopHandle<'static, crate::state::Data> {
self.0.loop_handle()
}

View file

@ -984,7 +984,12 @@ impl TilingLayout {
if let Some(id) = id {
return match tree.get(&id).unwrap().data() {
Data::Mapped { mapped, .. } => FocusResult::Some(mapped.clone().into()),
Data::Mapped { mapped, .. } => {
if mapped.is_stack() {
mapped.stack_ref().unwrap().focus_stack();
}
FocusResult::Some(mapped.clone().into())
}
Data::Group { alive, .. } => FocusResult::Some(
WindowGroup {
node: id,