shell: Preserve fullscreen state when moving window between workspaces
This commit is contained in:
parent
1dab42ed56
commit
90ce9cab90
2 changed files with 32 additions and 1 deletions
|
|
@ -3128,7 +3128,18 @@ impl Shell {
|
||||||
let from_workspace = self.workspaces.space_for_handle_mut(from).unwrap(); // checked above
|
let from_workspace = self.workspaces.space_for_handle_mut(from).unwrap(); // checked above
|
||||||
|
|
||||||
let is_minimized = window.is_minimized();
|
let is_minimized = window.is_minimized();
|
||||||
let mut window_state = from_workspace.unmap_surface(window)?.1;
|
let is_fullscreen = from_workspace.get_fullscreen().is_some_and(|f| f == window);
|
||||||
|
let mut window_state = if is_fullscreen {
|
||||||
|
let (previous_state, previous_geometry) = from_workspace.take_fullscreen().unwrap();
|
||||||
|
WorkspaceRestoreData::Fullscreen(previous_state.zip(previous_geometry).map(
|
||||||
|
|(previous_state, previous_geometry)| FullscreenRestoreData {
|
||||||
|
previous_state,
|
||||||
|
previous_geometry,
|
||||||
|
},
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
from_workspace.unmap_surface(window)?.1
|
||||||
|
};
|
||||||
|
|
||||||
toplevel_leave_workspace(window, from);
|
toplevel_leave_workspace(window, from);
|
||||||
if from_output != to_output {
|
if from_output != to_output {
|
||||||
|
|
|
||||||
|
|
@ -1235,6 +1235,26 @@ impl Workspace {
|
||||||
res
|
res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[must_use]
|
||||||
|
pub fn take_fullscreen(
|
||||||
|
&mut self,
|
||||||
|
) -> Option<(
|
||||||
|
Option<FullscreenRestoreState>,
|
||||||
|
Option<Rectangle<i32, Local>>,
|
||||||
|
)> {
|
||||||
|
let surface = self.fullscreen.take()?;
|
||||||
|
if surface.ended_at.is_some() {
|
||||||
|
self.fullscreen = Some(surface);
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
|
for focus_stack in self.focus_stack.0.values_mut() {
|
||||||
|
focus_stack.retain(|t| t != &surface.surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
Some((surface.previous_state, surface.previous_geometry))
|
||||||
|
}
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn remove_fullscreen(
|
pub fn remove_fullscreen(
|
||||||
&mut self,
|
&mut self,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue