From 532949409c6ea28df6634cac327c255a92e61046 Mon Sep 17 00:00:00 2001 From: LGUG2Z Date: Mon, 17 Mar 2025 19:13:22 -0700 Subject: [PATCH] fix(borders): show regular cursor on hover This commit ensures that the WM_SETCURSOR message is handled by border windows by setting the cursor to the default IDC_ARROW, which prevents the spinning "Loading" icon from showing on hover. Some credit is due to the user steiner5 on Discord for whining about me not being interested in working on this while more generally complaining about komorebi, which consequently made me want to work on this out of spite since he's probably going to bounce off the software anyway. --- komorebi/src/border_manager/border.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/komorebi/src/border_manager/border.rs b/komorebi/src/border_manager/border.rs index c156956c..017b0e71 100644 --- a/komorebi/src/border_manager/border.rs +++ b/komorebi/src/border_manager/border.rs @@ -51,18 +51,22 @@ use windows::Win32::UI::WindowsAndMessaging::DispatchMessageW; use windows::Win32::UI::WindowsAndMessaging::GetMessageW; use windows::Win32::UI::WindowsAndMessaging::GetSystemMetrics; use windows::Win32::UI::WindowsAndMessaging::GetWindowLongPtrW; +use windows::Win32::UI::WindowsAndMessaging::LoadCursorW; use windows::Win32::UI::WindowsAndMessaging::PostQuitMessage; +use windows::Win32::UI::WindowsAndMessaging::SetCursor; use windows::Win32::UI::WindowsAndMessaging::SetWindowLongPtrW; use windows::Win32::UI::WindowsAndMessaging::TranslateMessage; use windows::Win32::UI::WindowsAndMessaging::CREATESTRUCTW; use windows::Win32::UI::WindowsAndMessaging::EVENT_OBJECT_DESTROY; use windows::Win32::UI::WindowsAndMessaging::EVENT_OBJECT_LOCATIONCHANGE; use windows::Win32::UI::WindowsAndMessaging::GWLP_USERDATA; +use windows::Win32::UI::WindowsAndMessaging::IDC_ARROW; use windows::Win32::UI::WindowsAndMessaging::MSG; use windows::Win32::UI::WindowsAndMessaging::SM_CXVIRTUALSCREEN; use windows::Win32::UI::WindowsAndMessaging::WM_CREATE; use windows::Win32::UI::WindowsAndMessaging::WM_DESTROY; use windows::Win32::UI::WindowsAndMessaging::WM_PAINT; +use windows::Win32::UI::WindowsAndMessaging::WM_SETCURSOR; use windows::Win32::UI::WindowsAndMessaging::WNDCLASSW; use windows_core::BOOL; use windows_core::PCWSTR; @@ -336,6 +340,16 @@ impl Border { ) -> LRESULT { unsafe { match message { + WM_SETCURSOR => match LoadCursorW(None, IDC_ARROW) { + Ok(cursor) => { + SetCursor(Some(cursor)); + LRESULT(0) + } + Err(error) => { + tracing::error!("{error}"); + LRESULT(1) + } + }, WM_CREATE => { let mut border_pointer: *mut Border = GetWindowLongPtrW(window, GWLP_USERDATA) as _;