macOS: resample deferred macOS surface resize events

This commit is contained in:
Vitaly Kravchenko
2026-09-02 13:13:45 +01:00
committed by GitHub
parent 9107acecbf
commit aa6410de30
3 changed files with 7 additions and 4 deletions

View File

@@ -6,7 +6,7 @@ use std::rc::Rc;
use dpi::{LogicalPosition, PhysicalSize}; use dpi::{LogicalPosition, PhysicalSize};
use objc2::rc::Retained; use objc2::rc::Retained;
use objc2::runtime::{AnyObject, Sel}; use objc2::runtime::{AnyObject, Sel};
use objc2::{AnyThread, DefinedClass, MainThreadMarker, define_class, msg_send}; use objc2::{AnyThread, DefinedClass, MainThreadMarker, Message, define_class, msg_send};
use objc2_app_kit::{ use objc2_app_kit::{
NSApplication, NSCursor, NSDragOperation, NSDraggingSession, NSEvent, NSEventPhase, NSApplication, NSCursor, NSDragOperation, NSDraggingSession, NSEvent, NSEventPhase,
NSResponder, NSTextInputClient, NSTrackingArea, NSTrackingAreaOptions, NSView, NSResponder, NSTextInputClient, NSTrackingArea, NSTrackingAreaOptions, NSView,
@@ -904,13 +904,14 @@ impl WinitView {
}); });
} }
fn surface_resized(&self) { pub(super) fn surface_resized(&self) {
let Some(window) = (**self).window() else { let Some(window) = (**self).window() else {
return; return;
}; };
let size = self.surface_size();
let window_id = window_id(&window); let window_id = window_id(&window);
let view = self.retain();
self.ivars().app_state.maybe_queue_with_handler(move |app, event_loop| { self.ivars().app_state.maybe_queue_with_handler(move |app, event_loop| {
let size = view.surface_size();
app.window_event(event_loop, window_id, WindowEvent::SurfaceResized(size)); app.window_event(event_loop, window_id, WindowEvent::SurfaceResized(size));
}); });
} }

View File

@@ -1119,7 +1119,7 @@ impl WindowDelegate {
let size = NSSize::new(logical_size.width, logical_size.height); let size = NSSize::new(logical_size.width, logical_size.height);
window.setContentSize(size); window.setContentSize(size);
} }
self.queue_event(WindowEvent::SurfaceResized(physical_size)); self.view().surface_resized();
} }
fn emit_move_event(&self) { fn emit_move_event(&self) {

View File

@@ -122,6 +122,8 @@ changelog entry.
- On macOS, fix borderless game presentation options not sticking after switching spaces. - On macOS, fix borderless game presentation options not sticking after switching spaces.
- On macOS, fix IME being locked on (regardless of requests to disable) after being enabled once. - On macOS, fix IME being locked on (regardless of requests to disable) after being enabled once.
- On macOS, fix a panic and incorrect cursor position in Ime::Preedit when the preedit string contains special characters (ie. emojis) caused by incorrect UTF-16 to UTF-8 offset conversion. - On macOS, fix a panic and incorrect cursor position in Ime::Preedit when the preedit string contains special characters (ie. emojis) caused by incorrect UTF-16 to UTF-8 offset conversion.
- On macOS, prevent an older deferred surface resize from overriding newer sizes after AppKit
transitions.
- On Wayland, fix a protocol error when setting a custom cursor on compositors with `wl_surface` version below 3. - On Wayland, fix a protocol error when setting a custom cursor on compositors with `wl_surface` version below 3.
- On Redox, fix `run_app_on_demand` exiting immediately after a previous `run_app_on_demand` called `exit`. - On Redox, fix `run_app_on_demand` exiting immediately after a previous `run_app_on_demand` called `exit`.
- On Redox, fill in logical key for keyboard events rather than emitting a separate fake IME event. - On Redox, fill in logical key for keyboard events rather than emitting a separate fake IME event.