fix: restore snapped windows as snapped after maximize/minimize

This commit is contained in:
Hojjat 2026-04-21 15:52:26 -06:00 committed by Victoria Brekenfeld
parent 7c02df250e
commit b5186ef21a
4 changed files with 42 additions and 7 deletions

View file

@ -2591,6 +2591,7 @@ impl Shell {
*state = Some(MaximizedState {
original_geometry: geometry,
original_layer: ManagedLayer::Floating,
original_snapped: was_snapped,
});
std::mem::drop(state);
workspace.floating_layer.map_maximized(
@ -2625,6 +2626,7 @@ impl Shell {
*state = Some(MaximizedState {
original_geometry: previous_geometry,
original_layer: ManagedLayer::Tiling,
original_snapped: None,
});
std::mem::drop(state);
workspace.floating_layer.map_maximized(
@ -2647,6 +2649,7 @@ impl Shell {
*state = Some(MaximizedState {
original_geometry: geometry,
original_layer: ManagedLayer::Floating,
original_snapped: None,
});
std::mem::drop(state);
workspace.floating_layer.map_maximized(
@ -3372,6 +3375,7 @@ impl Shell {
*mapped.maximized_state.lock().unwrap() = Some(MaximizedState {
original_geometry: geometry,
original_layer: ManagedLayer::Floating,
original_snapped: was_snapped,
});
to_workspace
.floating_layer
@ -4281,6 +4285,7 @@ impl Shell {
*state = Some(MaximizedState {
original_geometry,
original_layer,
original_snapped: None,
});
std::mem::drop(state);
floating_layer.map_maximized(mapped.clone(), original_geometry, animate);
@ -4304,7 +4309,7 @@ impl Shell {
.iter_mut()
.find(|m| m.mapped().is_some_and(|m| m == mapped))
{
minimized.unmaximize(state.original_geometry);
minimized.unmaximize(state.original_geometry, state.original_snapped);
} else {
mapped.set_maximized(false);
set.sticky_layer.map_internal(
@ -4313,6 +4318,10 @@ impl Shell {
Some(state.original_geometry.size.as_logical()),
None,
);
// Re-apply the snap if the window was snapped when it was maximized.
if let Some(corners) = state.original_snapped {
set.sticky_layer.snap_to_corner(mapped, &corners);
}
}
Some(state.original_geometry.size.as_logical())
} else {
@ -4589,11 +4598,13 @@ impl Shell {
if let Some(MaximizedState {
original_geometry,
original_layer: _,
original_snapped,
}) = *state
{
*state = Some(MaximizedState {
original_geometry,
original_layer: ManagedLayer::Sticky,
original_snapped,
});
std::mem::drop(state);
set.workspaces[set.active].floating_layer.map_maximized(
@ -4637,11 +4648,13 @@ impl Shell {
if let Some(MaximizedState {
original_geometry,
original_layer: _,
original_snapped,
}) = *state
{
*state = Some(MaximizedState {
original_geometry,
original_layer: previous_layer,
original_snapped,
});
std::mem::drop(state);
workspace