From 3b4f6276b5a4cbf6552bac88a27282760d7f40c0 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Tue, 30 Mar 2021 11:25:22 +0200 Subject: [PATCH] Improve selection model of list view: * Clear selection if an empty space is clicked * only open context menu if an item is selected --- .../ui/mainwindow/VaultListController.java | 15 +++++++++++++++ main/ui/src/main/resources/fxml/vault_list.fxml | 2 +- .../src/main/resources/fxml/vault_list_cell.fxml | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java index e52104547..274e35a6f 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/VaultListController.java @@ -25,6 +25,8 @@ import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.ListView; +import javafx.scene.input.ContextMenuEvent; +import javafx.scene.input.MouseEvent; import javafx.stage.Stage; import java.util.Arrays; import java.util.Optional; @@ -90,6 +92,19 @@ public class VaultListController implements FxController { } } }); + vaultList.addEventFilter(MouseEvent.MOUSE_RELEASED, this::deselect); + vaultList.addEventFilter(ContextMenuEvent.CONTEXT_MENU_REQUESTED, request -> { + if (selectedVault.get() == null) { + request.consume(); + } + }); + } + + private void deselect(MouseEvent released) { + if (released.getY() > (vaultList.getItems().size() * vaultList.fixedCellSizeProperty().get())) { + vaultList.getSelectionModel().clearSelection(); + released.consume(); + } } private void selectedVaultDidChange(@SuppressWarnings("unused") ObservableValue observableValue, @SuppressWarnings("unused") Vault oldValue, Vault newValue) { diff --git a/main/ui/src/main/resources/fxml/vault_list.fxml b/main/ui/src/main/resources/fxml/vault_list.fxml index e616a0e08..68d8b9fde 100644 --- a/main/ui/src/main/resources/fxml/vault_list.fxml +++ b/main/ui/src/main/resources/fxml/vault_list.fxml @@ -15,7 +15,7 @@ fx:controller="org.cryptomator.ui.mainwindow.VaultListController" minWidth="206"> - + diff --git a/main/ui/src/main/resources/fxml/vault_list_cell.fxml b/main/ui/src/main/resources/fxml/vault_list_cell.fxml index e86f084c1..ce8664639 100644 --- a/main/ui/src/main/resources/fxml/vault_list_cell.fxml +++ b/main/ui/src/main/resources/fxml/vault_list_cell.fxml @@ -13,6 +13,7 @@ prefWidth="200" spacing="12" alignment="CENTER_LEFT"> +