From 161fa8443a94e44207660192d1952a739354418e Mon Sep 17 00:00:00 2001 From: Alexander Maryanovsky Date: Tue, 30 Apr 2024 18:03:07 +0300 Subject: [PATCH] Update `WindowInfo.containerSize` on both window and container resizes. --- .../androidx/compose/ui/scene/ComposeContainer.desktop.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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) }