diff --git a/src/main/java/org/cryptomator/ui/health/CheckListCellController.java b/src/main/java/org/cryptomator/ui/health/CheckListCellController.java index d3ec4b996..5ef2926ef 100644 --- a/src/main/java/org/cryptomator/ui/health/CheckListCellController.java +++ b/src/main/java/org/cryptomator/ui/health/CheckListCellController.java @@ -5,6 +5,7 @@ import org.cryptomator.ui.common.FxController; import javax.inject.Inject; import javafx.beans.binding.Binding; +import javafx.beans.binding.Bindings; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.scene.control.CheckBox; @@ -17,7 +18,7 @@ public class CheckListCellController implements FxController { private final Binding checkRunnable; /* FXML */ - public CheckBox forRunSelectedCheckBox; + public CheckBox checkbox; @Inject public CheckListCellController() { @@ -27,9 +28,12 @@ public class CheckListCellController implements FxController { } public void initialize() { - forRunSelectedCheckBox.selectedProperty().addListener((observable, wasSelected, isSelected) -> { - if (check.get() != null) { - check.get().chosenForExecutionProperty().set(isSelected); + check.addListener((observable, oldVal, newVal) -> { + if (oldVal != null) { + Bindings.unbindBidirectional(checkbox.selectedProperty(), oldVal.chosenForExecutionProperty()); + } + if (newVal != null) { + Bindings.bindBidirectional(checkbox.selectedProperty(), newVal.chosenForExecutionProperty()); } }); } diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java b/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java index b638ad889..8739be791 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/MountOptionsController.java @@ -27,6 +27,7 @@ import javafx.stage.DirectoryChooser; import javafx.stage.Stage; import javafx.util.StringConverter; import java.io.File; +import java.nio.file.InvalidPathException; import java.nio.file.Path; import java.util.ResourceBundle; import java.util.Set; @@ -94,7 +95,9 @@ public class MountOptionsController implements FxController { driveLetterSelection.setConverter(new WinDriveLetterLabelConverter(windowsDriveLetters, resourceBundle)); driveLetterSelection.setValue(vault.getVaultSettings().winDriveLetter().get()); - if (vault.getVaultSettings().useCustomMountPath().get() && !getRestrictToStableFuseOnWindows() /* to prevent invalid states */) { + if (vault.getVaultSettings().useCustomMountPath().get() + && vault.getVaultSettings().getCustomMountPath().isPresent() + && !getRestrictToStableFuseOnWindows() /* to prevent invalid states */) { mountPoint.selectToggle(mountPointCustomDir); } else if (!Strings.isNullOrEmpty(vault.getVaultSettings().winDriveLetter().get())) { mountPoint.selectToggle(mountPointWinDriveLetter); @@ -125,25 +128,30 @@ public class MountOptionsController implements FxController { } @FXML - private void chooseCustomMountPoint() { + public void chooseCustomMountPoint() { + chooseCustomMountPointOrReset(mountPointCustomDir); + } + + private void chooseCustomMountPointOrReset(Toggle previousMountToggle) { DirectoryChooser directoryChooser = new DirectoryChooser(); directoryChooser.setTitle(resourceBundle.getString("vaultOptions.mount.mountPoint.directoryPickerTitle")); try { - directoryChooser.setInitialDirectory(Path.of(System.getProperty("user.home")).toFile()); - } catch (Exception e) { - //NO-OP + var initialDir = vault.getVaultSettings().getCustomMountPath().orElse(System.getProperty("user.home")); + directoryChooser.setInitialDirectory(Path.of(initialDir).toFile()); + } catch (InvalidPathException e) { + // no-op } File file = directoryChooser.showDialog(window); if (file != null) { vault.getVaultSettings().customMountPath().set(file.getAbsolutePath()); } else { - vault.getVaultSettings().customMountPath().set(null); + mountPoint.selectToggle(previousMountToggle); } } - private void toggleMountPoint(@SuppressWarnings("unused") ObservableValue observable, @SuppressWarnings("unused") Toggle oldValue, Toggle newValue) { + private void toggleMountPoint(@SuppressWarnings("unused") ObservableValue observable, Toggle oldValue, Toggle newValue) { if (mountPointCustomDir.equals(newValue) && Strings.isNullOrEmpty(vault.getVaultSettings().customMountPath().get())) { - chooseCustomMountPoint(); + chooseCustomMountPointOrReset(oldValue); } } diff --git a/src/main/resources/fxml/health_check_list.fxml b/src/main/resources/fxml/health_check_list.fxml index d87062e59..1edb004df 100644 --- a/src/main/resources/fxml/health_check_list.fxml +++ b/src/main/resources/fxml/health_check_list.fxml @@ -3,14 +3,12 @@ - -