From 1329bdc92e63cb42a77893e46379d933c2d65567 Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Mon, 29 Jan 2018 17:35:16 +0300 Subject: [PATCH] fix popup position when invoked from list in main window --- .../intellij/ui/popup/PopupPositionManager.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ui/popup/PopupPositionManager.java b/platform/lang-impl/src/com/intellij/ui/popup/PopupPositionManager.java index 7d7c97ed337b..353e9632b4ff 100644 --- a/platform/lang-impl/src/com/intellij/ui/popup/PopupPositionManager.java +++ b/platform/lang-impl/src/com/intellij/ui/popup/PopupPositionManager.java @@ -24,14 +24,14 @@ import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.DataKey; import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.editor.impl.EditorComponentImpl; import com.intellij.openapi.ui.popup.JBPopup; +import com.intellij.openapi.ui.popup.util.PopupUtil; import com.intellij.openapi.util.DimensionService; import com.intellij.ui.ScreenUtil; import com.intellij.ui.awt.RelativePoint; -import com.intellij.ui.components.JBList; import org.jetbrains.annotations.Nullable; -import javax.swing.*; import java.awt.*; import java.util.ArrayList; import java.util.Collections; @@ -105,8 +105,9 @@ public class PopupPositionManager { final Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); if (focusOwner == null) return null; - if (focusOwner instanceof JBList) { - return new PositionAdjuster(SwingUtilities.getWindowAncestor(focusOwner)); + JBPopup popup = PopupUtil.getPopupContainerFor(focusOwner); + if (popup != null) { + return new PositionAdjuster(popup.getContent()); } final Component existing = discoverPopup(LangDataKeys.POSITION_ADJUSTER_POPUP, focusOwner); @@ -114,8 +115,10 @@ public class PopupPositionManager { return new PositionAdjuster2(existing, discoverPopup(LangDataKeys.PARENT_POPUP, focusOwner)); } - //final Window window = SwingUtilities.getWindowAncestor(focusOwner); - //return window == null ? null : new PositionAdjuster(window); + if (!(focusOwner instanceof EditorComponentImpl)) { + return new PositionAdjuster(focusOwner); + } + return null; }