mirror of
https://github.com/LGUG2Z/komorebi.git
synced 2026-04-24 17:48:34 +02:00
feat(wm): add close and minimize cmd
this commit adds the ability to close and minimize the current focused window via SocketMessages and komorebic commands resolve #189
This commit is contained in:
@@ -51,6 +51,8 @@ pub enum SocketMessage {
|
|||||||
SendContainerToWorkspaceNumber(usize),
|
SendContainerToWorkspaceNumber(usize),
|
||||||
SendContainerToMonitorWorkspaceNumber(usize, usize),
|
SendContainerToMonitorWorkspaceNumber(usize, usize),
|
||||||
MoveWorkspaceToMonitorNumber(usize),
|
MoveWorkspaceToMonitorNumber(usize),
|
||||||
|
Close,
|
||||||
|
Minimize,
|
||||||
Promote,
|
Promote,
|
||||||
PromoteFocus,
|
PromoteFocus,
|
||||||
ToggleFloat,
|
ToggleFloat,
|
||||||
|
|||||||
@@ -177,6 +177,8 @@ impl WindowManager {
|
|||||||
SocketMessage::CycleStack(direction) => {
|
SocketMessage::CycleStack(direction) => {
|
||||||
self.cycle_container_window_in_direction(direction)?;
|
self.cycle_container_window_in_direction(direction)?;
|
||||||
}
|
}
|
||||||
|
SocketMessage::Close => self.focused_window()?.close(),
|
||||||
|
SocketMessage::Minimize => self.focused_window()?.minimize(),
|
||||||
SocketMessage::ToggleFloat => self.toggle_float()?,
|
SocketMessage::ToggleFloat => self.toggle_float()?,
|
||||||
SocketMessage::ToggleMonocle => self.toggle_monocle()?,
|
SocketMessage::ToggleMonocle => self.toggle_monocle()?,
|
||||||
SocketMessage::ToggleMaximize => self.toggle_maximize()?,
|
SocketMessage::ToggleMaximize => self.toggle_maximize()?,
|
||||||
|
|||||||
@@ -151,6 +151,14 @@ impl Window {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn minimize(self) {
|
||||||
|
WindowsApi::minimize_window(self.hwnd());
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn close(self) {
|
||||||
|
WindowsApi::close_window(self.hwnd());
|
||||||
|
}
|
||||||
|
|
||||||
pub fn restore(self) {
|
pub fn restore(self) {
|
||||||
let mut programmatically_hidden_hwnds = HIDDEN_HWNDS.lock();
|
let mut programmatically_hidden_hwnds = HIDDEN_HWNDS.lock();
|
||||||
if let Some(idx) = programmatically_hidden_hwnds
|
if let Some(idx) = programmatically_hidden_hwnds
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ use windows::Win32::Foundation::HINSTANCE;
|
|||||||
use windows::Win32::Foundation::HWND;
|
use windows::Win32::Foundation::HWND;
|
||||||
use windows::Win32::Foundation::LPARAM;
|
use windows::Win32::Foundation::LPARAM;
|
||||||
use windows::Win32::Foundation::POINT;
|
use windows::Win32::Foundation::POINT;
|
||||||
|
use windows::Win32::Foundation::WPARAM;
|
||||||
use windows::Win32::Graphics::Dwm::DwmGetWindowAttribute;
|
use windows::Win32::Graphics::Dwm::DwmGetWindowAttribute;
|
||||||
use windows::Win32::Graphics::Dwm::DwmSetWindowAttribute;
|
use windows::Win32::Graphics::Dwm::DwmSetWindowAttribute;
|
||||||
use windows::Win32::Graphics::Dwm::DWMWA_CLOAKED;
|
use windows::Win32::Graphics::Dwm::DWMWA_CLOAKED;
|
||||||
@@ -68,6 +69,7 @@ use windows::Win32::UI::WindowsAndMessaging::GetWindowThreadProcessId;
|
|||||||
use windows::Win32::UI::WindowsAndMessaging::IsIconic;
|
use windows::Win32::UI::WindowsAndMessaging::IsIconic;
|
||||||
use windows::Win32::UI::WindowsAndMessaging::IsWindow;
|
use windows::Win32::UI::WindowsAndMessaging::IsWindow;
|
||||||
use windows::Win32::UI::WindowsAndMessaging::IsWindowVisible;
|
use windows::Win32::UI::WindowsAndMessaging::IsWindowVisible;
|
||||||
|
use windows::Win32::UI::WindowsAndMessaging::PostMessageW;
|
||||||
use windows::Win32::UI::WindowsAndMessaging::RealGetWindowClassW;
|
use windows::Win32::UI::WindowsAndMessaging::RealGetWindowClassW;
|
||||||
use windows::Win32::UI::WindowsAndMessaging::RegisterClassA;
|
use windows::Win32::UI::WindowsAndMessaging::RegisterClassA;
|
||||||
use windows::Win32::UI::WindowsAndMessaging::SetCursorPos;
|
use windows::Win32::UI::WindowsAndMessaging::SetCursorPos;
|
||||||
@@ -99,6 +101,7 @@ use windows::Win32::UI::WindowsAndMessaging::SW_SHOWNOACTIVATE;
|
|||||||
use windows::Win32::UI::WindowsAndMessaging::SYSTEM_PARAMETERS_INFO_ACTION;
|
use windows::Win32::UI::WindowsAndMessaging::SYSTEM_PARAMETERS_INFO_ACTION;
|
||||||
use windows::Win32::UI::WindowsAndMessaging::SYSTEM_PARAMETERS_INFO_UPDATE_FLAGS;
|
use windows::Win32::UI::WindowsAndMessaging::SYSTEM_PARAMETERS_INFO_UPDATE_FLAGS;
|
||||||
use windows::Win32::UI::WindowsAndMessaging::WINDOW_LONG_PTR_INDEX;
|
use windows::Win32::UI::WindowsAndMessaging::WINDOW_LONG_PTR_INDEX;
|
||||||
|
use windows::Win32::UI::WindowsAndMessaging::WM_CLOSE;
|
||||||
use windows::Win32::UI::WindowsAndMessaging::WNDCLASSA;
|
use windows::Win32::UI::WindowsAndMessaging::WNDCLASSA;
|
||||||
use windows::Win32::UI::WindowsAndMessaging::WNDENUMPROC;
|
use windows::Win32::UI::WindowsAndMessaging::WNDENUMPROC;
|
||||||
use windows::Win32::UI::WindowsAndMessaging::WS_EX_LAYERED;
|
use windows::Win32::UI::WindowsAndMessaging::WS_EX_LAYERED;
|
||||||
@@ -336,6 +339,10 @@ impl WindowsApi {
|
|||||||
Self::show_window(hwnd, SW_MINIMIZE);
|
Self::show_window(hwnd, SW_MINIMIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn close_window(hwnd: HWND) {
|
||||||
|
unsafe { PostMessageW(hwnd, WM_CLOSE, WPARAM(0), LPARAM(0)) };
|
||||||
|
}
|
||||||
|
|
||||||
pub fn hide_window(hwnd: HWND) {
|
pub fn hide_window(hwnd: HWND) {
|
||||||
Self::show_window(hwnd, SW_HIDE);
|
Self::show_window(hwnd, SW_HIDE);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -517,6 +517,10 @@ enum SubCommand {
|
|||||||
/// Move the focused window in the specified direction
|
/// Move the focused window in the specified direction
|
||||||
#[clap(arg_required_else_help = true)]
|
#[clap(arg_required_else_help = true)]
|
||||||
Move(Move),
|
Move(Move),
|
||||||
|
/// Minimize the focused window
|
||||||
|
Minimize,
|
||||||
|
/// Close the focused window
|
||||||
|
Close,
|
||||||
/// Change focus to the window in the specified cycle direction
|
/// Change focus to the window in the specified cycle direction
|
||||||
#[clap(arg_required_else_help = true)]
|
#[clap(arg_required_else_help = true)]
|
||||||
CycleFocus(CycleFocus),
|
CycleFocus(CycleFocus),
|
||||||
@@ -775,6 +779,12 @@ fn main() -> Result<()> {
|
|||||||
SubCommand::Focus(arg) => {
|
SubCommand::Focus(arg) => {
|
||||||
send_message(&SocketMessage::FocusWindow(arg.operation_direction).as_bytes()?)?;
|
send_message(&SocketMessage::FocusWindow(arg.operation_direction).as_bytes()?)?;
|
||||||
}
|
}
|
||||||
|
SubCommand::Close => {
|
||||||
|
send_message(&SocketMessage::Close.as_bytes()?)?;
|
||||||
|
}
|
||||||
|
SubCommand::Minimize => {
|
||||||
|
send_message(&SocketMessage::Minimize.as_bytes()?)?;
|
||||||
|
}
|
||||||
SubCommand::Promote => {
|
SubCommand::Promote => {
|
||||||
send_message(&SocketMessage::Promote.as_bytes()?)?;
|
send_message(&SocketMessage::Promote.as_bytes()?)?;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user