diff --git a/src/changelog/unreleased.md b/src/changelog/unreleased.md index 4c8616e1..0227a770 100644 --- a/src/changelog/unreleased.md +++ b/src/changelog/unreleased.md @@ -161,6 +161,8 @@ changelog entry. - In the same spirit rename `DeviceEvent::MouseMotion` to `PointerMotion`. - Remove `Force::Calibrated::altitude_angle`. - On X11, use bottom-right corner for IME hotspot in `Window::set_ime_cursor_area`. +- On macOS and iOS, no longer emit `ScaleFactorChanged` upon window creation. +- On macOS, no longer emit `Focused` upon window creation. ### Removed diff --git a/src/event.rs b/src/event.rs index 94ed8a25..5a89923e 100644 --- a/src/event.rs +++ b/src/event.rs @@ -153,6 +153,9 @@ pub enum WindowEvent { /// Contains the new dimensions of the surface (can also be retrieved with /// [`Window::surface_size`]). /// + /// This event will not necessarily be emitted upon window creation, query + /// [`Window::surface_size`] if you need to determine the surface's initial size. + /// /// [`Window::surface_size`]: crate::window::Window::surface_size SurfaceResized(PhysicalSize), @@ -193,6 +196,9 @@ pub enum WindowEvent { /// The window gained or lost focus. /// /// The parameter is true if the window has gained focus, and false if it has lost focus. + /// + /// Windows are unfocused upon creation, but will usually be focused by the system soon + /// afterwards. Focused(bool), /// An event from the keyboard has been received. @@ -420,7 +426,12 @@ pub enum WindowEvent { /// To update the window size, use the provided [`SurfaceSizeWriter`] handle. By default, the /// window is resized to the value suggested by the OS, but it can be changed to any value. /// + /// This event will not necessarily be emitted upon window creation, query + /// [`Window::scale_factor`] if you need to determine the window's initial scale factor. + /// /// For more information about DPI in general, see the [`dpi`] crate. + /// + /// [`Window::scale_factor`]: crate::window::Window::scale_factor ScaleFactorChanged { scale_factor: f64, /// Handle to update surface size during scale changes. diff --git a/src/platform_impl/apple/appkit/window_delegate.rs b/src/platform_impl/apple/appkit/window_delegate.rs index 62707277..711535aa 100644 --- a/src/platform_impl/apple/appkit/window_delegate.rs +++ b/src/platform_impl/apple/appkit/window_delegate.rs @@ -765,12 +765,6 @@ impl WindowDelegate { }); let delegate: Retained = unsafe { msg_send_id![super(delegate), init] }; - if scale_factor != 1.0 { - let delegate = delegate.clone(); - RunLoop::main(mtm).queue_closure(move || { - delegate.handle_scale_factor_changed(scale_factor); - }); - } window.setDelegate(Some(ProtocolObject::from_ref(&*delegate))); // Listen for theme change event. @@ -801,10 +795,6 @@ impl WindowDelegate { delegate.set_cursor(attrs.cursor); - // XXX Send `Focused(false)` right after creating the window delegate, so we won't - // obscure the real focused events on the startup. - delegate.queue_event(WindowEvent::Focused(false)); - // Set fullscreen mode after we setup everything delegate.set_fullscreen(attrs.fullscreen.map(Into::into)); diff --git a/src/platform_impl/apple/uikit/window.rs b/src/platform_impl/apple/uikit/window.rs index e992e807..1764e00b 100644 --- a/src/platform_impl/apple/uikit/window.rs +++ b/src/platform_impl/apple/uikit/window.rs @@ -517,30 +517,6 @@ impl Window { let window = WinitUIWindow::new(mtm, &window_attributes, frame, &view_controller); window.makeKeyAndVisible(); - // Like the Windows and macOS backends, we send a `ScaleFactorChanged` and `SurfaceResized` - // event on window creation if the DPI factor != 1.0 - let scale_factor = view.contentScaleFactor(); - let scale_factor = scale_factor as f64; - if scale_factor != 1.0 { - let frame = view.frame(); - let size = - LogicalSize { width: frame.size.width as f64, height: frame.size.height as f64 }; - app_state::handle_nonuser_events( - mtm, - std::iter::once(EventWrapper::ScaleFactorChanged(app_state::ScaleFactorChanged { - window: window.clone(), - scale_factor, - suggested_size: size.to_physical(scale_factor), - })) - .chain(std::iter::once(EventWrapper::StaticEvent( - Event::WindowEvent { - window_id: window.id(), - event: WindowEvent::SurfaceResized(size.to_physical(scale_factor)), - }, - ))), - ); - } - let inner = Inner { window, view_controller, view, gl_or_metal_backed }; Ok(Window { inner: MainThreadBound::new(inner, mtm) }) }