From 53ad89f4b8d23dc1a95ebab5da3fedd47df021dc Mon Sep 17 00:00:00 2001 From: Mike Lei Date: Sat, 4 Jul 2026 06:47:57 +0800 Subject: [PATCH] fix(build): fix missing icon in the dock/dash of Linux DEs The missing `StartupWMClass` property in the .desktop file is causing the app icon not displaying on the dock/dash of Linux desktop environments. --- HMCL/build.gradle.kts | 1 + .../java/org/jackhuang/hmcl/gradle/pack/CreateDeb.java | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/HMCL/build.gradle.kts b/HMCL/build.gradle.kts index 623496c1793..3c459fea1fe 100644 --- a/HMCL/build.gradle.kts +++ b/HMCL/build.gradle.kts @@ -299,6 +299,7 @@ val makeDeb by tasks.registering(CreateDeb::class) { version.set(project.version.toString()) releaseType.set(debChannel) + launcherClassName.set("org.jackhuang.hmcl.Launcher") appShFile.set(layout.file(provider { artifactFile("sh") })) iconFile.set(layout.projectDirectory.file("image/hmcl.png")) outputFile.set(debFile) diff --git a/buildSrc/src/main/java/org/jackhuang/hmcl/gradle/pack/CreateDeb.java b/buildSrc/src/main/java/org/jackhuang/hmcl/gradle/pack/CreateDeb.java index c2c2e151ba0..0c1b857c001 100644 --- a/buildSrc/src/main/java/org/jackhuang/hmcl/gradle/pack/CreateDeb.java +++ b/buildSrc/src/main/java/org/jackhuang/hmcl/gradle/pack/CreateDeb.java @@ -76,6 +76,10 @@ public abstract class CreateDeb extends DefaultTask { @Input public abstract Property getReleaseType(); + /// Launcher class name for Linux StartupWMClass property in the .desktop file. + @Input + public abstract Property getLauncherClassName(); + /// Executable `.sh` artifact produced by `makeExecutables`. @InputFile public abstract RegularFileProperty getAppShFile(); @@ -295,6 +299,7 @@ private String getDesktopInfo() { StartupNotify=false Categories=Game; Keywords=mc;minecraft; - """.formatted(getCurrentType().getDisplayName(), getLauncherPath(), getIconTargetPath()); + StartupWMClass=%s + """.formatted(getCurrentType().getDisplayName(), getLauncherPath(), getIconTargetPath(), getLauncherClassName().get()); } }