@@ -401,6 +401,13 @@ where
401401 conn : & Connection ,
402402 qh : & QueueHandle < D > ,
403403 ) {
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+
404411 match event {
405412 wl_output:: Event :: Geometry {
406413 x,
@@ -412,13 +419,6 @@ where
412419 model,
413420 transform,
414421 } => {
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-
422422 inner. pending_info . location = ( x, y) ;
423423 inner. pending_info . physical_size = ( physical_width, physical_height) ;
424424 inner. pending_info . subpixel = match subpixel {
@@ -435,21 +435,10 @@ where
435435 }
436436
437437 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+ } ) ;
453442
454443 let flags = match flags {
455444 WEnum :: Value ( flags) => flags,
@@ -459,81 +448,49 @@ where
459448 let current = flags. contains ( wl_output:: Mode :: Current ) ;
460449 let preferred = flags. contains ( wl_output:: Mode :: Preferred ) ;
461450
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-
472451 // Any mode that isn't current is deprecated, let's deprecate any existing modes that may be
473452 // marked as current.
474453 //
475454 // 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+ }
482460
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 ;
487464 }
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,
488473 } ) ;
489474
490475 inner. pending_wl = true ;
491476 }
492477
493478 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-
501479 inner. pending_info . scale_factor = factor;
502480 inner. pending_wl = true ;
503481 }
504482
505483 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-
513484 inner. pending_info . name = Some ( name) ;
514485 inner. pending_wl = true ;
515486 }
516487
517488 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-
525489 inner. pending_info . description = Some ( description) ;
526490 inner. pending_wl = true ;
527491 }
528492
529493 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-
537494 let info = inner. pending_info . clone ( ) ;
538495 inner. current_info = Some ( info. clone ( ) ) ;
539496 inner. pending_wl = false ;
0 commit comments