@@ -436,14 +436,10 @@ where
436
436
}
437
437
438
438
wl_output:: Event :: Mode { flags, width, height, refresh } => {
439
- if let Some ( ( index, _) ) =
440
- inner. pending_info . modes . iter ( ) . enumerate ( ) . find ( |( _, mode) | {
441
- mode. dimensions == ( width, height) && mode. refresh_rate == refresh
442
- } )
443
- {
444
- // We found a match, remove the old mode.
445
- inner. pending_info . modes . remove ( index) ;
446
- }
439
+ // Remove the old mode
440
+ inner. pending_info . modes . retain ( |mode| {
441
+ mode. dimensions != ( width, height) || mode. refresh_rate != refresh
442
+ } ) ;
447
443
448
444
let flags = match flags {
449
445
WEnum :: Value ( flags) => flags,
@@ -453,32 +449,28 @@ where
453
449
let current = flags. contains ( wl_output:: Mode :: Current ) ;
454
450
let preferred = flags. contains ( wl_output:: Mode :: Preferred ) ;
455
451
456
- // Now create the new mode.
457
- inner. pending_info . modes . push ( Mode {
458
- dimensions : ( width, height) ,
459
- refresh_rate : refresh,
460
- current,
461
- preferred,
462
- } ) ;
463
-
464
- let index = inner. pending_info . modes . len ( ) - 1 ;
465
-
466
452
// Any mode that isn't current is deprecated, let's deprecate any existing modes that may be
467
453
// marked as current.
468
454
//
469
455
// If a new mode is advertised as preferred, then mark the existing preferred mode as not.
470
- inner. pending_info . modes . iter_mut ( ) . enumerate ( ) . for_each ( |( mode_index, mode) | {
471
- if index != mode_index {
472
- // This mode is no longer preferred.
473
- if mode. preferred && preferred {
474
- mode. preferred = false ;
475
- }
456
+ for mode in & mut inner. pending_info . modes {
457
+ // This mode is no longer preferred.
458
+ if preferred {
459
+ mode. preferred = false ;
460
+ }
476
461
477
- // This mode is no longer current.
478
- if mode. current && current {
479
- mode. current = false ;
480
- }
462
+ // This mode is no longer current.
463
+ if current {
464
+ mode. current = false ;
481
465
}
466
+ }
467
+
468
+ // Now create the new mode.
469
+ inner. pending_info . modes . push ( Mode {
470
+ dimensions : ( width, height) ,
471
+ refresh_rate : refresh,
472
+ current,
473
+ preferred,
482
474
} ) ;
483
475
484
476
inner. pending_wl = true ;
0 commit comments