Skip to content

Commit f1d9c3e

Browse files
authored
Merge pull request #326 from MaxVerevkin/remove-dup-code
output: remove some duplicating code and simplify wl_output::Event::Mode hangling
2 parents 50e1a72 + aee7f30 commit f1d9c3e

File tree

1 file changed

+27
-70
lines changed

1 file changed

+27
-70
lines changed

src/output.rs

Lines changed: 27 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)