diff --git a/src/shell/mod.rs b/src/shell/mod.rs index b5518cc7..41a28793 100644 --- a/src/shell/mod.rs +++ b/src/shell/mod.rs @@ -992,6 +992,9 @@ impl Shell { vec![ ManagementCapabilities::Close, ManagementCapabilities::Activate, + ManagementCapabilities::Maximize, + ManagementCapabilities::Minimize, + ManagementCapabilities::MoveToWorkspace, ], client_should_see_privileged_protocols, ); diff --git a/src/wayland/handlers/toplevel_management.rs b/src/wayland/handlers/toplevel_management.rs index 75ca3707..4381a19c 100644 --- a/src/wayland/handlers/toplevel_management.rs +++ b/src/wayland/handlers/toplevel_management.rs @@ -94,6 +94,59 @@ impl ToplevelManagementHandler for State { return; } } + + fn fullscreen( + &mut self, + _dh: &DisplayHandle, + window: &::Window, + output: Option, + ) { + if let Some(mapped) = self.common.shell.element_for_surface(window).cloned() { + if let Some(output) = output { + let workspace = self.common.shell.workspaces.active_mut(&output); + workspace.fullscreen_request(window, None); + } else if let Some(workspace) = self.common.shell.space_for_mut(&mapped) { + workspace.fullscreen_request(window, None); + } + } + } + + fn unfullscreen( + &mut self, + _dh: &DisplayHandle, + window: &::Window, + ) { + if let Some(mapped) = self.common.shell.element_for_surface(window).cloned() { + if let Some(workspace) = self.common.shell.space_for_mut(&mapped) { + let previous = workspace.unfullscreen_request(window); + assert!(previous.is_none()); + } + } + } + + fn maximize(&mut self, _dh: &DisplayHandle, window: &::Window) { + if let Some(mapped) = self.common.shell.element_for_surface(window).cloned() { + self.common.shell.maximize_request(&mapped); + } + } + + fn unmaximize(&mut self, _dh: &DisplayHandle, window: &::Window) { + if let Some(mapped) = self.common.shell.element_for_surface(window).cloned() { + self.common.shell.unmaximize_request(&mapped); + } + } + + fn minimize(&mut self, _dh: &DisplayHandle, window: &::Window) { + if let Some(mapped) = self.common.shell.element_for_surface(window).cloned() { + self.common.shell.minimize_request(&mapped); + } + } + + fn unminimize(&mut self, _dh: &DisplayHandle, window: &::Window) { + if let Some(mapped) = self.common.shell.element_for_surface(window).cloned() { + self.common.shell.unminimize_request(&mapped); + } + } } impl ManagementWindow for CosmicSurface {