|
@@ -21,6 +21,7 @@ import java.awt.event.ActionEvent;
|
|
|
import java.awt.event.MouseAdapter;
|
|
|
import java.awt.event.MouseEvent;
|
|
|
import java.io.IOException;
|
|
|
+import java.util.Optional;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
import javax.inject.Inject;
|
|
@@ -32,6 +33,9 @@ import javax.script.ScriptException;
|
|
|
import javax.swing.SwingUtilities;
|
|
|
|
|
|
import org.apache.commons.lang3.SystemUtils;
|
|
|
+import org.cryptomator.jni.JniException;
|
|
|
+import org.cryptomator.jni.MacApplicationUiState;
|
|
|
+import org.cryptomator.jni.MacFunctions;
|
|
|
import org.cryptomator.ui.settings.Localization;
|
|
|
import org.cryptomator.ui.settings.Settings;
|
|
|
import org.slf4j.Logger;
|
|
@@ -48,12 +52,14 @@ class ExitUtil {
|
|
|
private final Stage mainWindow;
|
|
|
private final Localization localization;
|
|
|
private final Settings settings;
|
|
|
+ private final Optional<MacFunctions> macFunctions;
|
|
|
|
|
|
@Inject
|
|
|
- public ExitUtil(@Named("mainWindow") Stage mainWindow, Localization localization, Settings settings) {
|
|
|
+ public ExitUtil(@Named("mainWindow") Stage mainWindow, Localization localization, Settings settings, Optional<MacFunctions> macFunctions) {
|
|
|
this.mainWindow = mainWindow;
|
|
|
this.localization = localization;
|
|
|
this.settings = settings;
|
|
|
+ this.macFunctions = macFunctions;
|
|
|
}
|
|
|
|
|
|
public void initExitHandler(Runnable exitCommand) {
|
|
@@ -88,6 +94,7 @@ class ExitUtil {
|
|
|
if (Platform.isImplicitExit()) {
|
|
|
exitCommand.run();
|
|
|
} else {
|
|
|
+ macFunctions.map(MacFunctions::uiState).ifPresent(JniException.ignore(MacApplicationUiState::transformToAgentApplication));
|
|
|
mainWindow.close();
|
|
|
this.showTrayNotification(trayIcon);
|
|
|
}
|
|
@@ -189,6 +196,7 @@ class ExitUtil {
|
|
|
|
|
|
private void restoreFromTray(ActionEvent event) {
|
|
|
Platform.runLater(() -> {
|
|
|
+ macFunctions.map(MacFunctions::uiState).ifPresent(JniException.ignore(MacApplicationUiState::transformToForegroundApplication));
|
|
|
mainWindow.show();
|
|
|
mainWindow.requestFocus();
|
|
|
});
|