diff --git a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java index ca029f271..264fda2f9 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java +++ b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplication.java @@ -26,8 +26,9 @@ import javafx.application.Platform; import javafx.beans.binding.Bindings; import javafx.beans.binding.BooleanBinding; import javafx.beans.value.ObservableValue; -import javafx.collections.ObservableSet; +import javafx.collections.ObservableList; import javafx.stage.Stage; +import javafx.stage.Window; import java.awt.desktop.QuitResponse; import java.util.Optional; @@ -45,11 +46,12 @@ public class FxApplication extends Application { private final Optional appearanceProvider; private final VaultService vaultService; private final LicenseHolder licenseHolder; - private final BooleanBinding hasVisibleStages; + private final ObservableList visibleWindows; + private final BooleanBinding hasVisibleWindows; private final UiAppearanceListener systemInterfaceThemeListener = this::systemInterfaceThemeChanged; @Inject - FxApplication(Settings settings, Lazy mainWindow, Lazy preferencesWindow, Provider unlockWindowBuilderProvider, Lazy quitWindow, Optional trayIntegration, Optional appearanceProvider, VaultService vaultService, LicenseHolder licenseHolder, ObservableSet visibleStages) { + FxApplication(Settings settings, Lazy mainWindow, Lazy preferencesWindow, Provider unlockWindowBuilderProvider, Lazy quitWindow, Optional trayIntegration, Optional appearanceProvider, VaultService vaultService, LicenseHolder licenseHolder) { this.settings = settings; this.mainWindow = mainWindow; this.preferencesWindow = preferencesWindow; @@ -59,14 +61,15 @@ public class FxApplication extends Application { this.appearanceProvider = appearanceProvider; this.vaultService = vaultService; this.licenseHolder = licenseHolder; - this.hasVisibleStages = Bindings.isNotEmpty(visibleStages); + this.visibleWindows = Stage.getWindows().filtered(Window::isShowing); + this.hasVisibleWindows = Bindings.isNotEmpty(visibleWindows); } public void start() { LOG.trace("FxApplication.start()"); Platform.setImplicitExit(false); - hasVisibleStages.addListener(this::hasVisibleStagesChanged); + hasVisibleWindows.addListener(this::hasVisibleStagesChanged); settings.theme().addListener(this::appThemeChanged); loadSelectedStyleSheet(settings.theme().get()); @@ -78,6 +81,7 @@ public class FxApplication extends Application { } private void hasVisibleStagesChanged(@SuppressWarnings("unused") ObservableValue observableValue, @SuppressWarnings("unused") boolean oldValue, boolean newValue) { + LOG.warn("has visible stages: {}", newValue); if (newValue) { trayIntegration.ifPresent(TrayIntegrationProvider::restoredFromTray); } else { diff --git a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplicationModule.java b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplicationModule.java index 5b4e16ffb..066d1e271 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplicationModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/fxapp/FxApplicationModule.java @@ -18,7 +18,6 @@ import org.cryptomator.ui.unlock.UnlockComponent; import javax.inject.Named; import javafx.application.Application; -import javafx.collections.FXCollections; import javafx.collections.ObservableSet; import javafx.scene.image.Image; import javafx.stage.Stage; @@ -31,12 +30,6 @@ import java.util.List; @Module(includes = {UpdateCheckerModule.class}, subcomponents = {MainWindowComponent.class, PreferencesComponent.class, UnlockComponent.class, QuitComponent.class, ErrorComponent.class}) abstract class FxApplicationModule { - @Provides - @FxApplicationScoped - static ObservableSet provideVisibleStages() { - return FXCollections.observableSet(); - } - @Provides @Named("windowIcons") @FxApplicationScoped @@ -56,16 +49,9 @@ abstract class FxApplicationModule { @Provides @FxApplicationScoped - static StageFactory provideStageFactory(@Named("windowIcons") List windowIcons, ObservableSet visibleStages) { + static StageFactory provideStageFactory(@Named("windowIcons") List windowIcons) { return new StageFactory(stage -> { stage.getIcons().addAll(windowIcons); - stage.showingProperty().addListener((observableValue, wasShowing, isShowing) -> { - if (isShowing) { - visibleStages.add(stage); - } else { - visibleStages.remove(stage); - } - }); }); }