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 @@
+