[MacOS] Fix deadlock on maximizing window from event callback (#2636)

This commit is contained in:
Andreas Reich 2023-01-21 17:29:29 +01:00 committed by GitHub
parent b711a11549
commit a867032e1e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 1 deletions

View file

@ -169,6 +169,7 @@ And please only add new entries to the top of this list, right below the `# Unre
- On Android, upgrade `ndk` and `ndk-glue` dependencies to the recently released `0.7.0`. - On Android, upgrade `ndk` and `ndk-glue` dependencies to the recently released `0.7.0`.
- All platforms can now be relied on to emit a `Resumed` event. Applications are recommended to lazily initialize graphics state and windows on first resume for portability. - All platforms can now be relied on to emit a `Resumed` event. Applications are recommended to lazily initialize graphics state and windows on first resume for portability.
- **Breaking:**: Reverse horizontal scrolling sign in `MouseScrollDelta` to match the direction of vertical scrolling. A positive X value now means moving the content to the right. The meaning of vertical scrolling stays the same: a positive Y value means moving the content down. - **Breaking:**: Reverse horizontal scrolling sign in `MouseScrollDelta` to match the direction of vertical scrolling. A positive X value now means moving the content to the right. The meaning of vertical scrolling stays the same: a positive Y value means moving the content down.
- On MacOS, fix deadlock when calling `set_maximized` from event loop.
# 0.26.1 (2022-01-05) # 0.26.1 (2022-01-05)

View file

@ -352,7 +352,13 @@ impl AppState {
} }
pub fn handle_redraw(window_id: WindowId) { pub fn handle_redraw(window_id: WindowId) {
HANDLER.handle_nonuser_event(EventWrapper::StaticEvent(Event::RedrawRequested(window_id))); // Redraw request might come out of order from the OS.
// -> Don't go back into the callback when our callstack originates from there
if !HANDLER.in_callback.swap(true, Ordering::AcqRel) {
HANDLER
.handle_nonuser_event(EventWrapper::StaticEvent(Event::RedrawRequested(window_id)));
HANDLER.set_in_callback(false);
}
} }
pub fn queue_event(wrapper: EventWrapper) { pub fn queue_event(wrapper: EventWrapper) {