From de67b366295dd1f4ee6823d10764ab319f2d3575 Mon Sep 17 00:00:00 2001 From: Egor Date: Wed, 1 Oct 2025 11:03:30 -0700 Subject: [PATCH] destroy tray on windows + osx only --- package.json | 4 ++-- src/main/ipc.ts | 8 ++++++-- src/main/modules/tray.ts | 9 ++++++++- yarn.lock | 20 ++++++++++---------- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index ce96034..dcf4ba0 100644 --- a/package.json +++ b/package.json @@ -40,8 +40,8 @@ "devDependencies": { "@eslint/js": "^9.36.0", "@types/node": "^24.6.1", - "@types/react": "^19.1.16", - "@types/react-dom": "^19.1.9", + "@types/react": "^19.1.17", + "@types/react-dom": "^19.1.11", "@typescript-eslint/eslint-plugin": "^8.45.0", "@typescript-eslint/parser": "^8.45.0", "@vitejs/plugin-react": "^5.0.4", diff --git a/src/main/ipc.ts b/src/main/ipc.ts index e17620b..a5a407b 100644 --- a/src/main/ipc.ts +++ b/src/main/ipc.ts @@ -30,7 +30,7 @@ import { getColorScheme, getEnableSystemTray, } from '@/main/modules/config'; -import { createTray, updateTrayState } from '@/main/modules/tray'; +import { createTray, updateTrayState, destroyTray } from '@/main/modules/tray'; import { getConfigDir, openPathHandler, openUrl } from '@/utils/node/path'; import { logError } from '@/utils/node/logging'; import { stopFrontend as stopSillyTavernFrontend } from '@/main/modules/sillytavern'; @@ -229,7 +229,11 @@ export function setupIPCHandlers() { ipcMain.handle('app:setEnableSystemTray', async (_, enabled: boolean) => { await setConfig('enableSystemTray', enabled); - createTray(); + if (enabled) { + createTray(); + } else { + destroyTray(); + } }); ipcMain.handle( diff --git a/src/main/modules/tray.ts b/src/main/modules/tray.ts index 7d6752c..f334eac 100644 --- a/src/main/modules/tray.ts +++ b/src/main/modules/tray.ts @@ -6,7 +6,7 @@ import { MenuItemConstructorOptions, } from 'electron'; import { join } from 'path'; -import { resourcesPath } from 'process'; +import { resourcesPath, platform } from 'process'; import { getEnableSystemTray } from './config'; import { getMainWindow } from './window'; import type { CpuMetrics, MemoryMetrics, GpuMetrics } from './monitoring'; @@ -233,4 +233,11 @@ export function updateTrayMenu() { } } +export function destroyTray() { + if (tray && platform !== 'linux') { + tray.destroy(); + tray = null; + } +} + export const isTrayActive = () => tray !== null; diff --git a/yarn.lock b/yarn.lock index 033cfdb..215ad66 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1457,21 +1457,21 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^19.1.9": - version: 19.1.9 - resolution: "@types/react-dom@npm:19.1.9" +"@types/react-dom@npm:^19.1.11": + version: 19.1.11 + resolution: "@types/react-dom@npm:19.1.11" peerDependencies: "@types/react": ^19.0.0 - checksum: 10c0/34c8dda86c1590b3ef0e7ecd38f9663a66ba2dd69113ba74fb0adc36b83bbfb8c94c1487a2505282a5f7e5e000d2ebf36f4c0fd41b3b672f5178fd1d4f1f8f58 + checksum: 10c0/417da6414f43ea2e416ab19666f78f8a29b349f4273ee6d8d468516606c65ee0e6f31939cd3255dfaf466a50a5cdf16b6fd988cf7e9aaf678c61d1fff81e5c20 languageName: node linkType: hard -"@types/react@npm:^19.1.16": - version: 19.1.16 - resolution: "@types/react@npm:19.1.16" +"@types/react@npm:^19.1.17": + version: 19.1.17 + resolution: "@types/react@npm:19.1.17" dependencies: csstype: "npm:^3.0.2" - checksum: 10c0/3d781f715f15f308b601d74142fae77c65679c318a3bb0a319df898f39095e738ba7ed7061cec971b19b6d33969ef9cd50fec92b034024ef3fcc25bb9a2eb3d0 + checksum: 10c0/8a8369ea00fc961f0884be4d1da4a039b2b6445de9c8b690ed0ebe15acfb0b1f27005278fef1fe39a1722a30f4415778b790d0089e2b30019371c61355ea316f languageName: node linkType: hard @@ -3865,8 +3865,8 @@ __metadata: "@mantine/core": "npm:8.3.1" "@mantine/hooks": "npm:8.3.1" "@types/node": "npm:^24.6.1" - "@types/react": "npm:^19.1.16" - "@types/react-dom": "npm:^19.1.9" + "@types/react": "npm:^19.1.17" + "@types/react-dom": "npm:^19.1.11" "@types/yauzl": "npm:^2.10.3" "@typescript-eslint/eslint-plugin": "npm:^8.45.0" "@typescript-eslint/parser": "npm:^8.45.0"