From 84b06ab6d1e8b7931779e2ce3e12411d9b1e2b06 Mon Sep 17 00:00:00 2001 From: "Paulo E. Castro" Date: Thu, 11 Mar 2021 00:22:52 +0000 Subject: [PATCH] Work around absense of winit::event_loop in headless case. --- ports/winit/app.rs | 2 +- ports/winit/events_loop.rs | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ports/winit/app.rs b/ports/winit/app.rs index b426662d8aa..72d844efd0a 100644 --- a/ports/winit/app.rs +++ b/ports/winit/app.rs @@ -69,7 +69,7 @@ impl App { if let winit::event::Event::NewEvents(winit::event::StartCause::Init) = e { let surfman = window.webrender_surfman(); - let xr_discovery = if pref!(dom.webxr.glwindow.enabled) { + let xr_discovery = if pref!(dom.webxr.glwindow.enabled) && ! opts::get().headless { let window = window.clone(); // This should be safe because run_forever does, in fact, // run forever. The event loop window target doesn't get diff --git a/ports/winit/events_loop.rs b/ports/winit/events_loop.rs index 97cad32d781..3bd82574b31 100644 --- a/ports/winit/events_loop.rs +++ b/ports/winit/events_loop.rs @@ -80,18 +80,22 @@ impl EventsLoop { } EventLoop::Headless(ref data) => { let &(ref flag, ref condvar) = &**data; + let mut event = winit::event::Event::NewEvents(winit::event::StartCause::Init); loop { self.sleep(flag, condvar); let mut control_flow = winit::event_loop::ControlFlow::Poll; - callback( - winit::event::Event::::UserEvent(ServoEvent::Awakened), + event, None, &mut control_flow ); + event = winit::event::Event::::UserEvent(ServoEvent::Awakened); + if control_flow != winit::event_loop::ControlFlow::Poll { *flag.lock().unwrap() = false; - } else if control_flow == winit::event_loop::ControlFlow::Exit { + } + + if control_flow == winit::event_loop::ControlFlow::Exit { break; } }