From 78bec84a7e9bf70e57036c474abf7dbcb66401fc Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Thu, 7 May 2015 18:07:41 +0300 Subject: [PATCH] IDEA-139975 Quicksearch input doesn't change its position when window is resized --- .../src/com/intellij/ui/SpeedSearchBase.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java b/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java index 51fa97249359..754c6219b11d 100644 --- a/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java +++ b/platform/platform-impl/src/com/intellij/ui/SpeedSearchBase.java @@ -46,10 +46,7 @@ import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; import java.awt.*; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; +import java.awt.event.*; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.ListIterator; @@ -72,6 +69,22 @@ public abstract class SpeedSearchBase extends SpeedSear public SpeedSearchBase(Comp component) { myComponent = component; + myComponent.addComponentListener(new ComponentAdapter() { + @Override + public void componentHidden(ComponentEvent event) { + manageSearchPopup(null); + } + + @Override + public void componentMoved(ComponentEvent event) { + moveSearchPopup(); + } + + @Override + public void componentResized(ComponentEvent event) { + moveSearchPopup(); + } + }); myComponent.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { @@ -568,7 +581,11 @@ public abstract class SpeedSearchBase extends SpeedSear return; } myPopupLayeredPane.add(mySearchPopup, JLayeredPane.POPUP_LAYER); - if (myPopupLayeredPane == null) return; // See # 27482. Somewho it does happen... + moveSearchPopup(); + } + + private void moveSearchPopup() { + if (myComponent == null || mySearchPopup == null || myPopupLayeredPane == null) return; Point lPaneP = myPopupLayeredPane.getLocationOnScreen(); Point componentP = getComponentLocationOnScreen(); Rectangle r = getComponentVisibleRect();