From 13be507093896f3f77914f47e313759c325392bf Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Thu, 8 Feb 2024 20:29:16 +0100 Subject: [PATCH] toplevel-management: Wire up more actions --- src/shell/mod.rs | 3 ++ src/wayland/handlers/toplevel_management.rs | 53 +++++++++++++++++++++ 2 files changed, 56 insertions(+) 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 {