diff --git a/platform/platform-api/src/com/intellij/ui/SearchTextField.java b/platform/platform-api/src/com/intellij/ui/SearchTextField.java index 5019f1c82e6e..5c391f4ddf26 100644 --- a/platform/platform-api/src/com/intellij/ui/SearchTextField.java +++ b/platform/platform-api/src/com/intellij/ui/SearchTextField.java @@ -29,10 +29,12 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.ui.components.JBList; import com.intellij.ui.components.JBTextField; +import com.intellij.util.Consumer; import com.intellij.util.ReflectionUtil; import com.intellij.util.ui.JBInsets; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -116,23 +118,8 @@ public class SearchTextField extends JPanel { @Override public void setUI(TextUI ui) { - if (SystemInfo.isMac) { - try { - Class uiClass = UIUtil.isUnderIntelliJLaF() ? Class.forName("com.intellij.ide.ui.laf.intellij.MacIntelliJTextFieldUI") - : Class.forName("com.intellij.ide.ui.laf.darcula.ui.DarculaTextFieldUI"); - Method method = ReflectionUtil.getMethod(uiClass, "createUI", JComponent.class); - if (method != null) { - super.setUI((TextUI)method.invoke(uiClass, this)); - Class borderClass = UIUtil.isUnderIntelliJLaF() ? Class.forName("com.intellij.ide.ui.laf.intellij.MacIntelliJTextBorder") - : Class.forName("com.intellij.ide.ui.laf.darcula.ui.DarculaTextBorder"); - setBorder((Border)ReflectionUtil.newInstance(borderClass)); - setOpaque(false); - } - return; - } - catch (Exception ignored) { - } - } + if (customSetupUIAndTextField(this, textUI -> super.setUI(textUI))) return; + super.setUI(ui); } }; @@ -301,6 +288,27 @@ public class SearchTextField extends JPanel { return UIUtil.isUnderGTKLookAndFeel(); } + protected boolean customSetupUIAndTextField(@NotNull TextFieldWithProcessing textField, @NotNull Consumer uiConsumer) { + if (SystemInfo.isMac) { + try { + Class uiClass = UIUtil.isUnderIntelliJLaF() ? Class.forName("com.intellij.ide.ui.laf.intellij.MacIntelliJTextFieldUI") + : Class.forName("com.intellij.ide.ui.laf.darcula.ui.DarculaTextFieldUI"); + Method method = ReflectionUtil.getMethod(uiClass, "createUI", JComponent.class); + if (method != null) { + uiConsumer.consume((TextUI)method.invoke(uiClass, textField)); + Class borderClass = UIUtil.isUnderIntelliJLaF() ? Class.forName("com.intellij.ide.ui.laf.intellij.MacIntelliJTextBorder") + : Class.forName("com.intellij.ide.ui.laf.darcula.ui.DarculaTextBorder"); + textField.setBorder((Border)ReflectionUtil.newInstance(borderClass)); + textField.setOpaque(false); + } + return true; + } + catch (Exception ignored) { + } + } + return false; + } + public void addDocumentListener(DocumentListener listener) { getTextEditor().getDocument().addDocumentListener(listener); } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/TextFieldWithPopupHandlerUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/TextFieldWithPopupHandlerUI.java index 13855ed8f885..1d75fb88b865 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/TextFieldWithPopupHandlerUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/TextFieldWithPopupHandlerUI.java @@ -495,7 +495,7 @@ public abstract class TextFieldWithPopupHandlerUI extends BasicTextFieldUI imple } } - private void addExtension(Extension extension) { + protected void addExtension(Extension extension) { icons.put(extension.toString(), new IconHolder(extension)); if (extension.isIconBeforeText()) { insets.left += extension.getPreferredSpace(); diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index 986bb054e080..cca979899b07 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -1408,4 +1408,11 @@ ext.project.data.serializer.description=select serialization format for external editor.keep.completion.hints.longer=false editor.keep.completion.hints.longer.description=Don't remove hints for parameter names added on method call completion until caret moves \ -to another line \ No newline at end of file +to another line + +run.anything.rake.tasks=true +run.anything.generators=true +run.anything.bundler.actions=true +run.anything.permanent.configurations=true +run.anything.temporary.configurations=true +run.anything.undefined.commands=true \ No newline at end of file