diff --git a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java index 06527a2d8..5a296e1b4 100644 --- a/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java +++ b/app/src/main/java/io/xpipe/app/comp/store/StoreEntryComp.java @@ -87,6 +87,8 @@ public abstract class StoreEntryComp extends SimpleComp { @Override protected final Region createSimple() { var r = createContent(); + var buttonBar = r.lookup(".button-bar"); + var iconChooser = r.lookup(".icon"); var button = new Button(); button.setGraphic(r); @@ -103,7 +105,8 @@ public abstract class StoreEntryComp extends SimpleComp { }); }); button.addEventFilter(MouseEvent.MOUSE_CLICKED, event -> { - if (AppPrefs.get().requireDoubleClickForConnections().get()) { + var notOnButton = NodeHelper.isParent(iconChooser, event.getTarget()) || NodeHelper.isParent(buttonBar, event.getTarget()); + if (AppPrefs.get().requireDoubleClickForConnections().get() && !notOnButton) { if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() != 2) { event.consume(); } @@ -114,7 +117,8 @@ public abstract class StoreEntryComp extends SimpleComp { } }); button.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> { - if (AppPrefs.get().requireDoubleClickForConnections().get()) { + var notOnButton = NodeHelper.isParent(iconChooser, event.getTarget()) || NodeHelper.isParent(buttonBar, event.getTarget()); + if (AppPrefs.get().requireDoubleClickForConnections().get() && !notOnButton) { if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() != 2) { event.consume(); } diff --git a/app/src/main/java/io/xpipe/app/util/NodeHelper.java b/app/src/main/java/io/xpipe/app/util/NodeHelper.java new file mode 100644 index 000000000..4f7e2c736 --- /dev/null +++ b/app/src/main/java/io/xpipe/app/util/NodeHelper.java @@ -0,0 +1,34 @@ +package io.xpipe.app.util; + +import javafx.scene.Node; +import javafx.scene.Parent; + +import java.util.Set; + +public class NodeHelper { + + + public static boolean isParent(Set parent, Object child) { + return parent.stream().anyMatch(node -> isParent(node, child)); + } + + public static boolean isParent(Node parent, Object child) { + if (child == null) { + return false; + } + + if (!(child instanceof Node n)) { + return false; + } + + var c = n.getParent(); + while (c != null) { + if (c == parent) { + return true; + } + + c = c.getParent(); + } + return false; + } +}