From f8c230f7f28a9ace91e6b4dfef4a6b8b47c1ca03 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Mon, 25 Apr 2016 16:44:14 +0300 Subject: [PATCH] do not add new watch if node is dragged to itself --- .../xdebugger/impl/frame/XWatchesViewImpl.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java index 88595f071501..3b3b658182d3 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java @@ -56,6 +56,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.TreePath; import java.awt.*; import java.awt.datatransfer.DataFlavor; import java.awt.event.*; @@ -402,6 +403,17 @@ public class XWatchesViewImpl extends XVariablesView implements DnDNativeTarget, boolean possible = false; if (object instanceof XValueNodeImpl[]) { possible = true; + // do not add new watch if node is dragged to itself + if (((XValueNodeImpl[])object).length == 1) { + Point point = aEvent.getPoint(); + XDebuggerTree tree = getTree(); + TreePath path = tree.getClosestPathForLocation(point.x, point.y); + if (path != null && path.getLastPathComponent() == ((XValueNodeImpl[])object)[0]) { + // the same item is under pointer, filter out place below the tree + Rectangle pathBounds = tree.getPathBounds(path); + possible = pathBounds != null && pathBounds.y + pathBounds.height < point.y; + } + } } else if (object instanceof EventInfo) { possible = ((EventInfo)object).getTextForFlavor(DataFlavor.stringFlavor) != null;