macOS: Fix move event sometimes being triggered on resize (#3914)

This commit is contained in:
Mads Marquart 2024-09-24 01:06:10 +02:00 committed by GitHub
parent a18658284c
commit 380eea0072
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 7 additions and 7 deletions

View file

@ -154,5 +154,6 @@ changelog entry.
### Fixed ### Fixed
- On Orbital, `MonitorHandle::name()` now returns `None` instead of a dummy name. - 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. default activation policy, unless explicitly provided during initialization.

View file

@ -88,8 +88,8 @@ pub(crate) struct State {
// During `windowDidResize`, we use this to only send Moved if the position changed. // During `windowDidResize`, we use this to only send Moved if the position changed.
// //
// This is expressed in native screen coordinates. // This is expressed in desktop coordinates, and flipped to match Winit's coordinate system.
previous_position: Cell<Option<NSPoint>>, previous_position: Cell<NSPoint>,
// Used to prevent redundant events. // Used to prevent redundant events.
previous_scale_factor: Cell<f64>, previous_scale_factor: Cell<f64>,
@ -722,7 +722,7 @@ impl WindowDelegate {
let delegate = mtm.alloc().set_ivars(State { let delegate = mtm.alloc().set_ivars(State {
app_state: Rc::clone(app_state), app_state: Rc::clone(app_state),
window: window.retain(), window: window.retain(),
previous_position: Cell::new(None), previous_position: Cell::new(flip_window_screen_coordinates(window.frame())),
previous_scale_factor: Cell::new(scale_factor), previous_scale_factor: Cell::new(scale_factor),
surface_resize_increments: Cell::new(surface_resize_increments), surface_resize_increments: Cell::new(surface_resize_increments),
decorations: Cell::new(attrs.decorations), decorations: Cell::new(attrs.decorations),
@ -849,13 +849,12 @@ impl WindowDelegate {
} }
fn emit_move_event(&self) { fn emit_move_event(&self) {
let frame = self.window().frame(); let position = flip_window_screen_coordinates(self.window().frame());
if self.ivars().previous_position.get() == Some(frame.origin) { if self.ivars().previous_position.get() == position {
return; return;
} }
self.ivars().previous_position.set(Some(frame.origin)); self.ivars().previous_position.set(position);
let position = flip_window_screen_coordinates(frame);
let position = let position =
LogicalPosition::new(position.x, position.y).to_physical(self.scale_factor()); LogicalPosition::new(position.x, position.y).to_physical(self.scale_factor());
self.queue_event(WindowEvent::Moved(position)); self.queue_event(WindowEvent::Moved(position));