From 96673d02659413ba15d170e83626db1d876d6c5e Mon Sep 17 00:00:00 2001 From: Cedrick Cooke Date: Mon, 1 Dec 2025 07:38:33 -0800 Subject: [PATCH] CMP-8068 Fix crash in `getSystemEnvironment` on headless desktop (#5471) Fixes a crash in `getSystemEnvironment` on desktop when running in a headless environment (such as most CI runners) by providing a default density qualifier. In the future that might be something that's nice to make configurable, but since both our use case and the linked issue encountered it when calling `getString` I didn't worry about it too hard. Fixes [CMP-8068](https://youtrack.jetbrains.com/issue/CMP-8068) ## Testing Made a local build and used it to run some tests in another project that were failing on calls to `getString` ## Release Notes ### Fixes - Resources - Fix crash in `getSystemEnvironment` on headless desktop --- .../compose/resources/ResourceEnvironment.desktop.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/components/resources/library/src/desktopMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.desktop.kt b/components/resources/library/src/desktopMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.desktop.kt index 8c45734ebe..41891ac328 100644 --- a/components/resources/library/src/desktopMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.desktop.kt +++ b/components/resources/library/src/desktopMain/kotlin/org/jetbrains/compose/resources/ResourceEnvironment.desktop.kt @@ -2,6 +2,7 @@ package org.jetbrains.compose.resources import org.jetbrains.skiko.SystemTheme import org.jetbrains.skiko.currentSystemTheme +import java.awt.GraphicsEnvironment import java.awt.Toolkit import java.util.* @@ -9,7 +10,12 @@ internal actual fun getSystemEnvironment(): ResourceEnvironment { val locale = Locale.getDefault() //FIXME: don't use skiko internals val isDarkTheme = currentSystemTheme == SystemTheme.DARK - val dpi = Toolkit.getDefaultToolkit().screenResolution + val dpi = if (GraphicsEnvironment.isHeadless()) { + // Default to 1x ("unscaled") resources when DPI info not available + DensityQualifier.MDPI.dpi + } else { + Toolkit.getDefaultToolkit().screenResolution + } return ResourceEnvironment( language = LanguageQualifier(locale.language), region = RegionQualifier(locale.country),