From a5f5ce6a3ddd1b27b23ab32a77a0cb917b8feeb5 Mon Sep 17 00:00:00 2001 From: Shane Celis Date: Tue, 22 Oct 2024 07:00:53 -0400 Subject: [PATCH] macOS: fix panic during drag_window Return error from it instead of unwrapping. --- src/changelog/unreleased.md | 3 ++- src/platform_impl/apple/appkit/window.rs | 3 +-- src/platform_impl/apple/appkit/window_delegate.rs | 6 ++++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/changelog/unreleased.md b/src/changelog/unreleased.md index 31b64d1a..8a22aed4 100644 --- a/src/changelog/unreleased.md +++ b/src/changelog/unreleased.md @@ -186,6 +186,7 @@ changelog entry. - On Orbital, `MonitorHandle::name()` now returns `None` instead of a dummy name. - On macOS, fix `WindowEvent::Moved` sometimes being triggered unnecessarily on resize. -- On MacOS, package manifest definitions of `LSUIElement` will no longer be overridden with the +- On macOS, package manifest definitions of `LSUIElement` will no longer be overridden with the default activation policy, unless explicitly provided during initialization. +- On macOS, fix crash when calling `drag_window()` without a left click present. - On X11, key events forward to IME anyway, even when it's disabled. diff --git a/src/platform_impl/apple/appkit/window.rs b/src/platform_impl/apple/appkit/window.rs index 9373042a..be59dbed 100644 --- a/src/platform_impl/apple/appkit/window.rs +++ b/src/platform_impl/apple/appkit/window.rs @@ -284,8 +284,7 @@ impl CoreWindow for Window { } fn drag_window(&self) -> Result<(), RequestError> { - self.maybe_wait_on_main(|delegate| delegate.drag_window()); - Ok(()) + self.maybe_wait_on_main(|delegate| delegate.drag_window()) } fn drag_resize_window( diff --git a/src/platform_impl/apple/appkit/window_delegate.rs b/src/platform_impl/apple/appkit/window_delegate.rs index 10aac698..e5652ba2 100644 --- a/src/platform_impl/apple/appkit/window_delegate.rs +++ b/src/platform_impl/apple/appkit/window_delegate.rs @@ -1171,10 +1171,12 @@ impl WindowDelegate { } #[inline] - pub fn drag_window(&self) { + pub fn drag_window(&self) -> Result<(), RequestError> { let mtm = MainThreadMarker::from(self); - let event = NSApplication::sharedApplication(mtm).currentEvent().unwrap(); + let event = + NSApplication::sharedApplication(mtm).currentEvent().ok_or(RequestError::Ignored)?; self.window().performWindowDragWithEvent(&event); + Ok(()) } #[inline]