Explorar el Código

Simplified observation of visible stages

Sebastian Stenzel hace 4 años
padre
commit
3b73544766

+ 9 - 5
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<UiAppearanceProvider> appearanceProvider;
 	private final VaultService vaultService;
 	private final LicenseHolder licenseHolder;
-	private final BooleanBinding hasVisibleStages;
+	private final ObservableList<Window> visibleWindows;
+	private final BooleanBinding hasVisibleWindows;
 	private final UiAppearanceListener systemInterfaceThemeListener = this::systemInterfaceThemeChanged;
 
 	@Inject
-	FxApplication(Settings settings, Lazy<MainWindowComponent> mainWindow, Lazy<PreferencesComponent> preferencesWindow, Provider<UnlockComponent.Builder> unlockWindowBuilderProvider, Lazy<QuitComponent> quitWindow, Optional<TrayIntegrationProvider> trayIntegration, Optional<UiAppearanceProvider> appearanceProvider, VaultService vaultService, LicenseHolder licenseHolder, ObservableSet<Stage> visibleStages) {
+	FxApplication(Settings settings, Lazy<MainWindowComponent> mainWindow, Lazy<PreferencesComponent> preferencesWindow, Provider<UnlockComponent.Builder> unlockWindowBuilderProvider, Lazy<QuitComponent> quitWindow, Optional<TrayIntegrationProvider> trayIntegration, Optional<UiAppearanceProvider> 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<? extends Boolean> observableValue, @SuppressWarnings("unused") boolean oldValue, boolean newValue) {
+		LOG.warn("has visible stages: {}", newValue);
 		if (newValue) {
 			trayIntegration.ifPresent(TrayIntegrationProvider::restoredFromTray);
 		} else {

+ 1 - 15
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<Stage> provideVisibleStages() {
-		return FXCollections.observableSet();
-	}
-
 	@Provides
 	@Named("windowIcons")
 	@FxApplicationScoped
@@ -56,16 +49,9 @@ abstract class FxApplicationModule {
 
 	@Provides
 	@FxApplicationScoped
-	static StageFactory provideStageFactory(@Named("windowIcons") List<Image> windowIcons, ObservableSet<Stage> visibleStages) {
+	static StageFactory provideStageFactory(@Named("windowIcons") List<Image> windowIcons) {
 		return new StageFactory(stage -> {
 			stage.getIcons().addAll(windowIcons);
-			stage.showingProperty().addListener((observableValue, wasShowing, isShowing) -> {
-				if (isShowing) {
-					visibleStages.add(stage);
-				} else {
-					visibleStages.remove(stage);
-				}
-			});
 		});
 	}