diff --git a/komorebi/src/window.rs b/komorebi/src/window.rs index ce9f16f7..d13ac93a 100644 --- a/komorebi/src/window.rs +++ b/komorebi/src/window.rs @@ -175,6 +175,18 @@ impl Window { WindowsApi::maximize_window(self.hwnd()); } + pub fn unmaximize(self) { + let mut programmatically_hidden_hwnds = HIDDEN_HWNDS.lock(); + if let Some(idx) = programmatically_hidden_hwnds + .iter() + .position(|&hwnd| hwnd == self.hwnd) + { + programmatically_hidden_hwnds.remove(idx); + } + + WindowsApi::unmaximize_window(self.hwnd()); + } + pub fn raise(self) -> Result<()> { // Attach komorebi thread to Window thread let (_, window_thread_id) = WindowsApi::window_thread_process_id(self.hwnd()); diff --git a/komorebi/src/windows_api.rs b/komorebi/src/windows_api.rs index ae5ecbd1..e7670ce1 100644 --- a/komorebi/src/windows_api.rs +++ b/komorebi/src/windows_api.rs @@ -76,6 +76,7 @@ use windows::Win32::UI::WindowsAndMessaging::SPI_SETACTIVEWINDOWTRACKING; use windows::Win32::UI::WindowsAndMessaging::SW_HIDE; use windows::Win32::UI::WindowsAndMessaging::SW_MAXIMIZE; use windows::Win32::UI::WindowsAndMessaging::SW_MINIMIZE; +use windows::Win32::UI::WindowsAndMessaging::SW_NORMAL; use windows::Win32::UI::WindowsAndMessaging::SW_RESTORE; use windows::Win32::UI::WindowsAndMessaging::SYSTEM_PARAMETERS_INFO_ACTION; use windows::Win32::UI::WindowsAndMessaging::SYSTEM_PARAMETERS_INFO_UPDATE_FLAGS; @@ -294,6 +295,10 @@ impl WindowsApi { Self::show_window(hwnd, SW_RESTORE); } + pub fn unmaximize_window(hwnd: HWND) { + Self::show_window(hwnd, SW_NORMAL); + } + pub fn maximize_window(hwnd: HWND) { Self::show_window(hwnd, SW_MAXIMIZE); } diff --git a/komorebi/src/workspace.rs b/komorebi/src/workspace.rs index 30ee21a8..42366636 100644 --- a/komorebi/src/workspace.rs +++ b/komorebi/src/workspace.rs @@ -466,6 +466,7 @@ impl Workspace { if let Some(window) = self.maximized_window() { if window.hwnd == hwnd { + window.unmaximize(); self.set_maximized_window(None); self.set_maximized_window_restore_idx(None); return Ok(());