diff --git a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/scene/ComposeContainer.desktop.kt b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/scene/ComposeContainer.desktop.kt index 86b14277d1e11..ff9919ed7eab3 100644 --- a/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/scene/ComposeContainer.desktop.kt +++ b/compose/ui/ui/src/desktopMain/kotlin/androidx/compose/ui/scene/ComposeContainer.desktop.kt @@ -148,13 +148,14 @@ internal class ComposeContainer( } /** - * The listener to [_windowContainer] size and position changes. + * The listener to [windowContainer] size and position changes. */ private val windowContainerComponentListener = object : ComponentAdapter() { override fun componentResized(e: ComponentEvent?) { if (!container.isDisplayable) return mediator.onChangeComponentSize() + windowContext.setContainerSize(this@ComposeContainer.windowContainer.sizeInPx) // Sometimes Swing displays interop views in incorrect order after resizing, // so we need to force re-validate it. @@ -243,7 +244,11 @@ internal class ComposeContainer( private fun onChangeWindowSize() { if (!container.isDisplayable) return + // When the window is moved to a display with a different density, componentResized will + // be called on the window, but not on `windowContainer`, so we need to update the size here + // too. windowContext.setContainerSize(windowContainer.sizeInPx) + layers.fastForEach(DesktopComposeSceneLayer::onChangeWindowSize) }