Skip to content

Commit aee7f30

Browse files
committed
output: simplify wl_output::Event::Mode hangling
1 parent f463e83 commit aee7f30

File tree

1 file changed

+20
-28
lines changed

1 file changed

+20
-28
lines changed

src/output.rs

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -436,14 +436,10 @@ where
436436
}
437437

438438
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+
});
447443

448444
let flags = match flags {
449445
WEnum::Value(flags) => flags,
@@ -453,32 +449,28 @@ where
453449
let current = flags.contains(wl_output::Mode::Current);
454450
let preferred = flags.contains(wl_output::Mode::Preferred);
455451

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-
466452
// Any mode that isn't current is deprecated, let's deprecate any existing modes that may be
467453
// marked as current.
468454
//
469455
// 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+
}
476461

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;
481465
}
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,
482474
});
483475

484476
inner.pending_wl = true;

0 commit comments

Comments
 (0)