Windows: Refactoring (#9580)

白山風露 created

Aggregate `DefWindowProc` calls with individual handler return value as
`Option<isize>`

Release Notes:

- N/A

Change summary

crates/gpui/src/platform/windows/window.rs | 283 +++++++++++------------
1 file changed, 131 insertions(+), 152 deletions(-)

Detailed changes

crates/gpui/src/platform/windows/window.rs 🔗

@@ -164,7 +164,7 @@ impl WindowsWindowInner {
         let height = self.title_bar_height();
         let mut rect = RECT::default();
         unsafe { GetClientRect(self.hwnd, &mut rect) }?;
-        rect.bottom = rect.top + ((height.0 as f32 * self.scale_factor.get()).round() as i32);
+        rect.bottom = rect.top + ((height.0 * self.scale_factor.get()).round() as i32);
         Ok(rect)
     }
 
@@ -190,79 +190,68 @@ impl WindowsWindowInner {
 
     fn handle_msg(&self, msg: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
         log::debug!("msg: {msg}, wparam: {}, lparam: {}", wparam.0, lparam.0);
-        match msg {
-            WM_ACTIVATE => self.handle_activate_msg(msg, wparam, lparam),
+        let handled = match msg {
+            WM_ACTIVATE => self.handle_activate_msg(),
             WM_CREATE => self.handle_create_msg(lparam),
             WM_SETFOCUS => self.handle_set_focus_msg(msg, wparam, lparam),
             WM_MOVE => self.handle_move_msg(lparam),
             WM_SIZE => self.handle_size_msg(lparam),
-            WM_NCCALCSIZE => self.handle_calc_client_size(msg, wparam, lparam),
+            WM_NCCALCSIZE => self.handle_calc_client_size(wparam, lparam),
             WM_DPICHANGED => self.handle_dpi_changed_msg(wparam, lparam),
             WM_NCHITTEST => self.handle_hit_test_msg(msg, wparam, lparam),
             WM_PAINT => self.handle_paint_msg(),
-            WM_CLOSE => self.handle_close_msg(msg, wparam, lparam),
+            WM_CLOSE => self.handle_close_msg(),
             WM_DESTROY => self.handle_destroy_msg(),
             WM_MOUSEMOVE => self.handle_mouse_move_msg(lparam, wparam),
-            WM_NCMOUSEMOVE => self.handle_nc_mouse_move_msg(msg, wparam, lparam),
-            WM_NCLBUTTONDOWN => {
-                self.handle_nc_mouse_down_msg(MouseButton::Left, msg, wparam, lparam)
-            }
-            WM_NCRBUTTONDOWN => {
-                self.handle_nc_mouse_down_msg(MouseButton::Right, msg, wparam, lparam)
-            }
-            WM_NCMBUTTONDOWN => {
-                self.handle_nc_mouse_down_msg(MouseButton::Middle, msg, wparam, lparam)
-            }
-            WM_NCLBUTTONUP => self.handle_nc_mouse_up_msg(MouseButton::Left, msg, wparam, lparam),
-            WM_NCRBUTTONUP => self.handle_nc_mouse_up_msg(MouseButton::Right, msg, wparam, lparam),
-            WM_NCMBUTTONUP => self.handle_nc_mouse_up_msg(MouseButton::Middle, msg, wparam, lparam),
+            WM_NCMOUSEMOVE => self.handle_nc_mouse_move_msg(lparam),
+            WM_NCLBUTTONDOWN => self.handle_nc_mouse_down_msg(MouseButton::Left, wparam, lparam),
+            WM_NCRBUTTONDOWN => self.handle_nc_mouse_down_msg(MouseButton::Right, wparam, lparam),
+            WM_NCMBUTTONDOWN => self.handle_nc_mouse_down_msg(MouseButton::Middle, wparam, lparam),
+            WM_NCLBUTTONUP => self.handle_nc_mouse_up_msg(MouseButton::Left, wparam, lparam),
+            WM_NCRBUTTONUP => self.handle_nc_mouse_up_msg(MouseButton::Right, wparam, lparam),
+            WM_NCMBUTTONUP => self.handle_nc_mouse_up_msg(MouseButton::Middle, wparam, lparam),
             WM_LBUTTONDOWN => self.handle_mouse_down_msg(MouseButton::Left, lparam),
             WM_RBUTTONDOWN => self.handle_mouse_down_msg(MouseButton::Right, lparam),
             WM_MBUTTONDOWN => self.handle_mouse_down_msg(MouseButton::Middle, lparam),
             WM_XBUTTONDOWN => {
                 let nav_dir = match wparam.hiword() {
-                    XBUTTON1 => Some(NavigationDirection::Forward),
-                    XBUTTON2 => Some(NavigationDirection::Back),
-                    _ => None,
+                    XBUTTON1 => NavigationDirection::Forward,
+                    XBUTTON2 => NavigationDirection::Back,
+                    _ => return LRESULT(1),
                 };
-
-                if let Some(nav_dir) = nav_dir {
-                    self.handle_mouse_down_msg(MouseButton::Navigate(nav_dir), lparam)
-                } else {
-                    LRESULT(1)
-                }
+                self.handle_mouse_down_msg(MouseButton::Navigate(nav_dir), lparam)
             }
             WM_LBUTTONUP => self.handle_mouse_up_msg(MouseButton::Left, lparam),
             WM_RBUTTONUP => self.handle_mouse_up_msg(MouseButton::Right, lparam),
             WM_MBUTTONUP => self.handle_mouse_up_msg(MouseButton::Middle, lparam),
             WM_XBUTTONUP => {
                 let nav_dir = match wparam.hiword() {
-                    XBUTTON1 => Some(NavigationDirection::Back),
-                    XBUTTON2 => Some(NavigationDirection::Forward),
-                    _ => None,
+                    XBUTTON1 => NavigationDirection::Back,
+                    XBUTTON2 => NavigationDirection::Forward,
+                    _ => return LRESULT(1),
                 };
-
-                if let Some(nav_dir) = nav_dir {
-                    self.handle_mouse_up_msg(MouseButton::Navigate(nav_dir), lparam)
-                } else {
-                    LRESULT(1)
-                }
+                self.handle_mouse_up_msg(MouseButton::Navigate(nav_dir), lparam)
             }
             WM_MOUSEWHEEL => self.handle_mouse_wheel_msg(wparam, lparam),
             WM_MOUSEHWHEEL => self.handle_mouse_horizontal_wheel_msg(wparam, lparam),
-            WM_SYSKEYDOWN => self.handle_syskeydown_msg(msg, wparam, lparam),
-            WM_SYSKEYUP => self.handle_syskeyup_msg(msg, wparam, lparam),
+            WM_SYSKEYDOWN => self.handle_syskeydown_msg(wparam, lparam),
+            WM_SYSKEYUP => self.handle_syskeyup_msg(wparam),
             WM_KEYDOWN => self.handle_keydown_msg(msg, wparam, lparam),
             WM_KEYUP => self.handle_keyup_msg(msg, wparam),
             WM_CHAR => self.handle_char_msg(msg, wparam, lparam),
             WM_IME_STARTCOMPOSITION => self.handle_ime_position(),
-            WM_IME_COMPOSITION => self.handle_ime_composition(msg, wparam, lparam),
+            WM_IME_COMPOSITION => self.handle_ime_composition(lparam),
             WM_IME_CHAR => self.handle_ime_char(wparam),
-            _ => unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) },
+            _ => None,
+        };
+        if let Some(n) = handled {
+            LRESULT(n)
+        } else {
+            unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) }
         }
     }
 
-    fn handle_move_msg(&self, lparam: LPARAM) -> LRESULT {
+    fn handle_move_msg(&self, lparam: LPARAM) -> Option<isize> {
         let x = lparam.signed_loword() as f32;
         let y = lparam.signed_hiword() as f32;
         self.origin.set(Point {
@@ -289,10 +278,10 @@ impl WindowsWindowInner {
         if let Some(callback) = callbacks.moved.as_mut() {
             callback()
         }
-        LRESULT(0)
+        Some(0)
     }
 
-    fn handle_size_msg(&self, lparam: LPARAM) -> LRESULT {
+    fn handle_size_msg(&self, lparam: LPARAM) -> Option<isize> {
         let width = lparam.loword().max(1) as f32;
         let height = lparam.hiword().max(1) as f32;
         let scale_factor = self.scale_factor.get();
@@ -311,10 +300,10 @@ impl WindowsWindowInner {
             callback(logical_size, scale_factor);
         }
         self.invalidate_client_area();
-        LRESULT(0)
+        Some(0)
     }
 
-    fn handle_paint_msg(&self) -> LRESULT {
+    fn handle_paint_msg(&self) -> Option<isize> {
         let mut paint_struct = PAINTSTRUCT::default();
         let _hdc = unsafe { BeginPaint(self.hwnd, &mut paint_struct) };
         let mut callbacks = self.callbacks.borrow_mut();
@@ -322,21 +311,20 @@ impl WindowsWindowInner {
             request_frame();
         }
         unsafe { EndPaint(self.hwnd, &paint_struct) };
-        LRESULT(0)
+        Some(0)
     }
 
-    fn handle_close_msg(&self, msg: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
+    fn handle_close_msg(&self) -> Option<isize> {
         let mut callbacks = self.callbacks.borrow_mut();
         if let Some(callback) = callbacks.should_close.as_mut() {
             if callback() {
-                return LRESULT(0);
+                return Some(0);
             }
         }
-        drop(callbacks);
-        unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) }
+        None
     }
 
-    fn handle_destroy_msg(&self) -> LRESULT {
+    fn handle_destroy_msg(&self) -> Option<isize> {
         let mut callbacks = self.callbacks.borrow_mut();
         if let Some(callback) = callbacks.close.take() {
             callback()
@@ -357,10 +345,10 @@ impl WindowsWindowInner {
                 })
                 .detach();
         }
-        LRESULT(1)
+        Some(1)
     }
 
-    fn handle_mouse_move_msg(&self, lparam: LPARAM, wparam: WPARAM) -> LRESULT {
+    fn handle_mouse_move_msg(&self, lparam: LPARAM, wparam: WPARAM) -> Option<isize> {
         let mut callbacks = self.callbacks.borrow_mut();
         if let Some(callback) = callbacks.input.as_mut() {
             let pressed_button = match MODIFIERKEYS_FLAGS(wparam.loword() as u32) {
@@ -384,10 +372,10 @@ impl WindowsWindowInner {
                 modifiers: self.current_modifiers(),
             };
             if callback(PlatformInput::MouseMove(event)).default_prevented {
-                return LRESULT(0);
+                return Some(0);
             }
         }
-        LRESULT(1)
+        Some(1)
     }
 
     fn parse_syskeydown_msg_keystroke(&self, wparam: WPARAM) -> Option<Keystroke> {
@@ -506,14 +494,14 @@ impl WindowsWindowInner {
         }
     }
 
-    fn handle_syskeydown_msg(&self, message: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
+    fn handle_syskeydown_msg(&self, wparam: WPARAM, lparam: LPARAM) -> Option<isize> {
         // we need to call `DefWindowProcW`, or we will lose the system-wide `Alt+F4`, `Alt+{other keys}`
         // shortcuts.
         let Some(keystroke) = self.parse_syskeydown_msg_keystroke(wparam) else {
-            return unsafe { DefWindowProcW(self.hwnd, message, wparam, lparam) };
+            return None;
         };
         let Some(ref mut func) = self.callbacks.borrow_mut().input else {
-            return unsafe { DefWindowProcW(self.hwnd, message, wparam, lparam) };
+            return None;
         };
         let event = KeyDownEvent {
             keystroke,
@@ -521,34 +509,34 @@ impl WindowsWindowInner {
         };
         if func(PlatformInput::KeyDown(event)).default_prevented {
             self.invalidate_client_area();
-            return LRESULT(0);
+            return Some(0);
         }
-        unsafe { DefWindowProcW(self.hwnd, message, wparam, lparam) }
+        None
     }
 
-    fn handle_syskeyup_msg(&self, message: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
+    fn handle_syskeyup_msg(&self, wparam: WPARAM) -> Option<isize> {
         // we need to call `DefWindowProcW`, or we will lose the system-wide `Alt+F4`, `Alt+{other keys}`
         // shortcuts.
         let Some(keystroke) = self.parse_syskeydown_msg_keystroke(wparam) else {
-            return unsafe { DefWindowProcW(self.hwnd, message, wparam, lparam) };
+            return None;
         };
         let Some(ref mut func) = self.callbacks.borrow_mut().input else {
-            return unsafe { DefWindowProcW(self.hwnd, message, wparam, lparam) };
+            return None;
         };
         let event = KeyUpEvent { keystroke };
         if func(PlatformInput::KeyUp(event)).default_prevented {
             self.invalidate_client_area();
-            return LRESULT(0);
+            return Some(0);
         }
-        unsafe { DefWindowProcW(self.hwnd, message, wparam, lparam) }
+        None
     }
 
-    fn handle_keydown_msg(&self, _msg: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
+    fn handle_keydown_msg(&self, _msg: u32, wparam: WPARAM, lparam: LPARAM) -> Option<isize> {
         let Some(keystroke) = self.parse_keydown_msg_keystroke(wparam) else {
-            return LRESULT(1);
+            return Some(1);
         };
         let Some(ref mut func) = self.callbacks.borrow_mut().input else {
-            return LRESULT(1);
+            return Some(1);
         };
         let event = KeyDownEvent {
             keystroke,
@@ -556,33 +544,33 @@ impl WindowsWindowInner {
         };
         if func(PlatformInput::KeyDown(event)).default_prevented {
             self.invalidate_client_area();
-            return LRESULT(0);
+            return Some(0);
         }
-        LRESULT(1)
+        Some(1)
     }
 
-    fn handle_keyup_msg(&self, _msg: u32, wparam: WPARAM) -> LRESULT {
+    fn handle_keyup_msg(&self, _msg: u32, wparam: WPARAM) -> Option<isize> {
         let Some(keystroke) = self.parse_keydown_msg_keystroke(wparam) else {
-            return LRESULT(1);
+            return Some(1);
         };
         let Some(ref mut func) = self.callbacks.borrow_mut().input else {
-            return LRESULT(1);
+            return Some(1);
         };
         let event = KeyUpEvent { keystroke };
         if func(PlatformInput::KeyUp(event)).default_prevented {
             self.invalidate_client_area();
-            return LRESULT(0);
+            return Some(0);
         }
-        LRESULT(1)
+        Some(1)
     }
 
-    fn handle_char_msg(&self, _msg: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
+    fn handle_char_msg(&self, _msg: u32, wparam: WPARAM, lparam: LPARAM) -> Option<isize> {
         let Some(keystroke) = self.parse_char_msg_keystroke(wparam) else {
-            return LRESULT(1);
+            return Some(1);
         };
         let mut callbacks = self.callbacks.borrow_mut();
         let Some(ref mut func) = callbacks.input else {
-            return LRESULT(1);
+            return Some(1);
         };
         let ime_key = keystroke.ime_key.clone();
         let event = KeyDownEvent {
@@ -593,22 +581,22 @@ impl WindowsWindowInner {
         let dispatch_event_result = func(PlatformInput::KeyDown(event));
         if dispatch_event_result.default_prevented || !dispatch_event_result.propagate {
             self.invalidate_client_area();
-            return LRESULT(0);
+            return Some(0);
         }
         drop(callbacks);
         let Some(ime_char) = ime_key else {
-            return LRESULT(1);
+            return Some(1);
         };
         let Some(mut input_handler) = self.input_handler.take() else {
-            return LRESULT(1);
+            return Some(1);
         };
         input_handler.replace_text_in_range(None, &ime_char);
         self.input_handler.set(Some(input_handler));
         self.invalidate_client_area();
-        LRESULT(0)
+        Some(0)
     }
 
-    fn handle_mouse_down_msg(&self, button: MouseButton, lparam: LPARAM) -> LRESULT {
+    fn handle_mouse_down_msg(&self, button: MouseButton, lparam: LPARAM) -> Option<isize> {
         let mut callbacks = self.callbacks.borrow_mut();
         if let Some(callback) = callbacks.input.as_mut() {
             let x = lparam.signed_loword() as f32;
@@ -621,13 +609,13 @@ impl WindowsWindowInner {
                 click_count: 1,
             };
             if callback(PlatformInput::MouseDown(event)).default_prevented {
-                return LRESULT(0);
+                return Some(0);
             }
         }
-        LRESULT(1)
+        Some(1)
     }
 
-    fn handle_mouse_up_msg(&self, button: MouseButton, lparam: LPARAM) -> LRESULT {
+    fn handle_mouse_up_msg(&self, button: MouseButton, lparam: LPARAM) -> Option<isize> {
         let mut callbacks = self.callbacks.borrow_mut();
         if let Some(callback) = callbacks.input.as_mut() {
             let x = lparam.signed_loword() as f32;
@@ -640,13 +628,13 @@ impl WindowsWindowInner {
                 click_count: 1,
             };
             if callback(PlatformInput::MouseUp(event)).default_prevented {
-                return LRESULT(0);
+                return Some(0);
             }
         }
-        LRESULT(1)
+        Some(1)
     }
 
-    fn handle_mouse_wheel_msg(&self, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
+    fn handle_mouse_wheel_msg(&self, wparam: WPARAM, lparam: LPARAM) -> Option<isize> {
         let mut callbacks = self.callbacks.borrow_mut();
         if let Some(callback) = callbacks.input.as_mut() {
             let wheel_distance = (wparam.signed_hiword() as f32 / WHEEL_DELTA as f32)
@@ -664,12 +652,12 @@ impl WindowsWindowInner {
                 touch_phase: TouchPhase::Moved,
             };
             callback(PlatformInput::ScrollWheel(event));
-            return LRESULT(0);
+            return Some(0);
         }
-        LRESULT(1)
+        Some(1)
     }
 
-    fn handle_mouse_horizontal_wheel_msg(&self, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
+    fn handle_mouse_horizontal_wheel_msg(&self, wparam: WPARAM, lparam: LPARAM) -> Option<isize> {
         let mut callbacks = self.callbacks.borrow_mut();
         if let Some(callback) = callbacks.input.as_mut() {
             let wheel_distance = (wparam.signed_hiword() as f32 / WHEEL_DELTA as f32)
@@ -687,17 +675,17 @@ impl WindowsWindowInner {
                 touch_phase: TouchPhase::Moved,
             };
             if callback(PlatformInput::ScrollWheel(event)).default_prevented {
-                return LRESULT(0);
+                return Some(0);
             }
         }
-        LRESULT(1)
+        Some(1)
     }
 
-    fn handle_ime_position(&self) -> LRESULT {
+    fn handle_ime_position(&self) -> Option<isize> {
         unsafe {
             let ctx = ImmGetContext(self.hwnd);
             let Some(mut input_handler) = self.input_handler.take() else {
-                return LRESULT(1);
+                return Some(1);
             };
             // we are composing, this should never fail
             let caret_range = input_handler.selected_text_range().unwrap();
@@ -713,7 +701,7 @@ impl WindowsWindowInner {
             };
             ImmSetCandidateWindow(ctx, &config as _);
             ImmReleaseContext(self.hwnd, ctx);
-            LRESULT(0)
+            Some(0)
         }
     }
 
@@ -744,13 +732,13 @@ impl WindowsWindowInner {
         }
     }
 
-    fn handle_ime_composition(&self, msg: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
+    fn handle_ime_composition(&self, lparam: LPARAM) -> Option<isize> {
         if lparam.0 as u32 & GCS_COMPSTR.0 > 0 {
             let Some((string, string_len)) = self.parse_ime_compostion_string() else {
-                return unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) };
+                return None;
             };
             let Some(mut input_handler) = self.input_handler.take() else {
-                return unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) };
+                return None;
             };
             input_handler.replace_and_mark_text_in_range(
                 None,
@@ -758,10 +746,10 @@ impl WindowsWindowInner {
                 Some(0..string_len),
             );
             self.input_handler.set(Some(input_handler));
-            unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) }
+            None
         } else {
             // currently, we don't care other stuff
-            unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) }
+            None
         }
     }
 
@@ -773,17 +761,17 @@ impl WindowsWindowInner {
         Some(first_char.to_string())
     }
 
-    fn handle_ime_char(&self, wparam: WPARAM) -> LRESULT {
+    fn handle_ime_char(&self, wparam: WPARAM) -> Option<isize> {
         let Some(ime_char) = self.parse_ime_char(wparam) else {
-            return LRESULT(1);
+            return Some(1);
         };
         let Some(mut input_handler) = self.input_handler.take() else {
-            return LRESULT(1);
+            return Some(1);
         };
         input_handler.replace_text_in_range(None, &ime_char);
         self.input_handler.set(Some(input_handler));
         self.invalidate_client_area();
-        LRESULT(0)
+        Some(0)
     }
 
     fn handle_drag_drop(&self, input: PlatformInput) {
@@ -795,13 +783,13 @@ impl WindowsWindowInner {
     }
 
     /// SEE: https://learn.microsoft.com/en-us/windows/win32/winmsg/wm-nccalcsize
-    fn handle_calc_client_size(&self, msg: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
+    fn handle_calc_client_size(&self, wparam: WPARAM, lparam: LPARAM) -> Option<isize> {
         if !self.hide_title_bar {
-            return unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) };
+            return None;
         }
 
         if wparam.0 == 0 {
-            return unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) };
+            return None;
         }
 
         let dpi = unsafe { GetDpiForWindow(self.hwnd) };
@@ -818,19 +806,19 @@ impl WindowsWindowInner {
         requested_client_rect[0].left += frame_x + padding;
         requested_client_rect[0].bottom -= frame_y + padding;
 
-        LRESULT(0)
+        Some(0)
     }
 
-    fn handle_activate_msg(&self, msg: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
+    fn handle_activate_msg(&self) -> Option<isize> {
         if self.hide_title_bar {
             if let Some(titlebar_rect) = self.get_titlebar_rect().log_err() {
                 unsafe { InvalidateRect(self.hwnd, Some(&titlebar_rect), FALSE) };
             }
         }
-        return unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) };
+        None
     }
 
-    fn handle_create_msg(&self, _lparam: LPARAM) -> LRESULT {
+    fn handle_create_msg(&self, _lparam: LPARAM) -> Option<isize> {
         let mut size_rect = RECT::default();
         unsafe { GetWindowRect(self.hwnd, &mut size_rect).log_err() };
 
@@ -859,10 +847,10 @@ impl WindowsWindowInner {
             };
         }
 
-        LRESULT(0)
+        Some(0)
     }
 
-    fn handle_dpi_changed_msg(&self, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
+    fn handle_dpi_changed_msg(&self, wparam: WPARAM, lparam: LPARAM) -> Option<isize> {
         let new_dpi = wparam.loword() as f32;
         let scale_factor = new_dpi / USER_DEFAULT_SCREEN_DPI as f32;
         self.scale_factor.set(scale_factor);
@@ -886,12 +874,12 @@ impl WindowsWindowInner {
             .log_err();
         }
         self.invalidate_client_area();
-        LRESULT(0)
+        Some(0)
     }
 
-    fn handle_hit_test_msg(&self, msg: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
+    fn handle_hit_test_msg(&self, msg: u32, wparam: WPARAM, lparam: LPARAM) -> Option<isize> {
         if !self.hide_title_bar {
-            return unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) };
+            return None;
         }
 
         // default handler for resize areas
@@ -908,7 +896,7 @@ impl WindowsWindowInner {
                 | HTBOTTOM
                 | HTBOTTOMLEFT
         ) {
-            return hit;
+            return Some(hit.0);
         }
 
         let dpi = unsafe { GetDpiForWindow(self.hwnd) };
@@ -921,7 +909,7 @@ impl WindowsWindowInner {
         };
         unsafe { ScreenToClient(self.hwnd, &mut cursor_point) };
         if cursor_point.y > 0 && cursor_point.y < frame_y + padding {
-            return LRESULT(HTTOP as _);
+            return Some(HTTOP as _);
         }
 
         let titlebar_rect = self.get_titlebar_rect();
@@ -930,23 +918,23 @@ impl WindowsWindowInner {
                 let caption_btn_width =
                     (self.caption_button_width().0 * self.scale_factor.get()) as i32;
                 if cursor_point.x >= titlebar_rect.right - caption_btn_width {
-                    return LRESULT(HTCLOSE as _);
+                    return Some(HTCLOSE as _);
                 } else if cursor_point.x >= titlebar_rect.right - caption_btn_width * 2 {
-                    return LRESULT(HTMAXBUTTON as _);
+                    return Some(HTMAXBUTTON as _);
                 } else if cursor_point.x >= titlebar_rect.right - caption_btn_width * 3 {
-                    return LRESULT(HTMINBUTTON as _);
+                    return Some(HTMINBUTTON as _);
                 }
 
-                return LRESULT(HTCAPTION as _);
+                return Some(HTCAPTION as _);
             }
         }
 
-        LRESULT(HTCLIENT as _)
+        Some(HTCLIENT as _)
     }
 
-    fn handle_nc_mouse_move_msg(&self, msg: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT {
+    fn handle_nc_mouse_move_msg(&self, lparam: LPARAM) -> Option<isize> {
         if !self.hide_title_bar {
-            return unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) };
+            return None;
         }
 
         let mut callbacks = self.callbacks.borrow_mut();
@@ -963,22 +951,20 @@ impl WindowsWindowInner {
                 modifiers: self.current_modifiers(),
             };
             if callback(PlatformInput::MouseMove(event)).default_prevented {
-                return LRESULT(0);
+                return Some(0);
             }
         }
-        drop(callbacks);
-        unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) }
+        None
     }
 
     fn handle_nc_mouse_down_msg(
         &self,
         button: MouseButton,
-        msg: u32,
         wparam: WPARAM,
         lparam: LPARAM,
-    ) -> LRESULT {
+    ) -> Option<isize> {
         if !self.hide_title_bar {
-            return unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) };
+            return None;
         }
 
         let mut callbacks = self.callbacks.borrow_mut();
@@ -996,27 +982,22 @@ impl WindowsWindowInner {
                 click_count: 1,
             };
             if callback(PlatformInput::MouseDown(event)).default_prevented {
-                return LRESULT(0);
+                return Some(0);
             }
         }
-        drop(callbacks);
 
-        match wparam.0 as u32 {
-            // Since these are handled in handle_nc_mouse_up_msg we must prevent the default window proc
-            HTMINBUTTON | HTMAXBUTTON | HTCLOSE => LRESULT(0),
-            _ => unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) },
-        }
+        // Since these are handled in handle_nc_mouse_up_msg we must prevent the default window proc
+        matches!(wparam.0 as u32, HTMINBUTTON | HTMAXBUTTON | HTCLOSE).then_some(0)
     }
 
     fn handle_nc_mouse_up_msg(
         &self,
         button: MouseButton,
-        msg: u32,
         wparam: WPARAM,
         lparam: LPARAM,
-    ) -> LRESULT {
+    ) -> Option<isize> {
         if !self.hide_title_bar {
-            return unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) };
+            return None;
         }
 
         let mut callbacks = self.callbacks.borrow_mut();
@@ -1034,7 +1015,7 @@ impl WindowsWindowInner {
                 click_count: 1,
             };
             if callback(PlatformInput::MouseUp(event)).default_prevented {
-                return LRESULT(0);
+                return Some(0);
             }
         }
         drop(callbacks);
@@ -1043,7 +1024,6 @@ impl WindowsWindowInner {
             match wparam.0 as u32 {
                 HTMINBUTTON => unsafe {
                     ShowWindowAsync(self.hwnd, SW_MINIMIZE);
-                    return LRESULT(0);
                 },
                 HTMAXBUTTON => unsafe {
                     if self.is_maximized() {
@@ -1051,21 +1031,20 @@ impl WindowsWindowInner {
                     } else {
                         ShowWindowAsync(self.hwnd, SW_MAXIMIZE);
                     }
-                    return LRESULT(0);
                 },
                 HTCLOSE => unsafe {
                     PostMessageW(self.hwnd, WM_CLOSE, WPARAM::default(), LPARAM::default())
                         .log_err();
-                    return LRESULT(0);
                 },
-                _ => {}
+                _ => return None,
             };
+            return Some(0);
         }
 
-        unsafe { DefWindowProcW(self.hwnd, msg, wparam, lparam) }
+        None
     }
 
-    fn handle_set_focus_msg(&self, _msg: u32, wparam: WPARAM, _lparam: LPARAM) -> LRESULT {
+    fn handle_set_focus_msg(&self, _msg: u32, wparam: WPARAM, _lparam: LPARAM) -> Option<isize> {
         // wparam is the window that just lost focus (may be null)
         // SEE: https://learn.microsoft.com/en-us/windows/win32/inputdev/wm-setfocus
         let lost_focus_hwnd = HWND(wparam.0 as isize);
@@ -1084,7 +1063,7 @@ impl WindowsWindowInner {
             cb(true);
         }
 
-        LRESULT(0)
+        Some(0)
     }
 }
 
@@ -1633,7 +1612,7 @@ unsafe extern "system" fn wnd_proc(
     };
     if msg == WM_NCDESTROY {
         unsafe { set_window_long(hwnd, GWLP_USERDATA, 0) };
-        unsafe { std::mem::drop(Box::from_raw(ptr)) };
+        unsafe { drop(Box::from_raw(ptr)) };
     }
     r
 }