@@ -268,14 +268,16 @@ impl<T: 'static> EventLoop<T> {
268
268
{
269
269
let mut control_flow = ControlFlow :: default ( ) ;
270
270
let mut events = Events :: with_capacity ( 8 ) ;
271
-
272
- callback (
273
- crate :: event:: Event :: NewEvents ( crate :: event:: StartCause :: Init ) ,
274
- & self . target ,
275
- & mut control_flow,
276
- ) ;
271
+ let mut cause = StartCause :: Init ;
277
272
278
273
loop {
274
+ sticky_exit_callback (
275
+ crate :: event:: Event :: NewEvents ( cause) ,
276
+ & self . target ,
277
+ & mut control_flow,
278
+ & mut callback,
279
+ ) ;
280
+
279
281
// Process all pending events
280
282
self . drain_events ( & mut callback, & mut control_flow) ;
281
283
@@ -326,7 +328,7 @@ impl<T: 'static> EventLoop<T> {
326
328
}
327
329
328
330
let start = Instant :: now ( ) ;
329
- let ( mut cause , deadline, timeout) ;
331
+ let ( deadline, timeout) ;
330
332
331
333
match control_flow {
332
334
ControlFlow :: Exit => break ,
@@ -357,38 +359,20 @@ impl<T: 'static> EventLoop<T> {
357
359
}
358
360
}
359
361
360
- if self . event_processor . poll ( ) {
361
- // If the XConnection already contains buffered events, we don't
362
- // need to wait for data on the socket.
363
- // However, we still need to check for user events.
364
- self . poll
365
- . poll ( & mut events, Some ( Duration :: from_millis ( 0 ) ) )
366
- . unwrap ( ) ;
367
- events. clear ( ) ;
368
-
369
- callback (
370
- crate :: event:: Event :: NewEvents ( cause) ,
371
- & self . target ,
372
- & mut control_flow,
373
- ) ;
374
- } else {
362
+ // If the XConnection already contains buffered events, we don't
363
+ // need to wait for data on the socket.
364
+ if !self . event_processor . poll ( ) {
375
365
self . poll . poll ( & mut events, timeout) . unwrap ( ) ;
376
366
events. clear ( ) ;
367
+ }
377
368
378
- let wait_cancelled = deadline. map_or ( false , |deadline| Instant :: now ( ) < deadline) ;
369
+ let wait_cancelled = deadline. map_or ( false , |deadline| Instant :: now ( ) < deadline) ;
379
370
380
- if wait_cancelled {
381
- cause = StartCause :: WaitCancelled {
382
- start,
383
- requested_resume : deadline,
384
- } ;
385
- }
386
-
387
- callback (
388
- crate :: event:: Event :: NewEvents ( cause) ,
389
- & self . target ,
390
- & mut control_flow,
391
- ) ;
371
+ if wait_cancelled {
372
+ cause = StartCause :: WaitCancelled {
373
+ start,
374
+ requested_resume : deadline,
375
+ } ;
392
376
}
393
377
}
394
378
0 commit comments