diff --git a/Cargo.lock b/Cargo.lock index 0d489aa2..8f2882ec 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1009,7 +1009,7 @@ dependencies = [ "indexmap 2.13.0", "jiff", "keyframe", - "libcosmic", + "libcosmic-yoda", "libdisplay-info", "libsystemd", "log-panics", @@ -1115,7 +1115,7 @@ dependencies = [ [[package]] name = "cosmic-randr-shell" -version = "0.1.0" +version = "1.3.0" dependencies = [ "kdl", "slotmap", @@ -3139,7 +3139,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] -name = "libcosmic" +name = "libcosmic-yoda" version = "0.1.0-yoda.2" dependencies = [ "apply", diff --git a/Cargo.toml b/Cargo.toml index fa3747f6..fddb41b9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,7 +43,7 @@ iced_tiny_skia = { path = "../libcosmic/iced/tiny_skia" } iced_graphics = { path = "../libcosmic/iced/graphics", features = ["geometry"] } indexmap = "2.13" keyframe = "1.1.1" -cosmic = { package = "libcosmic", path = "../libcosmic", default-features = false, features = [ +cosmic = { package = "libcosmic-yoda", path = "../libcosmic", default-features = false, features = [ "tokio", "wayland", "multi-window", diff --git a/src/backend/kms/device.rs b/src/backend/kms/device.rs index 44682dc5..bb32f5a3 100644 --- a/src/backend/kms/device.rs +++ b/src/backend/kms/device.rs @@ -1269,15 +1269,26 @@ fn populate_modes( ) -> Result<()> { let conn_info = drm.get_connector(conn, false)?; let max_bpc = drm_helpers::get_max_bpc(drm, conn)?.map(|(_val, range)| range.end.min(16)); - let Some(mode) = conn_info + let preferred = conn_info .modes() .iter() .find(|mode| mode.mode_type().contains(ModeTypeFlags::PREFERRED)) .copied() - .or(conn_info.modes().first().copied()) - else { + .or(conn_info.modes().first().copied()); + let Some(preferred) = preferred else { anyhow::bail!("No mode found"); }; + // Prefer the highest refresh rate at the native resolution so that + // high-refresh panels (120 Hz, 144 Hz, …) are used out-of-the-box + // without a pre-existing outputs.ron config. + let preferred_size = preferred.size(); + let mode = conn_info + .modes() + .iter() + .filter(|m| m.size() == preferred_size) + .max_by_key(|m| drm_helpers::calculate_refresh_rate(**m)) + .copied() + .unwrap_or(preferred); let refresh_rate = drm_helpers::calculate_refresh_rate(mode); let output_mode = OutputMode {