From 843b29ab9af60b8b362c7aff42ebdf977c83fc4a Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sun, 12 Feb 2023 20:23:01 +0100 Subject: [PATCH] macos: set dock icon #29, #86 --- src/main/java/de/bixilon/minosoft/Minosoft.kt | 5 ++++ .../gui/eros/util/JavaFXInitializer.kt | 4 +++- .../de/bixilon/minosoft/util/DesktopUtil.kt | 24 +++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/bixilon/minosoft/Minosoft.kt b/src/main/java/de/bixilon/minosoft/Minosoft.kt index 2b6aa3e41..ec86df072 100644 --- a/src/main/java/de/bixilon/minosoft/Minosoft.kt +++ b/src/main/java/de/bixilon/minosoft/Minosoft.kt @@ -53,6 +53,7 @@ import de.bixilon.minosoft.terminal.AutoConnect import de.bixilon.minosoft.terminal.CommandLineArguments import de.bixilon.minosoft.terminal.RunConfiguration import de.bixilon.minosoft.terminal.cli.CLI +import de.bixilon.minosoft.util.DesktopUtil import de.bixilon.minosoft.util.KUtil import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels @@ -111,6 +112,10 @@ object Minosoft { Eros::class.java.forceInit() } + if (RunConfiguration.DISABLE_EROS && !RunConfiguration.DISABLE_RENDERING) { + // eros is disabled, but rendering not, force initialize the desktop, otherwise eros will do so + DefaultThreadPool += { DesktopUtil.initialize() } + } taskWorker += WorkerTask(identifier = BootTasks.YGGDRASIL, executor = { YggdrasilUtil.load() }) taskWorker += WorkerTask(identifier = BootTasks.ASSETS_OVERRIDE, executor = { OVERRIDE_ASSETS_MANAGER.load(it) }) diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/util/JavaFXInitializer.kt b/src/main/java/de/bixilon/minosoft/gui/eros/util/JavaFXInitializer.kt index 79fe35ace..105e373fc 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/util/JavaFXInitializer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/util/JavaFXInitializer.kt @@ -20,6 +20,7 @@ import de.bixilon.kutil.latch.CountUpAndDownLatch import de.bixilon.kutil.shutdown.ShutdownManager import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash +import de.bixilon.minosoft.util.DesktopUtil import de.bixilon.minosoft.util.KUtil.toResourceLocation import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels @@ -37,8 +38,9 @@ class JavaFXInitializer internal constructor() : Application() { JavaFXUtil.JAVA_FX_THREAD = Thread.currentThread() JavaFXUtil.HOST_SERVICES = hostServices val worker = UnconditionalWorker() - worker += { JavaFXUtil.MINOSOFT_LOGO = Image(Minosoft.MINOSOFT_ASSETS_MANAGER["minosoft:textures/icons/window_icon.png".toResourceLocation()]) } + worker += { JavaFXUtil.MINOSOFT_LOGO = Image(Minosoft.MINOSOFT_ASSETS_MANAGER[DesktopUtil.ICON]) } worker += { catchAll { JavaFXUtil.BIXILON_LOGO = SvgLoader().loadSvg(Minosoft.MINOSOFT_ASSETS_MANAGER["minosoft:textures/icons/bixilon_logo.svg".toResourceLocation()]) } } + worker += { DesktopUtil.initialize() } worker.work(LATCH) diff --git a/src/main/java/de/bixilon/minosoft/util/DesktopUtil.kt b/src/main/java/de/bixilon/minosoft/util/DesktopUtil.kt index ddb94c5ea..932e060b8 100644 --- a/src/main/java/de/bixilon/minosoft/util/DesktopUtil.kt +++ b/src/main/java/de/bixilon/minosoft/util/DesktopUtil.kt @@ -13,16 +13,23 @@ package de.bixilon.minosoft.util +import de.bixilon.minosoft.Minosoft +import de.bixilon.minosoft.data.registries.identified.Namespaces.minosoft import de.bixilon.minosoft.gui.eros.util.JavaFXUtil +import de.bixilon.minosoft.gui.rendering.textures.TextureUtil.texture import de.bixilon.minosoft.terminal.RunConfiguration import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType +import java.awt.Taskbar +import java.awt.Toolkit import java.io.File import java.net.URL import java.nio.file.Path + object DesktopUtil { + val ICON = minosoft("icons/window_icon").texture() fun openURL(url: URL) { if (RunConfiguration.DISABLE_EROS) { @@ -57,4 +64,21 @@ object DesktopUtil { exception.printStackTrace() } } + + private fun Taskbar.setDockIcon() { + iconImage = Toolkit.getDefaultToolkit().createImage(Minosoft.MINOSOFT_ASSETS_MANAGER[ICON].readAllBytes()) + } + + private fun Taskbar.initialize() { + if (isSupported(Taskbar.Feature.ICON_IMAGE)) { + setDockIcon() + } + } + + fun initialize() { + System.setProperty("java.awt.headless", true.toString()) + if (Taskbar.isTaskbarSupported()) { + Taskbar.getTaskbar().initialize() + } + } }