From 92f91e1d476aeb3f7d59bac44eeb956d0299857b Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Sun, 24 Mar 2024 20:51:58 +0100 Subject: [PATCH] IJPL-846 create an editor window in bulk mode - no need to repaint (as it will be called on editor creation) GitOrigin-RevId: 5e9a77846b04626a2da2db9878f9b9e81d4ffc4b --- .../fileEditor/impl/EditorTabbedContainer.kt | 2 +- .../fileEditor/impl/EditorsSplitters.kt | 21 ++++++++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.kt b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.kt index 7bf2299d178a..dd35080e06c5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.kt +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorTabbedContainer.kt @@ -680,7 +680,7 @@ private class EditorTabs( override fun revalidateAndRepaint(layoutNow: Boolean) { // called from super constructor @Suppress("SENSELESS_COMPARISON") - if (window == null || !window.owner.isInsideChange) { + if (window != null && !window.owner.isInsideChange) { super.revalidateAndRepaint(layoutNow) } } diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.kt b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.kt index 7fb8405b6d22..746ee277fe09 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.kt +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorsSplitters.kt @@ -905,14 +905,21 @@ private class UiBuilder(private val splitters: EditorsSplitters) { requestFocus: Boolean) { coroutineScope { val windowDeferred = async(Dispatchers.EDT) { - val editorWindow = EditorWindow(owner = splitters, splitters.coroutineScope.childScope(CoroutineName("EditorWindow"))) - splitters.addWindow(editorWindow) - editorWindow.component.isFocusable = false - if (tabSizeLimit != 1) { - editorWindow.tabbedPane.component.putClientProperty(JBTabsImpl.SIDE_TABS_SIZE_LIMIT_KEY, tabSizeLimit) + splitters.insideChange++ + try { + val editorWindow = EditorWindow(owner = splitters, splitters.coroutineScope.childScope(CoroutineName("EditorWindow"))) + splitters.addWindow(editorWindow) + editorWindow.component.isFocusable = false + if (tabSizeLimit != 1) { + editorWindow.tabbedPane.component.putClientProperty(JBTabsImpl.SIDE_TABS_SIZE_LIMIT_KEY, tabSizeLimit) + } + addChild(editorWindow.component) + editorWindow + } + finally { + // do not call `validate` - will be called on editor `add` in any case + splitters.insideChange-- } - addChild(editorWindow.component) - editorWindow } val fileEditorManager = splitters.manager