diff --git a/config/electron-builder.config.cjs b/config/electron-builder.config.cjs index 1da8ece82..ab65eacb0 100644 --- a/config/electron-builder.config.cjs +++ b/config/electron-builder.config.cjs @@ -238,12 +238,19 @@ module.exports = { artifactName: 'orca-macos-${arch}.${ext}' }, linux: { - // Why: Ubuntu 26 ships GNOME Orca as the `orca` package and /usr/bin/orca. + // Why: Ubuntu desktop ships GNOME Orca as the `orca` package and /usr/bin/orca. // The Linux installer should not claim those system package/file names. executableName: 'orca-ide', // Why: the icns source lets electron-builder emit standard hicolor PNG // sizes; a single 1024px PNG is ignored by some Linux docks/launchers. icon: 'resources/build/icon.icns', + desktop: { + entry: { + // Why: Electron reports WM_CLASS=orca for the visible Linux window; + // GNOME docks need an exact match to group it with orca-ide.desktop. + StartupWMClass: 'orca' + } + }, extraResources: [ ...commonExtraResources, linuxSpeechNativeResource, diff --git a/config/scripts/electron-builder-config.test.mjs b/config/scripts/electron-builder-config.test.mjs index 9e0920a7a..8214344f3 100644 --- a/config/scripts/electron-builder-config.test.mjs +++ b/config/scripts/electron-builder-config.test.mjs @@ -67,6 +67,10 @@ describe('electron-builder config', () => { expect(electronBuilderConfig.linux.icon).toBe('resources/build/icon.icns') }) + it('matches the Linux desktop entry to Electron window class', () => { + expect(electronBuilderConfig.linux.desktop.entry.StartupWMClass).toBe('orca') + }) + it('builds RPMs without changing existing Linux artifact names', () => { expect(electronBuilderConfig.linux.target).toEqual(['AppImage', 'deb', 'rpm']) expect(electronBuilderConfig.appImage.artifactName).toBe('orca-linux.${ext}')