@@ -401,6 +401,13 @@ where
401
401
conn : & Connection ,
402
402
qh : & QueueHandle < D > ,
403
403
) {
404
+ let inner = state
405
+ . output_state ( )
406
+ . outputs
407
+ . iter_mut ( )
408
+ . find ( |inner| & inner. wl_output == output)
409
+ . expect ( "Received event for dead output" ) ;
410
+
404
411
match event {
405
412
wl_output:: Event :: Geometry {
406
413
x,
@@ -412,13 +419,6 @@ where
412
419
model,
413
420
transform,
414
421
} => {
415
- let inner = state
416
- . output_state ( )
417
- . outputs
418
- . iter_mut ( )
419
- . find ( |inner| & inner. wl_output == output)
420
- . expect ( "Received event for dead output" ) ;
421
-
422
422
inner. pending_info . location = ( x, y) ;
423
423
inner. pending_info . physical_size = ( physical_width, physical_height) ;
424
424
inner. pending_info . subpixel = match subpixel {
@@ -435,21 +435,10 @@ where
435
435
}
436
436
437
437
wl_output:: Event :: Mode { flags, width, height, refresh } => {
438
- let inner = state
439
- . output_state ( )
440
- . outputs
441
- . iter_mut ( )
442
- . find ( |inner| & inner. wl_output == output)
443
- . expect ( "Received event for dead output" ) ;
444
-
445
- if let Some ( ( index, _) ) =
446
- inner. pending_info . modes . iter ( ) . enumerate ( ) . find ( |( _, mode) | {
447
- mode. dimensions == ( width, height) && mode. refresh_rate == refresh
448
- } )
449
- {
450
- // We found a match, remove the old mode.
451
- inner. pending_info . modes . remove ( index) ;
452
- }
438
+ // Remove the old mode
439
+ inner. pending_info . modes . retain ( |mode| {
440
+ mode. dimensions != ( width, height) || mode. refresh_rate != refresh
441
+ } ) ;
453
442
454
443
let flags = match flags {
455
444
WEnum :: Value ( flags) => flags,
@@ -459,81 +448,49 @@ where
459
448
let current = flags. contains ( wl_output:: Mode :: Current ) ;
460
449
let preferred = flags. contains ( wl_output:: Mode :: Preferred ) ;
461
450
462
- // Now create the new mode.
463
- inner. pending_info . modes . push ( Mode {
464
- dimensions : ( width, height) ,
465
- refresh_rate : refresh,
466
- current,
467
- preferred,
468
- } ) ;
469
-
470
- let index = inner. pending_info . modes . len ( ) - 1 ;
471
-
472
451
// Any mode that isn't current is deprecated, let's deprecate any existing modes that may be
473
452
// marked as current.
474
453
//
475
454
// If a new mode is advertised as preferred, then mark the existing preferred mode as not.
476
- inner. pending_info . modes . iter_mut ( ) . enumerate ( ) . for_each ( |( mode_index, mode) | {
477
- if index != mode_index {
478
- // This mode is no longer preferred.
479
- if mode. preferred && preferred {
480
- mode. preferred = false ;
481
- }
455
+ for mode in & mut inner. pending_info . modes {
456
+ // This mode is no longer preferred.
457
+ if preferred {
458
+ mode. preferred = false ;
459
+ }
482
460
483
- // This mode is no longer current.
484
- if mode. current && current {
485
- mode. current = false ;
486
- }
461
+ // This mode is no longer current.
462
+ if current {
463
+ mode. current = false ;
487
464
}
465
+ }
466
+
467
+ // Now create the new mode.
468
+ inner. pending_info . modes . push ( Mode {
469
+ dimensions : ( width, height) ,
470
+ refresh_rate : refresh,
471
+ current,
472
+ preferred,
488
473
} ) ;
489
474
490
475
inner. pending_wl = true ;
491
476
}
492
477
493
478
wl_output:: Event :: Scale { factor } => {
494
- let inner = state
495
- . output_state ( )
496
- . outputs
497
- . iter_mut ( )
498
- . find ( |inner| & inner. wl_output == output)
499
- . expect ( "Received event for dead output" ) ;
500
-
501
479
inner. pending_info . scale_factor = factor;
502
480
inner. pending_wl = true ;
503
481
}
504
482
505
483
wl_output:: Event :: Name { name } => {
506
- let inner = state
507
- . output_state ( )
508
- . outputs
509
- . iter_mut ( )
510
- . find ( |inner| & inner. wl_output == output)
511
- . expect ( "Received event for dead output" ) ;
512
-
513
484
inner. pending_info . name = Some ( name) ;
514
485
inner. pending_wl = true ;
515
486
}
516
487
517
488
wl_output:: Event :: Description { description } => {
518
- let inner = state
519
- . output_state ( )
520
- . outputs
521
- . iter_mut ( )
522
- . find ( |inner| & inner. wl_output == output)
523
- . expect ( "Received event for dead output" ) ;
524
-
525
489
inner. pending_info . description = Some ( description) ;
526
490
inner. pending_wl = true ;
527
491
}
528
492
529
493
wl_output:: Event :: Done => {
530
- let inner = state
531
- . output_state ( )
532
- . outputs
533
- . iter_mut ( )
534
- . find ( |inner| & inner. wl_output == output)
535
- . expect ( "Received event for dead output" ) ;
536
-
537
494
let info = inner. pending_info . clone ( ) ;
538
495
inner. current_info = Some ( info. clone ( ) ) ;
539
496
inner. pending_wl = false ;
0 commit comments