diff --git a/main/ui/src/main/java/org/cryptomator/ui/controls/FontAwesome5Icon.java b/main/ui/src/main/java/org/cryptomator/ui/controls/FontAwesome5Icon.java index 530123412..97d20ecdb 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/controls/FontAwesome5Icon.java +++ b/main/ui/src/main/java/org/cryptomator/ui/controls/FontAwesome5Icon.java @@ -33,6 +33,7 @@ public enum FontAwesome5Icon { SYNC("\uF021"), // TIMES("\uF00D"), // WRENCH("\uF0AD"), // + WINDOW_MINIMIZE("\uF2D1"), // ; private final String unicode; diff --git a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java index 49bd905f5..009a0a6af 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/mainwindow/MainWindowTitleController.java @@ -16,6 +16,8 @@ import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Named; +import java.awt.desktop.QuitResponse; +import java.util.concurrent.CountDownLatch; @MainWindowScoped public class MainWindowTitleController implements FxController { @@ -26,6 +28,7 @@ public class MainWindowTitleController implements FxController { private final Stage window; private final FxApplication application; + private final CountDownLatch shutdownLatch; private final boolean minimizeToSysTray; private final UpdateChecker updateChecker; private final BooleanBinding updateAvailable; @@ -35,9 +38,10 @@ public class MainWindowTitleController implements FxController { private double yOffset; @Inject - MainWindowTitleController(@MainWindow Stage window, FxApplication application, @Named("trayMenuSupported") boolean minimizeToSysTray, UpdateChecker updateChecker, LicenseHolder licenseHolder) { + MainWindowTitleController(@MainWindow Stage window, FxApplication application, @Named("shutdownLatch") CountDownLatch shutdownLatch, @Named("trayMenuSupported") boolean minimizeToSysTray, UpdateChecker updateChecker, LicenseHolder licenseHolder) { this.window = window; this.application = application; + this.shutdownLatch = shutdownLatch; this.minimizeToSysTray = minimizeToSysTray; this.updateChecker = updateChecker; this.updateAvailable = updateChecker.latestVersionProperty().isNotNull(); @@ -63,10 +67,29 @@ public class MainWindowTitleController implements FxController { if (minimizeToSysTray) { window.close(); } else { - window.setIconified(true); + quitApplication(); } } + private void quitApplication() { + application.showQuitWindow(new QuitResponse() { + @Override + public void performQuit() { + shutdownLatch.countDown(); + } + + @Override + public void cancelQuit() { + // no-op + } + }); + } + + @FXML + public void minimize() { + window.setIconified(true); + } + @FXML public void showPreferences() { application.showPreferencesWindow(SelectedPreferencesTab.ANY); @@ -91,5 +114,7 @@ public class MainWindowTitleController implements FxController { return updateAvailable.get(); } - + public boolean isMinimizeToSysTray() { + return minimizeToSysTray; + } } diff --git a/main/ui/src/main/resources/fxml/main_window_title.fxml b/main/ui/src/main/resources/fxml/main_window_title.fxml index 3765146bd..968f706bc 100644 --- a/main/ui/src/main/resources/fxml/main_window_title.fxml +++ b/main/ui/src/main/resources/fxml/main_window_title.fxml @@ -43,6 +43,14 @@ +