Don't get DataContext from focus owner when we should show popup over non-focusable component

This commit is contained in:
Vassiliy.Kudryashov
2016-12-01 19:34:41 +03:00
parent 00b4845ce7
commit 94a5adacd7
@@ -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;
}
}