From 85052c09bb4c0bef0f0f2df063e11347d1fd0e77 Mon Sep 17 00:00:00 2001 From: Nick Date: Wed, 24 Jan 2024 15:38:20 -0500 Subject: [PATCH] Send the event before waking up the message pump. (#3418) --- CHANGELOG.md | 1 + src/platform_impl/windows/event_loop.rs | 15 +++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f11729d9..2e40dfe27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ Unreleased` header. # Unreleased - On macOS, fix incorrect IME cursor rect origin. +- On Windows, fixed a race condition when sending an event through the loop proxy. # 0.29.10 diff --git a/src/platform_impl/windows/event_loop.rs b/src/platform_impl/windows/event_loop.rs index f8696a3a7..98ac44866 100644 --- a/src/platform_impl/windows/event_loop.rs +++ b/src/platform_impl/windows/event_loop.rs @@ -696,14 +696,13 @@ impl Clone for EventLoopProxy { impl EventLoopProxy { pub fn send_event(&self, event: T) -> Result<(), EventLoopClosed> { - unsafe { - if PostMessageW(self.target_window, USER_EVENT_MSG_ID.get(), 0, 0) != false.into() { - self.event_send.send(event).ok(); - Ok(()) - } else { - Err(EventLoopClosed(event)) - } - } + self.event_send + .send(event) + .map(|result| { + unsafe { PostMessageW(self.target_window, USER_EVENT_MSG_ID.get(), 0, 0) }; + result + }) + .map_err(|e| EventLoopClosed(e.0)) } }