fix: internal laptop screen stuck on vendor logo with external monitor

This commit is contained in:
Alexander Daichendt 2026-06-28 16:30:53 +02:00 • committed by Victoria Brekenfeld
parent dacdc3db39
commit a9f2427c00
2 changed files with 85 additions and 35 deletions

View file

@ -852,11 +852,26 @@ impl KmsGuard<'_> {
// first drop old surfaces
if !test_only {
for output in outputs.iter().filter(|o| !o.is_enabled()) {
device
.inner
.surfaces
.retain(|_, surface| surface.output != *output);
let mut disabled_crtcs = Vec::new();
device.inner.surfaces.retain(|crtc, surface| {
if outputs
.iter()
.any(|o| !o.is_enabled() && surface.output == *o)
{
disabled_crtcs.push(*crtc);
false
} else {
true
}
});
let supports_atomic = device.drm.device().is_atomic();
if let Err(err) = drm_helpers::disable_crtcs(
device.drm.device_mut(),
supports_atomic,
&disabled_crtcs,
) {
warn!("Failed to disable crtcs for disabled outputs: {err}");
}
}