@@ -206,15 +206,19 @@ impl<T> EventLoop<T> {
206
206
None => break
207
207
}
208
208
}
209
- * runner_ref = Some ( & mut runner) ;
209
+ * runner_ref = Some ( runner) ;
210
+ }
211
+
212
+ macro_rules! runner {
213
+ ( ) => { { self . runner_shared. runner. borrow_mut( ) . as_mut( ) . unwrap( ) } } ;
210
214
}
211
215
212
216
unsafe {
213
217
let mut msg = mem:: uninitialized ( ) ;
214
218
let mut msg_unprocessed = false ;
215
219
216
220
' main: loop {
217
- runner. new_events ( ) ;
221
+ runner ! ( ) . new_events ( ) ;
218
222
loop {
219
223
if !msg_unprocessed {
220
224
if 0 == winuser:: PeekMessageW ( & mut msg, ptr:: null_mut ( ) , 0 , 0 , 1 ) {
@@ -225,9 +229,9 @@ impl<T> EventLoop<T> {
225
229
winuser:: DispatchMessageW ( & mut msg) ;
226
230
msg_unprocessed = false ;
227
231
}
228
- runner. events_cleared ( ) ;
232
+ runner ! ( ) . events_cleared ( ) ;
229
233
230
- match runner. control_flow {
234
+ match runner ! ( ) . control_flow {
231
235
ControlFlow :: Exit => break ' main,
232
236
ControlFlow :: Wait => {
233
237
if 0 == winuser:: GetMessageW ( & mut msg, ptr:: null_mut ( ) , 0 , 0 ) {
@@ -243,7 +247,7 @@ impl<T> EventLoop<T> {
243
247
}
244
248
}
245
249
246
- unsafe { runner. call_event_handler ( Event :: LoopDestroyed ) }
250
+ unsafe { runner ! ( ) . call_event_handler ( Event :: LoopDestroyed ) }
247
251
* self . runner_shared . runner . borrow_mut ( ) = None ;
248
252
}
249
253
@@ -265,7 +269,7 @@ impl<T> EventLoop<T> {
265
269
266
270
pub ( crate ) type EventLoopRunnerShared < T > = Rc < ELRShared < T > > ;
267
271
pub ( crate ) struct ELRShared < T > {
268
- runner : RefCell < Option < * mut EventLoopRunner < T > > > ,
272
+ runner : RefCell < Option < EventLoopRunner < T > > > ,
269
273
buffer : RefCell < VecDeque < Event < T > > >
270
274
}
271
275
pub ( crate ) struct EventLoopRunner < T > {
@@ -279,9 +283,9 @@ pub(crate) struct EventLoopRunner<T> {
279
283
280
284
impl < T > ELRShared < T > {
281
285
unsafe fn send_event ( & self , event : Event < T > ) {
282
- if let Ok ( runner_ref) = self . runner . try_borrow_mut ( ) {
283
- if let Some ( runner) = * runner_ref {
284
- ( * runner) . process_event ( event) ;
286
+ if let Ok ( mut runner_ref) = self . runner . try_borrow_mut ( ) {
287
+ if let Some ( ref mut runner) = * runner_ref {
288
+ runner. process_event ( event) ;
285
289
return ;
286
290
}
287
291
}
@@ -379,12 +383,14 @@ impl<T> EventLoopRunner<T> {
379
383
// deferred.
380
384
if let RunnerState :: DeferredNewEvents ( wait_start) = self . runner_state {
381
385
match self . control_flow {
382
- ControlFlow :: Wait => self . call_event_handler (
383
- Event :: NewEvents ( StartCause :: WaitCancelled {
384
- start : wait_start,
385
- requested_resume : None
386
- } )
387
- ) ,
386
+ ControlFlow :: Wait => {
387
+ self . call_event_handler (
388
+ Event :: NewEvents ( StartCause :: WaitCancelled {
389
+ start : wait_start,
390
+ requested_resume : None
391
+ } )
392
+ )
393
+ } ,
388
394
ControlFlow :: WaitUntil ( resume_time) => {
389
395
let start_cause = match Instant :: now ( ) >= resume_time {
390
396
// If the current time is later than the requested resume time, the resume time
@@ -403,7 +409,9 @@ impl<T> EventLoopRunner<T> {
403
409
} ,
404
410
// This can be reached if the control flow is changed to poll during a `RedrawRequested`
405
411
// that was sent after `EventsCleared`.
406
- ControlFlow :: Poll => self . call_event_handler ( Event :: NewEvents ( StartCause :: Poll ) ) ,
412
+ ControlFlow :: Poll => {
413
+ self . call_event_handler ( Event :: NewEvents ( StartCause :: Poll ) )
414
+ } ,
407
415
ControlFlow :: Exit => unreachable ! ( )
408
416
}
409
417
}
@@ -456,23 +464,19 @@ impl<T> EventLoopRunner<T> {
456
464
}
457
465
458
466
unsafe fn call_event_handler ( & mut self , event : Event < T > ) {
459
- if self . event_handler != mem:: zeroed ( ) {
460
- match event {
461
- Event :: NewEvents ( _) => ( * self . event_loop ) . trigger_newevents_on_redraw . store ( true , Ordering :: Relaxed ) ,
462
- Event :: EventsCleared => ( * self . event_loop ) . trigger_newevents_on_redraw . store ( false , Ordering :: Relaxed ) ,
463
- _ => ( )
464
- }
467
+ match event {
468
+ Event :: NewEvents ( _) => ( * self . event_loop ) . trigger_newevents_on_redraw . store ( true , Ordering :: Relaxed ) ,
469
+ Event :: EventsCleared => ( * self . event_loop ) . trigger_newevents_on_redraw . store ( false , Ordering :: Relaxed ) ,
470
+ _ => ( )
471
+ }
465
472
466
- assert_eq ! ( mem:: size_of:: <RootEventLoop <T >>( ) , mem:: size_of:: <EventLoop <T >>( ) ) ;
467
- let event_loop_ref = & * ( self . event_loop as * const RootEventLoop < T > ) ;
473
+ assert_eq ! ( mem:: size_of:: <RootEventLoop <T >>( ) , mem:: size_of:: <EventLoop <T >>( ) ) ;
474
+ let event_loop_ref = & * ( self . event_loop as * const RootEventLoop < T > ) ;
468
475
469
- if self . control_flow != ControlFlow :: Exit {
470
- ( * self . event_handler ) ( event, event_loop_ref, & mut self . control_flow ) ;
471
- } else {
472
- ( * self . event_handler ) ( event, event_loop_ref, & mut ControlFlow :: Exit ) ;
473
- }
476
+ if self . control_flow != ControlFlow :: Exit {
477
+ ( * self . event_handler ) ( event, event_loop_ref, & mut self . control_flow ) ;
474
478
} else {
475
- panic ! ( "Tried to call event handler with null handler" ) ;
479
+ ( * self . event_handler ) ( event, event_loop_ref , & mut ControlFlow :: Exit ) ;
476
480
}
477
481
}
478
482
}
@@ -763,16 +767,16 @@ unsafe extern "system" fn public_window_callback<T>(
763
767
764
768
match msg {
765
769
winuser:: WM_ENTERSIZEMOVE => {
766
- let runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
767
- if let Some ( runner) = * runner {
768
- ( * runner) . in_modal_loop = true ;
770
+ let mut runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
771
+ if let Some ( ref mut runner) = * runner {
772
+ runner. in_modal_loop = true ;
769
773
}
770
774
0
771
775
} ,
772
776
winuser:: WM_EXITSIZEMOVE => {
773
- let runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
774
- if let Some ( runner) = * runner {
775
- ( * runner) . in_modal_loop = false ;
777
+ let mut runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
778
+ if let Some ( ref mut runner) = * runner {
779
+ runner. in_modal_loop = false ;
776
780
}
777
781
0
778
782
} ,
@@ -804,9 +808,8 @@ unsafe extern "system" fn public_window_callback<T>(
804
808
805
809
_ if msg == * REQUEST_REDRAW_NO_NEWEVENTS_MSG_ID => {
806
810
use event:: WindowEvent :: RedrawRequested ;
807
- let runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
808
- if let Some ( runner) = * runner {
809
- let runner = & mut * runner;
811
+ let mut runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
812
+ if let Some ( ref mut runner) = * runner {
810
813
match runner. runner_state {
811
814
RunnerState :: Idle ( ..) |
812
815
RunnerState :: DeferredNewEvents ( ..) => runner. call_event_handler ( Event :: WindowEvent {
@@ -827,9 +830,8 @@ unsafe extern "system" fn public_window_callback<T>(
827
830
828
831
let mut send_event = false ;
829
832
{
830
- let runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
831
- if let Some ( runner) = * runner {
832
- let runner = & mut * runner;
833
+ let mut runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
834
+ if let Some ( ref mut runner) = * runner {
833
835
match runner. runner_state {
834
836
RunnerState :: Idle ( ..) |
835
837
RunnerState :: DeferredNewEvents ( ..) => runner. call_event_handler ( event ( ) ) ,
@@ -1154,7 +1156,8 @@ unsafe extern "system" fn public_window_callback<T>(
1154
1156
event,
1155
1157
} ) ;
1156
1158
1157
- commctrl:: DefSubclassProc ( window, msg, wparam, lparam)
1159
+ 0
1160
+ // commctrl::DefSubclassProc(window, msg, wparam, lparam)
1158
1161
} ,
1159
1162
1160
1163
winuser:: WM_INPUT => {
@@ -1533,8 +1536,8 @@ unsafe extern "system" fn thread_event_target_callback<T>(
1533
1536
} ;
1534
1537
let in_modal_loop = {
1535
1538
let runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
1536
- if let Some ( runner) = * runner {
1537
- ( * runner) . in_modal_loop
1539
+ if let Some ( ref runner) = * runner {
1540
+ runner. in_modal_loop
1538
1541
} else {
1539
1542
false
1540
1543
}
@@ -1567,9 +1570,8 @@ unsafe extern "system" fn thread_event_target_callback<T>(
1567
1570
}
1568
1571
}
1569
1572
1570
- let runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
1571
- if let Some ( runner) = * runner {
1572
- let runner = & mut * runner;
1573
+ let mut runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
1574
+ if let Some ( ref mut runner) = * runner {
1573
1575
runner. events_cleared ( ) ;
1574
1576
match runner. control_flow {
1575
1577
// Waiting is handled by the modal loop.
0 commit comments