diff --git a/crates/eframe/src/native/glow_integration.rs b/crates/eframe/src/native/glow_integration.rs index 1cd49449f..d72bdf26f 100644 --- a/crates/eframe/src/native/glow_integration.rs +++ b/crates/eframe/src/native/glow_integration.rs @@ -423,13 +423,32 @@ impl WinitApp for GlowWinitApp<'_> { // First resume event. Create our root window etc. self.init_run_state(event_loop)? }; + + { + let mut glutin = running.glutin.borrow_mut(); + if let Some(viewport) = glutin.viewports.get_mut(&ViewportId::ROOT) { + if let Some(egui_winit) = viewport.egui_winit.as_mut() { + egui_winit.egui_input_mut().events.push(egui::Event::Resumed); + } + } + } + let window_id = running.glutin.borrow().window_from_viewport[&ViewportId::ROOT]; Ok(EventResult::RepaintNow(window_id)) } fn suspended(&mut self, _: &ActiveEventLoop) -> crate::Result { if let Some(running) = &mut self.running { - running.glutin.borrow_mut().on_suspend()?; + let mut glutin = running.glutin.borrow_mut(); + if let Some(viewport) = glutin.viewports.get_mut(&ViewportId::ROOT) { + if let Some(egui_winit) = viewport.egui_winit.as_mut() { + egui_winit + .egui_input_mut() + .events + .push(egui::Event::Suspended); + } + } + glutin.on_suspend()?; } Ok(EventResult::Save) } diff --git a/crates/eframe/src/native/wgpu_integration.rs b/crates/eframe/src/native/wgpu_integration.rs index cb634200a..b4eef08b5 100644 --- a/crates/eframe/src/native/wgpu_integration.rs +++ b/crates/eframe/src/native/wgpu_integration.rs @@ -427,6 +427,15 @@ impl WinitApp for WgpuWinitApp<'_> { self.init_run_state(egui_ctx, event_loop, storage, window, builder)? }; + { + let mut shared = running.shared.borrow_mut(); + if let Some(viewport) = shared.viewports.get_mut(&ViewportId::ROOT) { + if let Some(egui_winit) = viewport.egui_winit.as_mut() { + egui_winit.egui_input_mut().events.push(egui::Event::Resumed); + } + } + } + let viewport = &running.shared.borrow().viewports[&ViewportId::ROOT]; if let Some(window) = &viewport.window { Ok(EventResult::RepaintNow(window.id())) @@ -436,6 +445,17 @@ impl WinitApp for WgpuWinitApp<'_> { } fn suspended(&mut self, _: &ActiveEventLoop) -> crate::Result { + if let Some(running) = &self.running { + let mut shared = running.shared.borrow_mut(); + if let Some(viewport) = shared.viewports.get_mut(&ViewportId::ROOT) { + if let Some(egui_winit) = viewport.egui_winit.as_mut() { + egui_winit + .egui_input_mut() + .events + .push(egui::Event::Suspended); + } + } + } #[cfg(target_os = "android")] self.drop_window()?; Ok(EventResult::Save) diff --git a/crates/egui/src/data/input.rs b/crates/egui/src/data/input.rs index 787867569..02e9bc6b7 100644 --- a/crates/egui/src/data/input.rs +++ b/crates/egui/src/data/input.rs @@ -547,6 +547,16 @@ pub enum Event { /// The native window gained or lost focused (e.g. the user clicked alt-tab). WindowFocused(bool), + /// The application was suspended. + /// + /// On iOS/Android, this is sent when the app is moved to the background. + Suspended, + + /// The application was resumed. + /// + /// On iOS/Android, this is sent when the app is brought back to the foreground. + Resumed, + /// An assistive technology (e.g. screen reader) requested an action. AccessKitActionRequest(accesskit::ActionRequest),