diff --git a/assets/icon.icns b/assets/icon.icns new file mode 100644 index 0000000..d8cd509 Binary files /dev/null and b/assets/icon.icns differ diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 0000000..1097129 Binary files /dev/null and b/assets/icon.png differ diff --git a/assets/tray-icon.png b/assets/tray-icon.png new file mode 100644 index 0000000..4f99897 Binary files /dev/null and b/assets/tray-icon.png differ diff --git a/main.js b/main.js index 8658874..22f05ed 100644 --- a/main.js +++ b/main.js @@ -108,9 +108,15 @@ function createWindow() { mainWindow.show(); }); - // Close → quit app (no tray) - mainWindow.on('close', () => { - isQuitting = true; + // Close → minimize to tray (hide window, keep server running) + mainWindow.on('close', (event) => { + if (!isQuitting) { + event.preventDefault(); + mainWindow.hide(); + if (process.platform === 'darwin' && app.dock) { + app.dock.hide(); + } + } }); mainWindow.on('closed', () => { @@ -148,6 +154,7 @@ function createTray() { if (mainWindow) { mainWindow.show(); mainWindow.focus(); + if (process.platform === 'darwin' && app.dock) app.dock.show(); } else { createWindow(); } @@ -174,11 +181,23 @@ function createTray() { tray.setContextMenu(contextMenu); + // Left-click tray → show window (Windows/Linux; macOS shows context menu by default) + tray.on('click', () => { + if (mainWindow) { + mainWindow.show(); + mainWindow.focus(); + if (process.platform === 'darwin' && app.dock) app.dock.show(); + } else { + createWindow(); + } + }); + // Double-click tray → show window (Windows/Linux) tray.on('double-click', () => { if (mainWindow) { mainWindow.show(); mainWindow.focus(); + if (process.platform === 'darwin' && app.dock) app.dock.show(); } }); } @@ -215,6 +234,8 @@ app.on('activate', () => { // macOS dock click → show window if (mainWindow) { mainWindow.show(); + mainWindow.focus(); + if (process.platform === 'darwin' && app.dock) app.dock.show(); } else { createWindow(); } diff --git a/package.json b/package.json index 64a6201..758be54 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "odo", - "version": "0.9.5", + "version": "0.9.6", "description": "ODO — OpenClaw Dashboard Orchestrator", "main": "main.js", "scripts": { diff --git a/preload.js b/preload.js index 8d2aff3..99eccfd 100644 --- a/preload.js +++ b/preload.js @@ -7,6 +7,6 @@ const { contextBridge } = require('electron'); contextBridge.exposeInMainWorld('odo', { platform: process.platform, - version: '0.9.4', + version: '0.9.6', isElectron: true }); diff --git a/server/openclaw-manager.js b/server/openclaw-manager.js index f36f91c..29fb761 100644 --- a/server/openclaw-manager.js +++ b/server/openclaw-manager.js @@ -24,7 +24,7 @@ const SCRIPT_DIR = __dirname; const MANAGER_CONFIG = path.join(SCRIPT_DIR, 'manager-config.json'); let PORT = 3333; let HOST = '0.0.0.0'; -const APP_VERSION = '0.9.4'; +const APP_VERSION = '0.9.6'; // --port 参数 const portIdx = process.argv.indexOf('--port'); if (portIdx !== -1 && process.argv[portIdx + 1]) PORT = parseInt(process.argv[portIdx + 1]) || 3333;