diff options
Diffstat (limited to '')
| -rw-r--r-- | winit/src/application.rs | 36 | 
1 files changed, 18 insertions, 18 deletions
diff --git a/winit/src/application.rs b/winit/src/application.rs index 5c48fb32..ded60366 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -241,21 +241,32 @@ async fn run_instance<A, E, C>(          user_interface.draw(&mut renderer, state.cursor_position());      let mut mouse_interaction = mouse::Interaction::default(); +    let mut events = Vec::new();      let mut messages = Vec::new(); -    let mut is_clean = true;      debug.startup_finished();      while let Some(event) = receiver.next().await {          match event { -            event::Event::NewEvents(_) => { -                debug.event_processing_started(); -            }              event::Event::MainEventsCleared => { +                if events.is_empty() && messages.is_empty() { +                    continue; +                } + +                debug.event_processing_started(); + +                let statuses = user_interface.update( +                    &events, +                    state.cursor_position(), +                    clipboard.as_ref().map(|c| c as _), +                    &mut renderer, +                    &mut messages, +                ); +                  debug.event_processing_finished(); -                if is_clean && messages.is_empty() { -                    continue; +                for event in events.drain(..).zip(statuses.into_iter()) { +                    runtime.broadcast(event);                  }                  if !messages.is_empty() { @@ -288,7 +299,6 @@ async fn run_instance<A, E, C>(                  debug.draw_finished();                  window.request_redraw(); -                is_clean = true;              }              event::Event::UserEvent(message) => {                  messages.push(message); @@ -359,17 +369,7 @@ async fn run_instance<A, E, C>(                      state.scale_factor(),                      state.modifiers(),                  ) { -                    let event_status = user_interface.update( -                        event.clone(), -                        state.cursor_position(), -                        clipboard.as_ref().map(|c| c as _), -                        &mut renderer, -                        &mut messages, -                    ); - -                    runtime.broadcast((event, event_status)); - -                    is_clean = false; +                    events.push(event);                  }              }              _ => {}  | 
