diff --git a/gui-js/apps/minsky-electron/src/app/api/preload.ts b/gui-js/apps/minsky-electron/src/app/api/preload.ts index a31bea1fc..5e88f049e 100644 --- a/gui-js/apps/minsky-electron/src/app/api/preload.ts +++ b/gui-js/apps/minsky-electron/src/app/api/preload.ts @@ -9,4 +9,5 @@ contextBridge.exposeInMainWorld('electron', { ipcRendererOff: (channel: string, listener) => ipcRenderer.removeListener(channel, listener), ipcRenderer: { ...ipcRenderer, send: ipcRenderer.send, sendSync: ipcRenderer.sendSync, invoke: ipcRenderer.invoke }, platform: process.platform, + electronVersion: process.versions.electron, }); diff --git a/gui-js/apps/minsky-electron/src/app/app.ts b/gui-js/apps/minsky-electron/src/app/app.ts index c328bb74a..1d9c85561 100644 --- a/gui-js/apps/minsky-electron/src/app/app.ts +++ b/gui-js/apps/minsky-electron/src/app/app.ts @@ -239,8 +239,11 @@ export default class App { App.BrowserWindow = browserWindow; App.application = app; - App.application.commandLine.appendSwitch('disable-gpu'); // Rendering was not working on some window's machines without disabling gpu + if (process.platform === 'win32') { + app.commandLine.appendSwitch('disable-gpu'); + app.commandLine.appendSwitch('disable-direct-composition'); + } App.application.commandLine.appendSwitch('high-dpi-support', '1'); // This probably supports high-res fonts, but we don't know exactly what implications it has! diff --git a/gui-js/libs/core/src/lib/services/electron/electron.service.ts b/gui-js/libs/core/src/lib/services/electron/electron.service.ts index 269d48329..306fc37ce 100644 --- a/gui-js/libs/core/src/lib/services/electron/electron.service.ts +++ b/gui-js/libs/core/src/lib/services/electron/electron.service.ts @@ -14,6 +14,7 @@ export class ElectronService { minsky: Minsky; on: (channel: string, listener) => void; removeListener: (channel: string, listener) => void; + electronVersion: string; constructor() { this.minsky=new Minsky("minsky"); @@ -21,6 +22,7 @@ export class ElectronService { if (this.isElectron) { this.ipcRenderer = window['electron'].ipcRenderer; this.platform = window['electron'].platform; + this.electronVersion = window['electron'].electronVersion; this.on = window['electron'].ipcRendererOn; this.removeListener = window['electron'].ipcRendererOff; diff --git a/gui-js/libs/menu/src/lib/file/about/about.component.html b/gui-js/libs/menu/src/lib/file/about/about.component.html index d8d918ccc..b537f3ca8 100644 --- a/gui-js/libs/menu/src/lib/file/about/about.component.html +++ b/gui-js/libs/menu/src/lib/file/about/about.component.html @@ -8,6 +8,7 @@ Minsky GUI {{ frontEndVersion ? frontEndVersion : 'NA' }} Ravel {{ ravelVersion ? ravelVersion : 'NA' }} Angular {{ angularVersion }} + Electron {{ electronVersion }}
Minsky is FREE software, distributed under the GNU General Public diff --git a/gui-js/libs/menu/src/lib/file/about/about.component.ts b/gui-js/libs/menu/src/lib/file/about/about.component.ts index 10a645985..bb967dac2 100644 --- a/gui-js/libs/menu/src/lib/file/about/about.component.ts +++ b/gui-js/libs/menu/src/lib/file/about/about.component.ts @@ -13,7 +13,8 @@ export class AboutComponent implements OnInit { minskyVersion: string; frontEndVersion: string; ravelVersion: string; - + electronVersion: string + constructor(private electronService: ElectronService, private cdRef: ChangeDetectorRef,){} ngOnInit(): void { @@ -22,8 +23,10 @@ export class AboutComponent implements OnInit { this.ravelVersion = await minsky.ravelVersion(); this.minskyVersion = await minsky.minskyVersion(); this.frontEndVersion=version; + this.electronVersion=this.electronService.electronVersion; // Ensure UI updates even if backend calls resolve outside Angular's zone. - this.cdRef.detectChanges(); })(); + this.cdRef.detectChanges(); + })(); } async closeWindow() {this.electronService.closeWindow();} diff --git a/gui-js/package-lock.json b/gui-js/package-lock.json index fbf31c95d..6df374393 100644 --- a/gui-js/package-lock.json +++ b/gui-js/package-lock.json @@ -45,7 +45,7 @@ "@nx/js": "^22.6.5", "@nx/workspace": "^22.6.5", "@types/jest": "^29.0.0", - "electron": "^37.0.0", + "electron": "^42.0.0", "electron-builder": "^24.13.3", "exitzero": "^1.0.1", "is-electron": "^2.2.2", @@ -3021,35 +3021,37 @@ } }, "node_modules/@electron/get": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", - "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.0.0.tgz", + "integrity": "sha512-pjoBpru1KdEtcExBnuHAP1cAc/5faoedw0hzJkL3o4/IJp7HNF1+fbrdxT3gMYRX2oJfvnA/WXeCTVQpYYxyJA==", "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", + "env-paths": "^3.0.0", + "graceful-fs": "^4.2.11", "progress": "^2.0.3", - "semver": "^6.2.0", + "semver": "^7.6.3", "sumchecker": "^3.0.1" }, "engines": { - "node": ">=12" + "node": ">=22.12.0" }, "optionalDependencies": { - "global-agent": "^3.0.0" + "undici": "^7.24.4" } }, - "node_modules/@electron/get/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@electron/get/node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@electron/notarize": { @@ -13542,22 +13544,22 @@ } }, "node_modules/electron": { - "version": "37.10.3", - "resolved": "https://registry.npmjs.org/electron/-/electron-37.10.3.tgz", - "integrity": "sha512-3IjCGSjQmH50IbW2PFveaTzK+KwcFX9PEhE7KXb9v5IT8cLAiryAN7qezm/XzODhDRlLu0xKG1j8xWBtZ/bx/g==", + "version": "42.3.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-42.3.0.tgz", + "integrity": "sha512-9ZiLdRXk+WDxW1OgIUz8J2rIQ5TYU9o629gCOjU48Q3dQiOmym7osWsH5Ubs/Jh4uuFLn6m6SBD2rmRXLAPz9g==", "dev": true, - "hasInstallScript": true, "license": "MIT", "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^22.7.7", + "@electron/get": "^5.0.0", + "@types/node": "^24.9.0", "extract-zip": "^2.0.1" }, "bin": { - "electron": "cli.js" + "electron": "cli.js", + "install-electron": "install.js" }, "engines": { - "node": ">= 12.20.55" + "node": ">= 22.12.0" } }, "node_modules/electron-builder": { @@ -13829,19 +13831,19 @@ } }, "node_modules/electron/node_modules/@types/node": { - "version": "22.19.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.19.tgz", - "integrity": "sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==", + "version": "24.12.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.4.tgz", + "integrity": "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.16.0" } }, "node_modules/electron/node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, "license": "MIT" }, @@ -15446,21 +15448,6 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "license": "MIT" }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -16166,21 +16153,6 @@ } } }, - "node_modules/html-encoding-sniffer/node_modules/@noble/hashes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz", - "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -19373,21 +19345,6 @@ } } }, - "node_modules/jsdom/node_modules/@noble/hashes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz", - "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/jsdom/node_modules/lru-cache": { "version": "11.5.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.0.tgz", @@ -28780,21 +28737,6 @@ "punycode": "^2.1.0" } }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, "node_modules/utf8": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", @@ -29751,21 +29693,6 @@ } } }, - "node_modules/whatwg-url/node_modules/@noble/hashes": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz", - "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/gui-js/package.json b/gui-js/package.json index c1488df2d..e68b78b96 100644 --- a/gui-js/package.json +++ b/gui-js/package.json @@ -176,7 +176,7 @@ "@nx/js": "^22.6.5", "@nx/workspace": "^22.6.5", "@types/jest": "^29.0.0", - "electron": "^37.0.0", + "electron": "^42.0.0", "electron-builder": "^24.13.3", "exitzero": "^1.0.1", "is-electron": "^2.2.2",