diff --git a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java index 4771b1719..2d4de0273 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/addvaultwizard/AddVaultModule.java @@ -9,6 +9,7 @@ import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.scene.Scene; +import javafx.scene.image.Image; import javafx.stage.Modality; import javafx.stage.Stage; import javafx.stage.StageStyle; @@ -19,9 +20,11 @@ import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; import org.cryptomator.ui.mainwindow.MainWindow; +import javax.inject.Named; import javax.inject.Provider; import java.nio.file.Path; import java.util.Map; +import java.util.Optional; import java.util.ResourceBundle; @Module @@ -37,13 +40,14 @@ public abstract class AddVaultModule { @Provides @AddVaultWizard @AddVaultWizardScoped - static Stage provideStage(@MainWindow Stage owner, ResourceBundle resourceBundle) { + static Stage provideStage(@MainWindow Stage owner, ResourceBundle resourceBundle, @Named("windowIcon") Optional windowIcon) { Stage stage = new Stage(); stage.setTitle(resourceBundle.getString("addvaultwizard.title")); stage.setResizable(false); stage.initStyle(StageStyle.DECORATED); stage.initModality(Modality.WINDOW_MODAL); stage.initOwner(owner); + windowIcon.ifPresent(stage.getIcons()::add); return stage; } diff --git a/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordModule.java b/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordModule.java index 87d58f5ff..4f8ef2a02 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/changepassword/ChangePasswordModule.java @@ -5,6 +5,7 @@ import dagger.Module; import dagger.Provides; import dagger.multibindings.IntoMap; import javafx.scene.Scene; +import javafx.scene.image.Image; import javafx.stage.Modality; import javafx.stage.Stage; import org.cryptomator.ui.common.FXMLLoaderFactory; @@ -13,8 +14,10 @@ import org.cryptomator.ui.common.FxControllerKey; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; +import javax.inject.Named; import javax.inject.Provider; import java.util.Map; +import java.util.Optional; import java.util.ResourceBundle; @Module @@ -30,11 +33,12 @@ abstract class ChangePasswordModule { @Provides @ChangePasswordWindow @ChangePasswordScoped - static Stage provideStage(ResourceBundle resourceBundle) { + static Stage provideStage(ResourceBundle resourceBundle, @Named("windowIcon") Optional windowIcon) { Stage stage = new Stage(); stage.setTitle(resourceBundle.getString("changepassword.title")); stage.setResizable(false); stage.initModality(Modality.APPLICATION_MODAL); + windowIcon.ifPresent(stage.getIcons()::add); return stage; } 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 447503ecb..a1f0d2509 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 @@ -11,6 +11,8 @@ import dagger.Provides; import javafx.application.Application; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; +import javafx.scene.image.Image; +import org.apache.commons.lang3.SystemUtils; import org.cryptomator.common.vaults.Vault; import org.cryptomator.keychain.KeychainModule; import org.cryptomator.ui.mainwindow.MainWindowComponent; @@ -18,6 +20,11 @@ import org.cryptomator.ui.preferences.PreferencesComponent; import org.cryptomator.ui.quit.QuitComponent; import org.cryptomator.ui.unlock.UnlockComponent; +import javax.inject.Named; +import java.io.IOException; +import java.io.InputStream; +import java.io.UncheckedIOException; +import java.util.Optional; import java.util.ResourceBundle; @Module(includes = {KeychainModule.class, UpdateCheckerModule.class}, subcomponents = {MainWindowComponent.class, PreferencesComponent.class, UnlockComponent.class, QuitComponent.class}) @@ -39,6 +46,20 @@ abstract class FxApplicationModule { return ResourceBundle.getBundle("i18n.strings"); } + @Provides + @Named("windowIcon") + @FxApplicationScoped + static Optional provideWindowIcon() { + if (SystemUtils.IS_OS_MAC) { + return Optional.empty(); + } + try (InputStream in = FxApplicationModule.class.getResourceAsStream("/window_icon_32.png")) { // TODO: use some higher res depending on display? + return Optional.of(new Image(in)); + } catch (IOException e) { + return Optional.empty(); + } + } + @Provides static MainWindowComponent provideMainWindowComponent(MainWindowComponent.Builder builder) { return builder.build(); diff --git a/main/ui/src/main/java/org/cryptomator/ui/preferences/PreferencesModule.java b/main/ui/src/main/java/org/cryptomator/ui/preferences/PreferencesModule.java index a2e175b89..44913e8f4 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/preferences/PreferencesModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/preferences/PreferencesModule.java @@ -5,6 +5,7 @@ import dagger.Module; import dagger.Provides; import dagger.multibindings.IntoMap; import javafx.scene.Scene; +import javafx.scene.image.Image; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCodeCombination; import javafx.scene.input.KeyCombination; @@ -15,8 +16,10 @@ import org.cryptomator.ui.common.FxControllerKey; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; +import javax.inject.Named; import javax.inject.Provider; import java.util.Map; +import java.util.Optional; import java.util.ResourceBundle; @Module @@ -32,10 +35,11 @@ abstract class PreferencesModule { @Provides @PreferencesWindow @PreferencesScoped - static Stage provideStage(ResourceBundle resourceBundle) { + static Stage provideStage(ResourceBundle resourceBundle, @Named("windowIcon") Optional windowIcon) { Stage stage = new Stage(); stage.setTitle(resourceBundle.getString("preferences.title")); stage.setResizable(false); + windowIcon.ifPresent(stage.getIcons()::add); return stage; } diff --git a/main/ui/src/main/java/org/cryptomator/ui/quit/QuitModule.java b/main/ui/src/main/java/org/cryptomator/ui/quit/QuitModule.java index b61d5b572..d48778df7 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/quit/QuitModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/quit/QuitModule.java @@ -5,6 +5,7 @@ import dagger.Module; import dagger.Provides; import dagger.multibindings.IntoMap; import javafx.scene.Scene; +import javafx.scene.image.Image; import javafx.stage.Modality; import javafx.stage.Stage; import org.cryptomator.ui.common.FXMLLoaderFactory; @@ -14,8 +15,10 @@ import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; import org.cryptomator.ui.unlock.UnlockController; +import javax.inject.Named; import javax.inject.Provider; import java.util.Map; +import java.util.Optional; import java.util.ResourceBundle; @Module @@ -31,11 +34,12 @@ abstract class QuitModule { @Provides @QuitWindow @QuitScoped - static Stage provideStage() { + static Stage provideStage(@Named("windowIcon") Optional windowIcon) { Stage stage = new Stage(); stage.setMinWidth(300); stage.setMinHeight(200); stage.initModality(Modality.APPLICATION_MODAL); + windowIcon.ifPresent(stage.getIcons()::add); return stage; } diff --git a/main/ui/src/main/java/org/cryptomator/ui/removevault/RemoveVaultModule.java b/main/ui/src/main/java/org/cryptomator/ui/removevault/RemoveVaultModule.java index a20ca3f4a..f2a380a07 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/removevault/RemoveVaultModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/removevault/RemoveVaultModule.java @@ -5,6 +5,7 @@ import dagger.Module; import dagger.Provides; import dagger.multibindings.IntoMap; import javafx.scene.Scene; +import javafx.scene.image.Image; import javafx.stage.Modality; import javafx.stage.Stage; import org.cryptomator.ui.common.FXMLLoaderFactory; @@ -13,8 +14,10 @@ import org.cryptomator.ui.common.FxControllerKey; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; +import javax.inject.Named; import javax.inject.Provider; import java.util.Map; +import java.util.Optional; import java.util.ResourceBundle; @Module @@ -30,11 +33,12 @@ abstract class RemoveVaultModule { @Provides @RemoveVault @RemoveVaultScoped - static Stage provideStage(ResourceBundle resourceBundle) { + static Stage provideStage(ResourceBundle resourceBundle, @Named("windowIcon") Optional windowIcon) { Stage stage = new Stage(); stage.setTitle(resourceBundle.getString("removeVault.title")); stage.setResizable(false); stage.initModality(Modality.APPLICATION_MODAL); + windowIcon.ifPresent(stage.getIcons()::add); return stage; } diff --git a/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockModule.java b/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockModule.java index 9ababa915..12673d03b 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/unlock/UnlockModule.java @@ -5,6 +5,7 @@ import dagger.Module; import dagger.Provides; import dagger.multibindings.IntoMap; import javafx.scene.Scene; +import javafx.scene.image.Image; import javafx.stage.Modality; import javafx.stage.Stage; import org.cryptomator.ui.common.FXMLLoaderFactory; @@ -13,8 +14,10 @@ import org.cryptomator.ui.common.FxControllerKey; import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; +import javax.inject.Named; import javax.inject.Provider; import java.util.Map; +import java.util.Optional; import java.util.ResourceBundle; @Module @@ -30,11 +33,12 @@ abstract class UnlockModule { @Provides @UnlockWindow @UnlockScoped - static Stage provideStage(ResourceBundle resourceBundle) { + static Stage provideStage(ResourceBundle resourceBundle, @Named("windowIcon") Optional windowIcon) { Stage stage = new Stage(); stage.setTitle(resourceBundle.getString("unlock.title")); stage.setResizable(false); stage.initModality(Modality.APPLICATION_MODAL); + windowIcon.ifPresent(stage.getIcons()::add); return stage; }