diff --git a/forge.config.ts b/forge.config.ts index 71c17fe..4a0ced6 100644 --- a/forge.config.ts +++ b/forge.config.ts @@ -85,37 +85,29 @@ if (!process.env.PLATFORM) { // default arguments found by running // DEBUG=electron-installer-flatpak* pnpm make "--socket=fallback-x11", + "--socket=wayland", "--share=ipc", + "--share=network", "--device=dri", + "--device=all", "--socket=pulseaudio", "--filesystem=home", - "--env=TMPDIR=/var/tmp", - "--share=network", + "--filesystem=xdg-run/pipewire-0", + "--filesystem=xdg-videos:ro", + "--filesystem=xdg-pictures:ro", + "--filesystem=xdg-run/speech-dispatcher", + "--talk-name=org.freedesktop.ScreenSaver", "--talk-name=org.freedesktop.Notifications", - // add Unity talk name for badges + "--talk-name=org.kde.StatusNotifierWatcher", + "--talk-name=com.canonical.AppMenu.Registrar", + "--talk-name=com.canonical.indicator.application", "--talk-name=com.canonical.Unity", + "--env=XCURSOR_PATH=/run/host/user-share/icons:/run/host/share/icons", + "--env=ELECTRON_TRASH=gio", + "--env=TMPDIR=xdg-run/app/chat.stoat.stoat-desktop", ], - // files: [ - // // is this necessary? - // // https://stackoverflow.com/q/79745700 - // ...[16, 32, 64, 128, 256, 512].map( - // (size) => - // [ - // `assets/desktop/hicolor/${size}x${size}.png`, - // `/app/share/icons/hicolor/${size}x${size}/apps/chat.stoat.stoat-desktop.png`, - // ] as [string, string], - // ), - // [ - // `assets/desktop/icon.svg`, - // `/app/share/icons/hicolor/scalable/apps/chat.stoat.stoat-desktop.svg`, - // ] as [string, string], - // ], files: [], } as MakerFlatpakOptionsConfig, - /* as Omit< - MakerFlatpakOptionsConfig, - "files" - > */ }), // testing purposes new MakerDeb({ diff --git a/package.json b/package.json index e9ebcb0..765bfb4 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": ".vite/build/main.js", "repository": "stoatchat/desktop", "scripts": { - "start": "electron-forge start", + "start": "electron-forge start -- --no-sandbox", "package": "electron-forge package", "make": "electron-forge make", "publish": "electron-forge publish", @@ -36,7 +36,7 @@ "@types/electron-squirrel-startup": "^1.0.2", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", - "electron": "^40.6.0", + "electron": "^40.8.3", "eslint": "^8.57.1", "eslint-plugin-import": "^2.32.0", "json-schema-typed": "^8.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 56c03ed..9c7ff44 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -85,8 +85,8 @@ importers: specifier: ^5.62.0 version: 5.62.0(eslint@8.57.1)(typescript@4.5.5) electron: - specifier: ^40.6.0 - version: 40.6.0 + specifier: ^40.8.3 + version: 40.8.3 eslint: specifier: ^8.57.1 version: 8.57.1 @@ -910,6 +910,7 @@ packages: '@xmldom/xmldom@0.8.11': resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} engines: {node: '>=10.0.0'} + deprecated: this version has critical issues, please update to the latest version abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -1078,6 +1079,9 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@2.1.0: + resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -1375,8 +1379,8 @@ packages: resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} engines: {node: '>=8.0.0'} - electron@40.6.0: - resolution: {integrity: sha512-ett8W+yOFGDuM0vhJMamYSkrbV3LoaffzJd9GfjI96zRAxyrNqUSKqBpf/WGbQCweDxX2pkUCUfrv4wwKpsFZA==} + electron@40.8.3: + resolution: {integrity: sha512-MH6LK4xM6VVmmtz0nRE0Fe8l2jTKSYTvH1t0ZfbNLw3o6dlBCVTRqQha6uL8ZQVoMy74JyLguGwK7dU7rCKIhw==} engines: {node: '>= 12.20.55'} hasBin: true @@ -1540,8 +1544,8 @@ packages: resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} engines: {node: '>=6'} - exponential-backoff@3.1.2: - resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} + exponential-backoff@3.1.3: + resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} @@ -1869,8 +1873,8 @@ packages: resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} engines: {node: '>=10.13.0'} - ip-address@10.0.1: - resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} is-array-buffer@3.0.5: @@ -2188,8 +2192,8 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} engines: {node: '>=10'} minimatch@9.0.5: @@ -2207,8 +2211,8 @@ packages: resolution: {integrity: sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + minipass-flush@1.0.7: + resolution: {integrity: sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA==} engines: {node: '>= 8'} minipass-pipeline@1.2.4: @@ -2276,8 +2280,8 @@ packages: nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - node-abi@3.77.0: - resolution: {integrity: sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==} + node-abi@3.89.0: + resolution: {integrity: sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==} engines: {node: '>=10'} node-addon-api@1.7.2: @@ -3538,7 +3542,7 @@ snapshots: '@electron/node-gyp@https://codeload.github.com/electron/node-gyp/tar.gz/06b29aafb7708acef8b3669835c8a7857ebc92d2': dependencies: env-paths: 2.2.1 - exponential-backoff: 3.1.2 + exponential-backoff: 3.1.3 glob: 8.1.0 graceful-fs: 4.2.11 make-fetch-happen: 10.2.1 @@ -3605,7 +3609,7 @@ snapshots: detect-libc: 2.1.1 fs-extra: 10.1.0 got: 11.8.6 - node-abi: 3.77.0 + node-abi: 3.89.0 node-api-version: 0.2.1 ora: 5.4.1 read-binary-file-arch: 1.0.6 @@ -4110,7 +4114,7 @@ snapshots: '@types/fs-extra@9.0.13': dependencies: - '@types/node': 24.5.2 + '@types/node': 24.10.13 optional: true '@types/http-cache-semantics@4.0.4': {} @@ -4427,6 +4431,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@2.1.0: + dependencies: + balanced-match: 1.0.2 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -4455,7 +4463,7 @@ snapshots: lru-cache: 7.18.3 minipass: 3.3.6 minipass-collect: 1.0.2 - minipass-flush: 1.0.5 + minipass-flush: 1.0.7 minipass-pipeline: 1.2.4 mkdirp: 1.0.4 p-map: 4.0.0 @@ -4798,7 +4806,7 @@ snapshots: - supports-color optional: true - electron@40.6.0: + electron@40.8.3: dependencies: '@electron/get': 2.0.3 '@types/node': 24.10.13 @@ -5090,7 +5098,7 @@ snapshots: signal-exit: 3.0.7 strip-eof: 1.0.0 - exponential-backoff@3.1.2: {} + exponential-backoff@3.1.3: {} external-editor@3.1.0: dependencies: @@ -5326,7 +5334,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 5.1.6 + minimatch: 5.1.9 once: 1.4.0 global-agent@3.0.0: @@ -5494,7 +5502,7 @@ snapshots: interpret@3.1.1: {} - ip-address@10.0.1: {} + ip-address@10.1.0: {} is-array-buffer@3.0.5: dependencies: @@ -5745,7 +5753,7 @@ snapshots: minipass: 3.3.6 minipass-collect: 1.0.2 minipass-fetch: 2.1.2 - minipass-flush: 1.0.5 + minipass-flush: 1.0.7 minipass-pipeline: 1.2.4 negotiator: 0.6.4 promise-retry: 2.0.1 @@ -5802,9 +5810,9 @@ snapshots: dependencies: brace-expansion: 1.1.12 - minimatch@5.1.6: + minimatch@5.1.9: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.1.0 minimatch@9.0.5: dependencies: @@ -5824,7 +5832,7 @@ snapshots: optionalDependencies: encoding: 0.1.13 - minipass-flush@1.0.5: + minipass-flush@1.0.7: dependencies: minipass: 3.3.6 @@ -5877,7 +5885,7 @@ snapshots: nice-try@1.0.5: {} - node-abi@3.77.0: + node-abi@3.89.0: dependencies: semver: 7.7.2 @@ -6386,7 +6394,7 @@ snapshots: socks@2.8.7: dependencies: - ip-address: 10.0.1 + ip-address: 10.1.0 smart-buffer: 4.2.0 source-map-js@1.2.1: {} diff --git a/src/native/tray.ts b/src/native/tray.ts index 87a5f60..45fd6be 100644 --- a/src/native/tray.ts +++ b/src/native/tray.ts @@ -21,37 +21,7 @@ function createTrayIcon() { } } -// Electron 39 (wayland support) and zypak broke this old code for tray icon support. -// I don't know why, but this code is never ran in the flatpak. Code copied from -// electron/lib/browser/init.ts -function setXDGDesktop() { - // Only matters on linux - if (process.platform !== "linux") return; - // If XDG_CURRENT_DESKTOP is Unity this code has probably already run and we're not - // in a flatpak. - if (process.env.XDG_CURRENT_DESKTOP == "Unity") return; - const KNOWN_XDG_DESKTOP_VALUES = ["Pantheon", "Unity:Unity7", "pop:GNOME"]; - const currentPlatformSupportsAppIndicator = () => { - const currentDesktop = process.env.XDG_CURRENT_DESKTOP; - - if (!currentDesktop) return false; - if (KNOWN_XDG_DESKTOP_VALUES.includes(currentDesktop)) return true; - // ubuntu based or derived session (default ubuntu one, communitheme…) supports - // indicator too. - if (/ubuntu/gi.test(currentDesktop)) return true; - - return false; - }; - - // Workaround for electron/electron#5050 and electron/electron#9046 - process.env.ORIGINAL_XDG_CURRENT_DESKTOP = process.env.XDG_CURRENT_DESKTOP; - if (currentPlatformSupportsAppIndicator()) { - process.env.XDG_CURRENT_DESKTOP = "Unity"; - } -} - export function initTray() { - setXDGDesktop(); const trayIcon = createTrayIcon(); tray = new Tray(trayIcon); updateTrayMenu(); @@ -59,13 +29,12 @@ export function initTray() { tray.setImage(trayIcon); tray.on("click", () => { if (mainWindow.isVisible()) { - mainWindow.hide(); + mainWindow.hide(); } else { - mainWindow.show(); - mainWindow.focus(); + mainWindow.show(); + mainWindow.focus(); } }); - tray.setImage(trayIcon); } export function updateTrayMenu() {