mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-04-23 17:18:40 +02:00
fix(wm): prevent stack-all issues with n>1 stacks on ws
This commit ensures that unstack_all is called on a workspace before attempting to proceed with stack_all to avoid stacking loops that can occur when there are multiple pre-existing stacks already created on the workspace.
This commit is contained in:
@@ -349,7 +349,7 @@ impl WindowManager {
|
|||||||
SocketMessage::StackWindow(direction) => self.add_window_to_container(direction)?,
|
SocketMessage::StackWindow(direction) => self.add_window_to_container(direction)?,
|
||||||
SocketMessage::UnstackWindow => self.remove_window_from_container()?,
|
SocketMessage::UnstackWindow => self.remove_window_from_container()?,
|
||||||
SocketMessage::StackAll => self.stack_all()?,
|
SocketMessage::StackAll => self.stack_all()?,
|
||||||
SocketMessage::UnstackAll => self.unstack_all()?,
|
SocketMessage::UnstackAll => self.unstack_all(true)?,
|
||||||
SocketMessage::CycleStack(direction) => {
|
SocketMessage::CycleStack(direction) => {
|
||||||
self.cycle_container_window_in_direction(direction)?;
|
self.cycle_container_window_in_direction(direction)?;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2960,6 +2960,8 @@ impl WindowManager {
|
|||||||
|
|
||||||
#[tracing::instrument(skip(self))]
|
#[tracing::instrument(skip(self))]
|
||||||
pub fn stack_all(&mut self) -> Result<()> {
|
pub fn stack_all(&mut self) -> Result<()> {
|
||||||
|
self.unstack_all(false)?;
|
||||||
|
|
||||||
self.handle_unmanaged_window_behaviour()?;
|
self.handle_unmanaged_window_behaviour()?;
|
||||||
tracing::info!("stacking all windows on workspace");
|
tracing::info!("stacking all windows on workspace");
|
||||||
|
|
||||||
@@ -2986,7 +2988,7 @@ impl WindowManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[tracing::instrument(skip(self))]
|
#[tracing::instrument(skip(self))]
|
||||||
pub fn unstack_all(&mut self) -> Result<()> {
|
pub fn unstack_all(&mut self, update_workspace: bool) -> Result<()> {
|
||||||
self.handle_unmanaged_window_behaviour()?;
|
self.handle_unmanaged_window_behaviour()?;
|
||||||
tracing::info!("unstacking all windows in container");
|
tracing::info!("unstacking all windows in container");
|
||||||
|
|
||||||
@@ -3016,7 +3018,11 @@ impl WindowManager {
|
|||||||
workspace.focus_container_by_window(hwnd)?;
|
workspace.focus_container_by_window(hwnd)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.update_focused_workspace(self.mouse_follows_focus, true)
|
if update_workspace {
|
||||||
|
self.update_focused_workspace(self.mouse_follows_focus, true)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tracing::instrument(skip(self))]
|
#[tracing::instrument(skip(self))]
|
||||||
|
|||||||
Reference in New Issue
Block a user