From 3582ea752d663befdf6772dfd56795e2975646e8 Mon Sep 17 00:00:00 2001 From: Cormac Redmond Date: Mon, 24 Jul 2023 11:39:56 +0100 Subject: [PATCH] Fixing bug introduced in https://github.com/JabRef/jabref/pull/9728 which undid/broke this improvement: https://github.com/JabRef/jabref/pull/8785. Now, once again, the mouse click is handled and consumed at the capture stage if the expansion pane is licked, therefore preventing the node from being selected. --- .../java/org/jabref/gui/groups/GroupTreeView.java | 2 +- .../gui/util/ViewModelTreeTableRowFactory.java | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jabref/gui/groups/GroupTreeView.java b/src/main/java/org/jabref/gui/groups/GroupTreeView.java index 81c7327aa721..fc236c43bf63 100644 --- a/src/main/java/org/jabref/gui/groups/GroupTreeView.java +++ b/src/main/java/org/jabref/gui/groups/GroupTreeView.java @@ -230,7 +230,7 @@ private void initialize() { event.consume(); } } - }) + }, true) .withCustomInitializer(row -> { // Remove disclosure node since we display custom version in separate column // Simply setting to null is not enough since it would be replaced by the default node on every change diff --git a/src/main/java/org/jabref/gui/util/ViewModelTreeTableRowFactory.java b/src/main/java/org/jabref/gui/util/ViewModelTreeTableRowFactory.java index cae8d1c353cd..3319ce482f5e 100644 --- a/src/main/java/org/jabref/gui/util/ViewModelTreeTableRowFactory.java +++ b/src/main/java/org/jabref/gui/util/ViewModelTreeTableRowFactory.java @@ -27,6 +27,10 @@ public class ViewModelTreeTableRowFactory implements Callback, TreeTableRow> { private BiConsumer onMouseClickedEvent; + + // True if listener should be at filter stage, otherwise use default Node method + private boolean onMousePressedEventCapturePhase; + private BiConsumer onMousePressedEvent; private Consumer> toCustomInitializer; private Function contextMenuFactory; @@ -44,7 +48,12 @@ public ViewModelTreeTableRowFactory withOnMouseClickedEvent(BiConsumer withOnMousePressedEvent(BiConsumer event) { + return withOnMousePressedEvent(event, false); + } + + public ViewModelTreeTableRowFactory withOnMousePressedEvent(BiConsumer event, boolean capturePhase) { this.onMousePressedEvent = event; + this.onMousePressedEventCapturePhase = capturePhase; return this; } @@ -165,7 +174,11 @@ protected void updateItem(S row, boolean empty) { } if (onMousePressedEvent != null) { - setOnMousePressed(event -> onMousePressedEvent.accept(getItem(), event)); + if (onMousePressedEventCapturePhase) { + addEventFilter(MouseEvent.MOUSE_PRESSED, event -> onMousePressedEvent.accept(getItem(), event)); + } else { + setOnMousePressed(event -> onMousePressedEvent.accept(getItem(), event)); + } } if (toCustomInitializer != null) {