From 6787cfc4e6a92a407223bfa4d52020e69b3a1eec Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Mon, 29 Jul 2024 13:53:24 +0300 Subject: [PATCH] GTW-7827 3Set Korean inputs are garbled GitOrigin-RevId: 487c051dc2f312bad8e127f1eb45cd52a2dbc74a --- .../bootstrap/src/com/intellij/idea/Main.kt | 4 ++-- platform/platform-api/api-dump-unreviewed.txt | 1 + .../intellij/ui/components/JBTextField.java | 8 ++++++++ .../com/intellij/util/ui/JBHtmlEditorKit.java | 14 +------------ .../ui/src/com/intellij/util/ui/UIUtil.java | 20 +++++++++++++++++++ 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/platform/bootstrap/src/com/intellij/idea/Main.kt b/platform/bootstrap/src/com/intellij/idea/Main.kt index bccc1324f1a8..08e7583bd421 100644 --- a/platform/bootstrap/src/com/intellij/idea/Main.kt +++ b/platform/bootstrap/src/com/intellij/idea/Main.kt @@ -23,7 +23,7 @@ import com.intellij.platform.ide.bootstrap.startApplication import com.intellij.platform.impl.toolkit.IdeFontManager import com.intellij.platform.impl.toolkit.IdeGraphicsEnvironment import com.intellij.platform.impl.toolkit.IdeToolkit -import com.intellij.util.ui.JBHtmlEditorKit +import com.intellij.util.ui.UIUtil import com.jetbrains.JBR import kotlinx.coroutines.* import org.jetbrains.annotations.ApiStatus.Internal @@ -217,7 +217,7 @@ private fun initLux() { @Suppress("SpellCheckingInspection") System.setProperty("sun.font.fontmanager", IdeFontManager::class.java.canonicalName) - JBHtmlEditorKit.DISABLE_TEXT_LAYOUT = true + UIUtil.DISABLE_LAYOUT_IN_TEXT_COMPONENTS = true } private fun addBootstrapTiming(name: String, startupTimings: MutableList) { diff --git a/platform/platform-api/api-dump-unreviewed.txt b/platform/platform-api/api-dump-unreviewed.txt index d6581fba676b..d397855969c2 100644 --- a/platform/platform-api/api-dump-unreviewed.txt +++ b/platform/platform-api/api-dump-unreviewed.txt @@ -8479,6 +8479,7 @@ c:com.intellij.ui.components.JBTextField - (I):V - (java.lang.String):V - (java.lang.String,I):V +- p:createDefaultModel():javax.swing.text.Document - getAccessibleContext():javax.accessibility.AccessibleContext - p:getComponentGraphics(java.awt.Graphics):java.awt.Graphics - getEmptyText():com.intellij.util.ui.StatusText diff --git a/platform/platform-api/src/com/intellij/ui/components/JBTextField.java b/platform/platform-api/src/com/intellij/ui/components/JBTextField.java index f73e708fe7a1..a5913ded667b 100644 --- a/platform/platform-api/src/com/intellij/ui/components/JBTextField.java +++ b/platform/platform-api/src/com/intellij/ui/components/JBTextField.java @@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull; import javax.accessibility.AccessibleContext; import javax.swing.*; import javax.swing.plaf.TextUI; +import javax.swing.text.Document; import java.awt.*; import java.awt.event.MouseEvent; import java.util.Objects; @@ -120,6 +121,13 @@ public class JBTextField extends JTextField implements ComponentWithEmptyText, T return accessibleContext; } + @Override + protected Document createDefaultModel() { + Document model = super.createDefaultModel(); + UIUtil.disableTextLayoutIfNeeded(model); + return model; + } + private class AccessibleJBTextField extends AccessibleJTextField { @Override public String getAccessibleDescription() { diff --git a/platform/util/ui/src/com/intellij/util/ui/JBHtmlEditorKit.java b/platform/util/ui/src/com/intellij/util/ui/JBHtmlEditorKit.java index e781ce34bf20..e50623e61d28 100644 --- a/platform/util/ui/src/com/intellij/util/ui/JBHtmlEditorKit.java +++ b/platform/util/ui/src/com/intellij/util/ui/JBHtmlEditorKit.java @@ -18,7 +18,6 @@ import java.awt.*; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Objects; @@ -28,10 +27,6 @@ import java.util.stream.StreamSupport; public class JBHtmlEditorKit extends HTMLEditorKit { private static final Logger LOG = Logger.getInstance(JBHtmlEditorKit.class); - @SuppressWarnings("StaticNonFinalField") - @ApiStatus.Internal - public static boolean DISABLE_TEXT_LAYOUT = false; - private final @NotNull ViewFactory myViewFactory; private final @NotNull StyleSheet myStyle; @@ -217,14 +212,7 @@ public class JBHtmlEditorKit extends HTMLEditorKit { private final class OurDocument extends HTMLDocument { private OurDocument(StyleSheet styles) { super(styles); - if (DISABLE_TEXT_LAYOUT) { - setDocumentProperties(new Hashtable<>(2) { - @Override - public synchronized Object get(Object key) { - return "i18n".equals(key) ? Boolean.FALSE : super.get(key); - } - }); - } + UIUtil.disableTextLayoutIfNeeded(this); } @Override diff --git a/platform/util/ui/src/com/intellij/util/ui/UIUtil.java b/platform/util/ui/src/com/intellij/util/ui/UIUtil.java index 2872c62dc836..16c45df8ff69 100644 --- a/platform/util/ui/src/com/intellij/util/ui/UIUtil.java +++ b/platform/util/ui/src/com/intellij/util/ui/UIUtil.java @@ -3346,4 +3346,24 @@ public final class UIUtil { GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); return gd.isFullScreenSupported(); } + + @SuppressWarnings("StaticNonFinalField") + @ApiStatus.Internal + public static boolean DISABLE_LAYOUT_IN_TEXT_COMPONENTS = false; + + /** + * Disables performing text layout for 'complex' text in the document, if configured globally. + * Should be called before the document is used for anything, i.e., right after construction. + */ + @ApiStatus.Internal + public static void disableTextLayoutIfNeeded(@NotNull Document document) { + if (DISABLE_LAYOUT_IN_TEXT_COMPONENTS && document instanceof AbstractDocument ad) { + ad.setDocumentProperties(new Hashtable<>(2) { + @Override + public synchronized Object get(Object key) { + return "i18n".equals(key) ? Boolean.FALSE : super.get(key); + } + }); + } + } }