From 68ff0ffb8865a549fb69a5e690561c8f6d113ea5 Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Fri, 5 Dec 2025 15:19:12 +0100 Subject: [PATCH] build(electron): upgrade to Electron 39 with X11 default on Linux Upgrade Electron from 37.7.0 to 39.2.5. Since Electron 38+ defaults to Wayland via --ozone-platform=auto, force X11 on Linux to ensure reliable idle detection (#1443) and global shortcuts. Users can opt-in to Wayland with --ozone-platform=wayland or --force-wayland flags. --- electron/start-app.ts | 15 +++++++++++++++ package-lock.json | 8 ++++---- package.json | 2 +- packages/plugin-api/src/types.js.map | 2 +- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/electron/start-app.ts b/electron/start-app.ts index fc501c074..ae840c7c7 100644 --- a/electron/start-app.ts +++ b/electron/start-app.ts @@ -73,6 +73,21 @@ export const startApp = (): void => { // https://github.com/electron/electron/issues/46538#issuecomment-2808806722 app.commandLine.appendSwitch('gtk-version', '3'); + // Force X11 on Linux by default (Electron 38+ defaults to Wayland via --ozone-platform=auto) + // Wayland has known issues: + // - Idle detection fallbacks are unreliable (#1443) + // - Global shortcuts require manual system configuration (GlobalShortcutsPortal) + // Users can override with --ozone-platform=wayland if desired + if (process.platform === 'linux') { + const forceWayland = process.argv.some( + (arg) => + arg.includes('--ozone-platform=wayland') || arg.includes('--force-wayland'), + ); + if (!forceWayland) { + app.commandLine.appendSwitch('ozone-platform', 'x11'); + } + } + // NOTE: needs to be executed before everything else process.argv.forEach((val) => { if (val && val.includes('--disable-tray')) { diff --git a/package-lock.json b/package-lock.json index 5213da2a8..8fc6812b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -90,7 +90,7 @@ "core-js": "^3.39.0", "cross-env": "^7.0.3", "detect-it": "^4.0.1", - "electron": "37.7.0", + "electron": "39.2.5", "electron-builder": "^26.3.3", "eslint": "^8.57.1", "eslint-config-prettier": "^10.1.5", @@ -13982,9 +13982,9 @@ } }, "node_modules/electron": { - "version": "37.7.0", - "resolved": "https://registry.npmjs.org/electron/-/electron-37.7.0.tgz", - "integrity": "sha512-LBzvfrS0aalynOsnC11AD7zeoU8eOois090mzLpQM3K8yZ2N04i2ZW9qmHOTFLrXlKvrwRc7EbyQf1u8XHMl6Q==", + "version": "39.2.5", + "resolved": "https://registry.npmjs.org/electron/-/electron-39.2.5.tgz", + "integrity": "sha512-LXlOcH3CNopcVTQWjp680fMygdNrWKdIe3hyMtlyceO+Jd0b2hdMw1iWz36I+UUXHXPH87i937gXYi0jze2fCw==", "dev": true, "hasInstallScript": true, "license": "MIT", diff --git a/package.json b/package.json index 846fe9612..412c6e57d 100644 --- a/package.json +++ b/package.json @@ -205,7 +205,7 @@ "core-js": "^3.39.0", "cross-env": "^7.0.3", "detect-it": "^4.0.1", - "electron": "37.7.0", + "electron": "39.2.5", "electron-builder": "^26.3.3", "eslint": "^8.57.1", "eslint-config-prettier": "^10.1.5", diff --git a/packages/plugin-api/src/types.js.map b/packages/plugin-api/src/types.js.map index 85111a070..1dc70d15c 100644 --- a/packages/plugin-api/src/types.js.map +++ b/packages/plugin-api/src/types.js.map @@ -1 +1 @@ -{"version":3,"file":"types.js","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,gEAAgE;;;AAShE,IAAY,WAWX;AAXD,WAAY,WAAW;IACrB,6CAA8B,CAAA;IAC9B,yCAA0B,CAAA;IAC1B,yCAA0B,CAAA;IAC1B,wDAAyC,CAAA;IACzC,uCAAwB,CAAA;IACxB,iDAAkC,CAAA;IAClC,4DAA6C,CAAA;IAC7C,gCAAiB,CAAA;IACjB,gDAAiC,CAAA;IACjC,wDAAyC,CAAA;AAC3C,CAAC,EAXW,WAAW,2BAAX,WAAW,QAWtB;AAseD;;;GAGG;AACH,IAAY,uBAoBX;AApBD,WAAY,uBAAuB;IACjC,oBAAoB;IACpB,uDAA4B,CAAA;IAC5B,+DAAoC,CAAA;IACpC,yDAA8B,CAAA;IAE9B,cAAc;IACd,2DAAgC,CAAA;IAEhC,qBAAqB;IACrB,6EAAkD,CAAA;IAClD,mFAAwD,CAAA;IAExD,qBAAqB;IACrB,qDAA0B,CAAA;IAC1B,uEAA4C,CAAA;IAC5C,iEAAsC,CAAA;IAEtC,mBAAmB;IACnB,iDAAsB,CAAA;AACxB,CAAC,EApBW,uBAAuB,uCAAvB,uBAAuB,QAoBlC;AAED,6CAA6C;AAC7C,2EAA2E;AAC3E,mBAAmB;AACnB,uBAAuB;AACvB,4BAA4B;AAC5B,MAAM;AACN,EAAE;AACF,uDAAuD;AACvD,gCAAgC;AAChC,IAAI"} \ No newline at end of file +{"version":3,"file":"types.js","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":";AAAA,0CAA0C;AAC1C,gEAAgE;;;AAShE,IAAY,WAYX;AAZD,WAAY,WAAW;IACrB,2CAA4B,CAAA;IAC5B,6CAA8B,CAAA;IAC9B,yCAA0B,CAAA;IAC1B,yCAA0B,CAAA;IAC1B,wDAAyC,CAAA;IACzC,uCAAwB,CAAA;IACxB,iDAAkC,CAAA;IAClC,4DAA6C,CAAA;IAC7C,gCAAiB,CAAA;IACjB,gDAAiC,CAAA;IACjC,wDAAyC,CAAA;AAC3C,CAAC,EAZW,WAAW,2BAAX,WAAW,QAYtB;AA+eD;;;GAGG;AACH,IAAY,uBAoBX;AApBD,WAAY,uBAAuB;IACjC,oBAAoB;IACpB,uDAA4B,CAAA;IAC5B,+DAAoC,CAAA;IACpC,yDAA8B,CAAA;IAE9B,cAAc;IACd,2DAAgC,CAAA;IAEhC,qBAAqB;IACrB,6EAAkD,CAAA;IAClD,mFAAwD,CAAA;IAExD,qBAAqB;IACrB,qDAA0B,CAAA;IAC1B,uEAA4C,CAAA;IAC5C,iEAAsC,CAAA;IAEtC,mBAAmB;IACnB,iDAAsB,CAAA;AACxB,CAAC,EApBW,uBAAuB,uCAAvB,uBAAuB,QAoBlC;AAED,6CAA6C;AAC7C,2EAA2E;AAC3E,mBAAmB;AACnB,uBAAuB;AACvB,4BAA4B;AAC5B,MAAM;AACN,EAAE;AACF,uDAAuD;AACvD,gCAAgC;AAChC,IAAI"} \ No newline at end of file