diff --git a/main/ui/src/main/java/org/cryptomator/ui/CryptomatorComponent.java b/main/ui/src/main/java/org/cryptomator/ui/CryptomatorComponent.java index fc0563b18..b32935193 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/CryptomatorComponent.java +++ b/main/ui/src/main/java/org/cryptomator/ui/CryptomatorComponent.java @@ -29,5 +29,5 @@ interface CryptomatorComponent { Localization localization(); - TrayIconUtil trayIconUtil(); + ExitUtil exitUtil(); } \ No newline at end of file diff --git a/main/ui/src/main/java/org/cryptomator/ui/TrayIconUtil.java b/main/ui/src/main/java/org/cryptomator/ui/ExitUtil.java similarity index 88% rename from main/ui/src/main/java/org/cryptomator/ui/TrayIconUtil.java rename to main/ui/src/main/java/org/cryptomator/ui/ExitUtil.java index eb56fb2e2..39cb090e3 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/TrayIconUtil.java +++ b/main/ui/src/main/java/org/cryptomator/ui/ExitUtil.java @@ -38,22 +38,41 @@ import javafx.application.Platform; import javafx.stage.Stage; @Singleton -class TrayIconUtil { +class ExitUtil { - private static final Logger LOG = LoggerFactory.getLogger(TrayIconUtil.class); + private static final Logger LOG = LoggerFactory.getLogger(ExitUtil.class); private final Stage mainWindow; private final Localization localization; private final Settings settings; @Inject - public TrayIconUtil(@Named("mainWindow") Stage mainWindow, Localization localization, Settings settings) { + public ExitUtil(@Named("mainWindow") Stage mainWindow, Localization localization, Settings settings) { this.mainWindow = mainWindow; this.localization = localization; this.settings = settings; } - public void initTrayIcon(Runnable exitCommand) { + public void initExitHandler(Runnable exitCommand) { + if (SystemUtils.IS_OS_LINUX) { + initMinimizeExitHandler(exitCommand); + } else { + initTrayIconExitHandler(exitCommand); + } + } + + private void initMinimizeExitHandler(Runnable exitCommand) { + mainWindow.setOnCloseRequest(e -> { + if (Platform.isImplicitExit()) { + exitCommand.run(); + } else { + mainWindow.setIconified(true); + e.consume(); + } + }); + } + + private void initTrayIconExitHandler(Runnable exitCommand) { final TrayIcon trayIcon = createTrayIcon(exitCommand); try { SystemTray.getSystemTray().add(trayIcon); diff --git a/main/ui/src/main/java/org/cryptomator/ui/MainApplication.java b/main/ui/src/main/java/org/cryptomator/ui/MainApplication.java index f87614344..ed01184b3 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/MainApplication.java +++ b/main/ui/src/main/java/org/cryptomator/ui/MainApplication.java @@ -67,7 +67,7 @@ public class MainApplication extends Application { // show window and start observing its focus: primaryStage.show(); ActiveWindowStyleSupport.startObservingFocus(primaryStage); - comp.trayIconUtil().initTrayIcon(this::quit); + comp.exitUtil().initExitHandler(this::quit); // open files, if requested during startup: for (String arg : getParameters().getUnnamed()) {