diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fc5f425..166c8336 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ Unreleased` header. - on Windows: add `with_system_backdrop`, `with_border_color`, `with_title_background_color`, `with_title_text_color` and `with_corner_preference` - On Windows, Remove `WS_CAPTION`, `WS_BORDER` and `WS_EX_WINDOWEDGE` styles for child windows without decorations. - On Windows, fixed a race condition when sending an event through the loop proxy. +- **Breaking:** Removed `EventLoopError::AlreadyRunning`, which can't happen as it is already prevented by the type system. # 0.29.10 diff --git a/src/error.rs b/src/error.rs index 92468620..bb8dc42d 100644 --- a/src/error.rs +++ b/src/error.rs @@ -35,8 +35,6 @@ pub enum EventLoopError { NotSupported(NotSupportedError), /// The OS cannot perform the operation. Os(OsError), - /// The event loop can't be re-run while it's already running - AlreadyRunning, /// The event loop can't be re-created. RecreationAttempt, /// Application has exit with an error status. @@ -105,7 +103,6 @@ impl fmt::Display for NotSupportedError { impl fmt::Display for EventLoopError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> { match self { - EventLoopError::AlreadyRunning => write!(f, "EventLoop is already running"), EventLoopError::RecreationAttempt => write!(f, "EventLoop can't be recreated"), EventLoopError::NotSupported(e) => e.fmt(f), EventLoopError::Os(e) => e.fmt(f), diff --git a/src/platform/run_on_demand.rs b/src/platform/run_on_demand.rs index 603efab1..ea287ca5 100644 --- a/src/platform/run_on_demand.rs +++ b/src/platform/run_on_demand.rs @@ -55,7 +55,7 @@ pub trait EventLoopExtRunOnDemand { /// loop that would block the browser and there is nothing that can be /// polled to ask for new events. Events are delivered via callbacks based /// on an event loop that is internal to the browser itself. - /// - **iOS:** It's not possible to stop and start an `NSApplication` repeatedly on iOS. + /// - **iOS:** It's not possible to stop and start an `UIApplication` repeatedly on iOS. /// #[cfg_attr( not(web_platform), @@ -87,3 +87,16 @@ impl EventLoopWindowTarget { self.p.clear_exit() } } + +/// ```compile_fail +/// use winit::event_loop::EventLoop; +/// use winit::platform::run_on_demand::EventLoopExtRunOnDemand; +/// +/// let mut event_loop = EventLoop::new().unwrap(); +/// event_loop.run_on_demand(|_, _| { +/// // Attempt to run the event loop re-entrantly; this must fail. +/// event_loop.run_on_demand(|_, _| {}); +/// }); +/// ``` +#[allow(dead_code)] +fn test_run_on_demand_cannot_access_event_loop() {} diff --git a/src/platform_impl/android/mod.rs b/src/platform_impl/android/mod.rs index 642d9a4c..ad564385 100644 --- a/src/platform_impl/android/mod.rs +++ b/src/platform_impl/android/mod.rs @@ -491,10 +491,6 @@ impl EventLoop { where F: FnMut(event::Event, &event_loop::EventLoopWindowTarget), { - if self.loop_running { - return Err(EventLoopError::AlreadyRunning); - } - loop { match self.pump_events(None, &mut event_handler) { PumpStatus::Exit(0) => { diff --git a/src/platform_impl/linux/wayland/event_loop/mod.rs b/src/platform_impl/linux/wayland/event_loop/mod.rs index f881cba3..bbf61a26 100644 --- a/src/platform_impl/linux/wayland/event_loop/mod.rs +++ b/src/platform_impl/linux/wayland/event_loop/mod.rs @@ -192,10 +192,6 @@ impl EventLoop { where F: FnMut(Event, &RootEventLoopWindowTarget), { - if self.loop_running { - return Err(EventLoopError::AlreadyRunning); - } - let exit = loop { match self.pump_events(None, &mut event_handler) { PumpStatus::Exit(0) => { diff --git a/src/platform_impl/linux/x11/mod.rs b/src/platform_impl/linux/x11/mod.rs index 32b5cd62..285fad6b 100644 --- a/src/platform_impl/linux/x11/mod.rs +++ b/src/platform_impl/linux/x11/mod.rs @@ -402,10 +402,6 @@ impl EventLoop { where F: FnMut(Event, &RootELW), { - if self.loop_running { - return Err(EventLoopError::AlreadyRunning); - } - let exit = loop { match self.pump_events(None, &mut event_handler) { PumpStatus::Exit(0) => { diff --git a/src/platform_impl/macos/event_loop.rs b/src/platform_impl/macos/event_loop.rs index 0af4abe2..32cc1990 100644 --- a/src/platform_impl/macos/event_loop.rs +++ b/src/platform_impl/macos/event_loop.rs @@ -279,10 +279,6 @@ impl EventLoop { where F: FnMut(Event, &RootWindowTarget), { - if self.delegate.is_running() { - return Err(EventLoopError::AlreadyRunning); - } - let callback = map_user_event(callback, self.receiver.clone()); // # Safety diff --git a/src/platform_impl/windows/event_loop.rs b/src/platform_impl/windows/event_loop.rs index 2e78eef1..21ca4c03 100644 --- a/src/platform_impl/windows/event_loop.rs +++ b/src/platform_impl/windows/event_loop.rs @@ -94,8 +94,6 @@ use crate::{ }; use runner::{EventLoopRunner, EventLoopRunnerShared}; -use self::runner::RunnerState; - use super::{window::set_skip_taskbar, SelectedCursor}; /// some backends like macos uses an uninhabited `Never` type, @@ -246,9 +244,6 @@ impl EventLoop { { { let runner = &self.window_target.p.runner_shared; - if runner.state() != RunnerState::Uninitialized { - return Err(EventLoopError::AlreadyRunning); - } let event_loop_windows_ref = &self.window_target; let user_event_receiver = &self.user_event_receiver; diff --git a/src/platform_impl/windows/event_loop/runner.rs b/src/platform_impl/windows/event_loop/runner.rs index 4254c41c..dcf99540 100644 --- a/src/platform_impl/windows/event_loop/runner.rs +++ b/src/platform_impl/windows/event_loop/runner.rs @@ -143,10 +143,6 @@ impl EventLoopRunner { } } - pub fn state(&self) -> RunnerState { - self.runner_state.get() - } - pub fn set_control_flow(&self, control_flow: ControlFlow) { self.control_flow.set(control_flow) }