From 94a5adacd73f2debca7adea7ae2304dc3091b8b3 Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Thu, 1 Dec 2016 19:28:04 +0300 Subject: [PATCH] Don't get DataContext from focus owner when we should show popup over non-focusable component --- .../src/com/intellij/util/ui/SwingHelper.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java b/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java index 6ff2782bf344..2c7a0766894e 100644 --- a/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java +++ b/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java @@ -16,6 +16,7 @@ package com.intellij.util.ui; import com.intellij.ide.BrowserUtil; +import com.intellij.ide.IdeEventQueue; import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; @@ -65,6 +66,7 @@ import java.awt.*; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; import java.util.*; import java.util.List; @@ -779,4 +781,26 @@ public class SwingHelper { ); return pane; } + + @Nullable + public static Component getComponentFromRecentMouseEvent() { + AWTEvent event = IdeEventQueue.getInstance().getTrueCurrentEvent(); + if (event instanceof MouseEvent) { + MouseEvent mouseEvent = (MouseEvent)event; + Component component = mouseEvent.getComponent(); + if (component != null) { + component = SwingUtilities.getDeepestComponentAt(component, mouseEvent.getX(), mouseEvent.getY()); + if (component != null) { + if (component instanceof JTabbedPane) { + mouseEvent = SwingUtilities.convertMouseEvent(mouseEvent.getComponent(), mouseEvent, component); + JTabbedPane tabbedPane = (JTabbedPane)component; + int index = tabbedPane.getUI().tabForCoordinate(tabbedPane, mouseEvent.getX(), mouseEvent.getY()); + if (index != -1) return tabbedPane.getComponentAt(index); + } + return component; + } + } + } + return null; + } }