Fix sticky toggle crashes on maximized windows (#1110)
This commit is contained in:
parent
9b78a2d780
commit
68b6156aa8
1 changed files with 40 additions and 10 deletions
|
|
@ -3567,12 +3567,26 @@ impl Shell {
|
||||||
toplevel_leave_workspace(&window, &handle);
|
toplevel_leave_workspace(&window, &handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.workspaces
|
let set = self.workspaces.sets.get_mut(&output).unwrap();
|
||||||
.sets
|
set.sticky_layer.map(mapped.clone(), geometry.loc);
|
||||||
.get_mut(&output)
|
|
||||||
.unwrap()
|
let mut state = mapped.maximized_state.lock().unwrap();
|
||||||
.sticky_layer
|
if let Some(MaximizedState {
|
||||||
.map(mapped.clone(), geometry.loc);
|
original_geometry,
|
||||||
|
original_layer: _,
|
||||||
|
}) = *state
|
||||||
|
{
|
||||||
|
*state = Some(MaximizedState {
|
||||||
|
original_geometry,
|
||||||
|
original_layer: ManagedLayer::Sticky,
|
||||||
|
});
|
||||||
|
std::mem::drop(state);
|
||||||
|
set.workspaces[set.active].floating_layer.map_maximized(
|
||||||
|
mapped.clone(),
|
||||||
|
geometry,
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
}
|
||||||
} else if let Some(set) = self
|
} else if let Some(set) = self
|
||||||
.workspaces
|
.workspaces
|
||||||
.sets
|
.sets
|
||||||
|
|
@ -3587,14 +3601,14 @@ impl Shell {
|
||||||
toplevel_enter_workspace(&window, &workspace.handle);
|
toplevel_enter_workspace(&window, &workspace.handle);
|
||||||
window.set_sticky(false);
|
window.set_sticky(false);
|
||||||
}
|
}
|
||||||
|
let previous_layer = mapped
|
||||||
match mapped
|
|
||||||
.previous_layer
|
.previous_layer
|
||||||
.lock()
|
.lock()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.take()
|
.take()
|
||||||
.unwrap_or(ManagedLayer::Floating)
|
.unwrap_or(ManagedLayer::Floating);
|
||||||
{
|
|
||||||
|
match previous_layer {
|
||||||
ManagedLayer::Tiling if workspace.tiling_enabled => {
|
ManagedLayer::Tiling if workspace.tiling_enabled => {
|
||||||
let focus_stack = workspace.focus_stack.get(seat);
|
let focus_stack = workspace.focus_stack.get(seat);
|
||||||
workspace
|
workspace
|
||||||
|
|
@ -3604,6 +3618,22 @@ impl Shell {
|
||||||
ManagedLayer::Sticky => unreachable!(),
|
ManagedLayer::Sticky => unreachable!(),
|
||||||
_ => workspace.floating_layer.map(mapped.clone(), geometry.loc),
|
_ => workspace.floating_layer.map(mapped.clone(), geometry.loc),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let mut state = mapped.maximized_state.lock().unwrap();
|
||||||
|
if let Some(MaximizedState {
|
||||||
|
original_geometry,
|
||||||
|
original_layer: _,
|
||||||
|
}) = *state
|
||||||
|
{
|
||||||
|
*state = Some(MaximizedState {
|
||||||
|
original_geometry,
|
||||||
|
original_layer: previous_layer,
|
||||||
|
});
|
||||||
|
std::mem::drop(state);
|
||||||
|
workspace
|
||||||
|
.floating_layer
|
||||||
|
.map_maximized(mapped.clone(), geometry, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.append_focus_stack(&mapped, seat);
|
self.append_focus_stack(&mapped, seat);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue