@@ -205,15 +205,19 @@ impl<T> EventLoop<T> {
205
205
None => break
206
206
}
207
207
}
208
- * runner_ref = Some ( & mut runner) ;
208
+ * runner_ref = Some ( runner) ;
209
+ }
210
+
211
+ macro_rules! runner {
212
+ ( ) => { { self . runner_shared. runner. borrow_mut( ) . as_mut( ) . unwrap( ) } } ;
209
213
}
210
214
211
215
unsafe {
212
216
let mut msg = mem:: uninitialized ( ) ;
213
217
let mut msg_unprocessed = false ;
214
218
215
219
' main: loop {
216
- runner. new_events ( ) ;
220
+ runner ! ( ) . new_events ( ) ;
217
221
loop {
218
222
if !msg_unprocessed {
219
223
if 0 == winuser:: PeekMessageW ( & mut msg, ptr:: null_mut ( ) , 0 , 0 , 1 ) {
@@ -224,9 +228,9 @@ impl<T> EventLoop<T> {
224
228
winuser:: DispatchMessageW ( & mut msg) ;
225
229
msg_unprocessed = false ;
226
230
}
227
- runner. events_cleared ( ) ;
231
+ runner ! ( ) . events_cleared ( ) ;
228
232
229
- match runner. control_flow {
233
+ match runner ! ( ) . control_flow {
230
234
ControlFlow :: Exit => break ' main,
231
235
ControlFlow :: Wait => {
232
236
if 0 == winuser:: GetMessageW ( & mut msg, ptr:: null_mut ( ) , 0 , 0 ) {
@@ -242,7 +246,7 @@ impl<T> EventLoop<T> {
242
246
}
243
247
}
244
248
245
- unsafe { runner. call_event_handler ( Event :: LoopDestroyed ) }
249
+ unsafe { runner ! ( ) . call_event_handler ( Event :: LoopDestroyed ) }
246
250
* self . runner_shared . runner . borrow_mut ( ) = None ;
247
251
}
248
252
@@ -264,7 +268,7 @@ impl<T> EventLoop<T> {
264
268
265
269
pub ( crate ) type EventLoopRunnerShared < T > = Rc < ELRShared < T > > ;
266
270
pub ( crate ) struct ELRShared < T > {
267
- runner : RefCell < Option < * mut EventLoopRunner < T > > > ,
271
+ runner : RefCell < Option < EventLoopRunner < T > > > ,
268
272
buffer : RefCell < VecDeque < Event < T > > >
269
273
}
270
274
pub ( crate ) struct EventLoopRunner < T > {
@@ -278,9 +282,9 @@ pub(crate) struct EventLoopRunner<T> {
278
282
279
283
impl < T > ELRShared < T > {
280
284
unsafe fn send_event ( & self , event : Event < T > ) {
281
- if let Ok ( runner_ref) = self . runner . try_borrow_mut ( ) {
282
- if let Some ( runner) = * runner_ref {
283
- ( * runner) . process_event ( event) ;
285
+ if let Ok ( mut runner_ref) = self . runner . try_borrow_mut ( ) {
286
+ if let Some ( ref mut runner) = * runner_ref {
287
+ runner. process_event ( event) ;
284
288
return ;
285
289
}
286
290
}
@@ -378,12 +382,14 @@ impl<T> EventLoopRunner<T> {
378
382
// deferred.
379
383
if let RunnerState :: DeferredNewEvents ( wait_start) = self . runner_state {
380
384
match self . control_flow {
381
- ControlFlow :: Wait => self . call_event_handler (
382
- Event :: NewEvents ( StartCause :: WaitCancelled {
383
- start : wait_start,
384
- requested_resume : None
385
- } )
386
- ) ,
385
+ ControlFlow :: Wait => {
386
+ self . call_event_handler (
387
+ Event :: NewEvents ( StartCause :: WaitCancelled {
388
+ start : wait_start,
389
+ requested_resume : None
390
+ } )
391
+ )
392
+ } ,
387
393
ControlFlow :: WaitUntil ( resume_time) => {
388
394
let start_cause = match Instant :: now ( ) >= resume_time {
389
395
// If the current time is later than the requested resume time, the resume time
@@ -402,7 +408,9 @@ impl<T> EventLoopRunner<T> {
402
408
} ,
403
409
// This can be reached if the control flow is changed to poll during a `RedrawRequested`
404
410
// that was sent after `EventsCleared`.
405
- ControlFlow :: Poll => self . call_event_handler ( Event :: NewEvents ( StartCause :: Poll ) ) ,
411
+ ControlFlow :: Poll => {
412
+ self . call_event_handler ( Event :: NewEvents ( StartCause :: Poll ) )
413
+ } ,
406
414
ControlFlow :: Exit => unreachable ! ( )
407
415
}
408
416
}
@@ -455,23 +463,19 @@ impl<T> EventLoopRunner<T> {
455
463
}
456
464
457
465
unsafe fn call_event_handler ( & mut self , event : Event < T > ) {
458
- if self . event_handler != mem:: zeroed ( ) {
459
- match event {
460
- Event :: NewEvents ( _) => ( * self . event_loop ) . trigger_newevents_on_redraw . store ( true , Ordering :: Relaxed ) ,
461
- Event :: EventsCleared => ( * self . event_loop ) . trigger_newevents_on_redraw . store ( false , Ordering :: Relaxed ) ,
462
- _ => ( )
463
- }
466
+ match event {
467
+ Event :: NewEvents ( _) => ( * self . event_loop ) . trigger_newevents_on_redraw . store ( true , Ordering :: Relaxed ) ,
468
+ Event :: EventsCleared => ( * self . event_loop ) . trigger_newevents_on_redraw . store ( false , Ordering :: Relaxed ) ,
469
+ _ => ( )
470
+ }
464
471
465
- assert_eq ! ( mem:: size_of:: <RootEventLoop <T >>( ) , mem:: size_of:: <EventLoop <T >>( ) ) ;
466
- let event_loop_ref = & * ( self . event_loop as * const RootEventLoop < T > ) ;
472
+ assert_eq ! ( mem:: size_of:: <RootEventLoop <T >>( ) , mem:: size_of:: <EventLoop <T >>( ) ) ;
473
+ let event_loop_ref = & * ( self . event_loop as * const RootEventLoop < T > ) ;
467
474
468
- if self . control_flow != ControlFlow :: Exit {
469
- ( * self . event_handler ) ( event, event_loop_ref, & mut self . control_flow ) ;
470
- } else {
471
- ( * self . event_handler ) ( event, event_loop_ref, & mut ControlFlow :: Exit ) ;
472
- }
475
+ if self . control_flow != ControlFlow :: Exit {
476
+ ( * self . event_handler ) ( event, event_loop_ref, & mut self . control_flow ) ;
473
477
} else {
474
- panic ! ( "Tried to call event handler with null handler" ) ;
478
+ ( * self . event_handler ) ( event, event_loop_ref , & mut ControlFlow :: Exit ) ;
475
479
}
476
480
}
477
481
}
@@ -762,16 +766,16 @@ unsafe extern "system" fn public_window_callback<T>(
762
766
763
767
match msg {
764
768
winuser:: WM_ENTERSIZEMOVE => {
765
- let runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
766
- if let Some ( runner) = * runner {
767
- ( * runner) . in_modal_loop = true ;
769
+ let mut runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
770
+ if let Some ( ref mut runner) = * runner {
771
+ runner. in_modal_loop = true ;
768
772
}
769
773
0
770
774
} ,
771
775
winuser:: WM_EXITSIZEMOVE => {
772
- let runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
773
- if let Some ( runner) = * runner {
774
- ( * runner) . in_modal_loop = false ;
776
+ let mut runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
777
+ if let Some ( ref mut runner) = * runner {
778
+ runner. in_modal_loop = false ;
775
779
}
776
780
0
777
781
} ,
@@ -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 => {
@@ -1516,8 +1519,8 @@ unsafe extern "system" fn thread_event_target_callback<T>(
1516
1519
} ;
1517
1520
let in_modal_loop = {
1518
1521
let runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
1519
- if let Some ( runner) = * runner {
1520
- ( * runner) . in_modal_loop
1522
+ if let Some ( ref runner) = * runner {
1523
+ runner. in_modal_loop
1521
1524
} else {
1522
1525
false
1523
1526
}
@@ -1550,9 +1553,8 @@ unsafe extern "system" fn thread_event_target_callback<T>(
1550
1553
}
1551
1554
}
1552
1555
1553
- let runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
1554
- if let Some ( runner) = * runner {
1555
- let runner = & mut * runner;
1556
+ let mut runner = subclass_input. event_loop_runner . runner . borrow_mut ( ) ;
1557
+ if let Some ( ref mut runner) = * runner {
1556
1558
runner. events_cleared ( ) ;
1557
1559
match runner. control_flow {
1558
1560
// Waiting is handled by the modal loop.
0 commit comments