From 97a725b8708b64a957ab64624fe610310b55ca2c Mon Sep 17 00:00:00 2001 From: sergio Date: Thu, 21 May 2026 02:40:33 +0000 Subject: [PATCH] =?UTF-8?q?fix(mirada-compositor):=20backend=20DRM=20?= =?UTF-8?q?=E2=80=94=20elegir=20el=20modo=20nativo=20del=20monitor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El backend DRM cogía conn.modes()[0], que no es el modo preferido — en un panel 16:10 (1920×1200) suele ser un 1920×1080, dejando una franja negra abajo. Ahora elige el modo marcado PREFERRED (el nativo) y, si ninguno lo está, el de mayor área. Co-Authored-By: Claude Opus 4.7 --- .../apps/mirada-compositor/src/drm_backend.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/crates/apps/mirada-compositor/src/drm_backend.rs b/crates/apps/mirada-compositor/src/drm_backend.rs index 8946c52..014efdd 100644 --- a/crates/apps/mirada-compositor/src/drm_backend.rs +++ b/crates/apps/mirada-compositor/src/drm_backend.rs @@ -42,7 +42,7 @@ use smithay::reexports::calloop::generic::Generic; use smithay::reexports::calloop::timer::{TimeoutAction, Timer}; use smithay::reexports::calloop::{EventLoop, Interest, Mode as CalloopMode, PostAction}; use smithay::reexports::drm::control::connector::State as ConnectorState; -use smithay::reexports::drm::control::Device as ControlDevice; +use smithay::reexports::drm::control::{Device as ControlDevice, ModeTypeFlags}; use smithay::reexports::input::Libinput; use smithay::reexports::rustix::fs::OFlags; use smithay::reexports::wayland_server::{Display, ListeningSocket}; @@ -263,7 +263,20 @@ pub fn run() -> Result<(), Box> { continue; } let name = format!("{:?}-{}", conn.interface(), conn.interface_id()); - let Some(&mode) = conn.modes().first() else { + // El modo: el marcado PREFERRED (el nativo del panel) y, si no + // hay ninguno marcado, el de mayor área. `modes()[0]` no sirve — + // suele ser un modo menor (p. ej. 1920×1080 en un panel 16:10). + let mode = conn + .modes() + .iter() + .find(|m| m.mode_type().contains(ModeTypeFlags::PREFERRED)) + .or_else(|| { + conn.modes() + .iter() + .max_by_key(|m| m.size().0 as u32 * m.size().1 as u32) + }) + .copied(); + let Some(mode) = mode else { continue; }; let crtc = conn