From 8bc5856b8c19efb130aef4a1243f1a82f54a88bb Mon Sep 17 00:00:00 2001 From: Damien Degois Date: Fri, 21 Oct 2022 20:55:11 +0200 Subject: [PATCH] Fix AppImage windows not showing the application icon (#6444) Signed-off-by: Damien Degois Signed-off-by: Damien Degois --- ...ormation.global-override-for-injectable.ts | 1 + .../application-information.injectable.ts | 6 ++--- .../create-electron-window.injectable.ts | 27 +++++++++++++++++++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/common/vars/application-information.global-override-for-injectable.ts b/src/common/vars/application-information.global-override-for-injectable.ts index ac53b9f341..232a189ce1 100644 --- a/src/common/vars/application-information.global-override-for-injectable.ts +++ b/src/common/vars/application-information.global-override-for-injectable.ts @@ -7,6 +7,7 @@ import { getGlobalOverride } from "../test-utils/get-global-override"; import applicationInformationInjectable from "./application-information.injectable"; export default getGlobalOverride(applicationInformationInjectable, () => ({ + name: "some-product-name", productName: "some-product-name", version: "6.0.0", build: {}, diff --git a/src/common/vars/application-information.injectable.ts b/src/common/vars/application-information.injectable.ts index 559b15294b..56dfcf9d7e 100644 --- a/src/common/vars/application-information.injectable.ts +++ b/src/common/vars/application-information.injectable.ts @@ -5,16 +5,16 @@ import { getInjectable } from "@ogre-tools/injectable"; import packageJson from "../../../package.json"; -export type ApplicationInformation = Pick & { +export type ApplicationInformation = Pick & { build: Partial & { publish?: unknown[] }; }; const applicationInformationInjectable = getInjectable({ id: "application-information", instantiate: (): ApplicationInformation => { - const { version, config, productName, build, copyright, description } = packageJson; + const { version, config, productName, build, copyright, description, name } = packageJson; - return { version, config, productName, build, copyright, description }; + return { version, config, productName, build, copyright, description, name }; }, causesSideEffects: true, }); diff --git a/src/main/start-main-application/lens-window/application-window/create-electron-window.injectable.ts b/src/main/start-main-application/lens-window/application-window/create-electron-window.injectable.ts index 07f9b8fb7e..5e44c9d3ad 100644 --- a/src/main/start-main-application/lens-window/application-window/create-electron-window.injectable.ts +++ b/src/main/start-main-application/lens-window/application-window/create-electron-window.injectable.ts @@ -9,6 +9,12 @@ import { BrowserWindow } from "electron"; import type { ElectronWindow } from "./create-lens-window.injectable"; import type { RequireExactlyOne } from "type-fest"; import openLinkInBrowserInjectable from "../../../../common/utils/open-link-in-browser.injectable"; +import getAbsolutePathInjectable from "../../../../common/path/get-absolute-path.injectable"; +import lensResourcesDirInjectable from "../../../../common/vars/lens-resources-dir.injectable"; +import isLinuxInjectable from "../../../../common/vars/is-linux.injectable"; +import fsInjectable from "../../../../common/fs/fs.injectable"; +import applicationInformationInjectable from "../../../../common/vars/application-information.injectable"; + export type ElectronWindowTitleBarStyle = "hiddenInset" | "hidden" | "default" | "customButtonsOnHover"; @@ -45,6 +51,10 @@ const createElectronWindowInjectable = getInjectable({ instantiate: (di): CreateElectronWindow => { const logger = di.inject(loggerInjectable); const openLinkInBrowser = di.inject(openLinkInBrowserInjectable); + const getAbsolutePath = di.inject(getAbsolutePathInjectable); + const lensResourcesDir = di.inject(lensResourcesDirInjectable); + const isLinux = di.inject(isLinuxInjectable); + const applicationInformation = di.inject(applicationInformationInjectable); return (configuration) => { const applicationWindowState = di.inject( @@ -79,6 +89,23 @@ const createElectronWindowInjectable = getInjectable({ }, }); + if (isLinux) { + const iconFileName = [ + getAbsolutePath(lensResourcesDir, `../${applicationInformation.name}.png`), + `/usr/share/icons/hicolor/512x512/apps/${applicationInformation.name}.png`, + ].find(di.inject(fsInjectable).existsSync); + + if (iconFileName != null) { + try { + browserWindow.setIcon(iconFileName); + } catch (err) { + logger.warn(`Error while setting window icon ${err}`); + } + } else { + logger.warn(`No suitable icon found for task bar.`); + } + } + applicationWindowState.manage(browserWindow); browserWindow