From 1b92d0c1722eb2a79a37ffa1d4e0bdb4e311c6e9 Mon Sep 17 00:00:00 2001 From: Alexander Zolotov Date: Tue, 5 Nov 2013 16:27:43 +0400 Subject: [PATCH] WEB-9744 Surround with Emmet dialog usability problems --- .../template/emmet/ZenCodingTemplate.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java index 61c8ec71d776..236743c901a1 100644 --- a/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java +++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/ZenCodingTemplate.java @@ -28,6 +28,7 @@ import com.intellij.codeInsight.template.emmet.tokens.TextToken; import com.intellij.codeInsight.template.emmet.tokens.ZenCodingToken; import com.intellij.codeInsight.template.impl.TemplateImpl; import com.intellij.codeInsight.template.impl.TemplateState; +import com.intellij.ide.IdeEventQueue; import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; @@ -38,23 +39,23 @@ import com.intellij.openapi.ui.popup.Balloon; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.JBPopupListener; import com.intellij.openapi.ui.popup.LightweightWindowEvent; +import com.intellij.openapi.ui.popup.util.PopupUtil; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; -import com.intellij.ui.DocumentAdapter; -import com.intellij.ui.LightColors; -import com.intellij.ui.TextFieldWithHistory; -import com.intellij.ui.TextFieldWithStoredHistory; +import com.intellij.ui.*; import com.intellij.xml.XmlBundle; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.event.DocumentEvent; import java.awt.*; +import java.awt.event.ComponentEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -286,10 +287,10 @@ public class ZenCodingTemplate implements CustomLiveTemplate { field.setPreferredSize(new Dimension(Math.max(160, fieldPreferredSize.width), fieldPreferredSize.height)); field.setHistorySize(10); final JBPopupFactory popupFactory = JBPopupFactory.getInstance(); - final Balloon balloon = popupFactory.createDialogBalloonBuilder(field, XmlBundle.message("emmet.title")) + final BalloonImpl balloon = (BalloonImpl)popupFactory.createDialogBalloonBuilder(field, XmlBundle.message("emmet.title")) .setCloseButtonEnabled(false) + .setBlockClicksThroughBalloon(true) .setAnimationCycle(0) - .setHideOnClickOutside(true) .setHideOnKeyOutside(true) .createBalloon(); @@ -321,6 +322,20 @@ public class ZenCodingTemplate implements CustomLiveTemplate { } }); + IdeEventQueue.getInstance().addDispatcher(new IdeEventQueue.EventDispatcher() { + @Override + public boolean dispatch(AWTEvent e) { + if (e instanceof MouseEvent) { + if (e.getID() == MouseEvent.MOUSE_PRESSED) { + if (!balloon.isInsideBalloon((MouseEvent)e) && !PopupUtil.isComboPopupKeyEvent((ComponentEvent)e, field)) { + balloon.hide(); + } + } + } + return false; + } + }, balloon); + balloon.addListener(new JBPopupListener.Adapter() { @Override public void beforeShown(LightweightWindowEvent event) {