From 0cd6cdc277614fd6d5f7a6dff4ef1178ce1156e9 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Wed, 20 Feb 2019 16:16:53 +0300 Subject: [PATCH] IDEA-207598: Show smart step into popup above the line --- .../intellij/xdebugger/impl/ui/DebuggerUIUtil.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java index 7ad2c4fe4977..27965f444b03 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerUIUtil.java @@ -27,6 +27,7 @@ import com.intellij.ui.ScreenUtil; import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.popup.list.ListPopupImpl; import com.intellij.util.Consumer; +import com.intellij.util.ui.UIUtil; import com.intellij.xdebugger.*; import com.intellij.xdebugger.breakpoints.XBreakpoint; import com.intellij.xdebugger.breakpoints.XBreakpointListener; @@ -110,6 +111,19 @@ public class DebuggerUIUtil { public static void showPopupForEditorLine(@NotNull JBPopup popup, @NotNull Editor editor, int line) { RelativePoint point = getPositionForPopup(editor, line); if (point != null) { + popup.addListener(new JBPopupAdapter() { + @Override + public void beforeShown(@NotNull LightweightWindowEvent event) { + Window window = UIUtil.getWindow(popup.getContent()); + if (window != null) { + Point actual = window.getLocation(); + Point expected = point.getScreenPoint(); + if (actual.y < expected.y) { + window.setLocation(actual.x, expected.y - window.getHeight() - editor.getLineHeight()); + } + } + } + }); popup.show(point); } else {