toplevel-management: Make move_to_workspace work with minimized window
Iterating over `.windows()` for each workspace does not iterate over `minimized_windows`, so `from_workspace` was not found. Simply changing this to use `element_for_surface` and `space_for` (like `fullscreen` and `unfullscreen`) fixes this. Addresses https://github.com/pop-os/cosmic-workspaces-epoch/issues/89. Though it does unminimize the window, which we may also want to change.
This commit is contained in:
parent
7822030e0b
commit
9b3a42d450
1 changed files with 17 additions and 26 deletions
|
|
@ -109,33 +109,24 @@ impl ToplevelManagementHandler for State {
|
|||
};
|
||||
|
||||
let mut shell = self.common.shell.write().unwrap();
|
||||
let from_workspace = shell.workspaces.spaces().find(|w| {
|
||||
w.mapped()
|
||||
.flat_map(|m| m.windows().map(|(s, _)| s))
|
||||
.any(|w| &w == window)
|
||||
});
|
||||
if let Some(from_workspace) = from_workspace {
|
||||
let mapped = from_workspace
|
||||
.mapped()
|
||||
.find(|m| m.windows().any(|(w, _)| &w == window))
|
||||
.unwrap()
|
||||
.clone();
|
||||
let from_handle = from_workspace.handle;
|
||||
let seat = shell.seats.last_active().clone();
|
||||
let res = shell.move_window(
|
||||
Some(&seat),
|
||||
&mapped,
|
||||
&from_handle,
|
||||
&to_handle,
|
||||
false,
|
||||
None,
|
||||
&mut self.common.workspace_state.update(),
|
||||
);
|
||||
if let Some((target, _)) = res {
|
||||
std::mem::drop(shell);
|
||||
Shell::set_focus(self, Some(&target), &seat, None, true);
|
||||
if let Some(mapped) = shell.element_for_surface(window).cloned() {
|
||||
if let Some(from_workspace) = shell.space_for(&mapped) {
|
||||
let from_handle = from_workspace.handle;
|
||||
let seat = shell.seats.last_active().clone();
|
||||
let res = shell.move_window(
|
||||
Some(&seat),
|
||||
&mapped,
|
||||
&from_handle,
|
||||
&to_handle,
|
||||
false,
|
||||
None,
|
||||
&mut self.common.workspace_state.update(),
|
||||
);
|
||||
if let Some((target, _)) = res {
|
||||
std::mem::drop(shell);
|
||||
Shell::set_focus(self, Some(&target), &seat, None, true);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue