package display import ( "runtime" _ "embed" "github.com/wailsapp/wails/v3/pkg/application" ) //go:embed apptray.png var appTrayIcon []byte // setupTray configures and creates the system tray icon and menu. func (s *Service) setupTray() { systray := s.app.SystemTray.New() systray.SetTooltip("Lethean Desktop") if runtime.GOOS == "darwin" { systray.SetTemplateIcon(appTrayIcon) } else { // Support for light/dark mode icons systray.SetDarkModeIcon(appTrayIcon) systray.SetIcon(appTrayIcon) } // Create a hidden window for the system tray menu to interact with trayWindow := s.app.Window.NewWithOptions(application.WebviewWindowOptions{ Title: "System Tray Status", URL: "/#/system-tray", Width: 400, Frameless: true, Hidden: true, }) systray.AttachWindow(trayWindow).WindowOffset(5) // --- Build Tray Menu --- trayMenu := s.app.Menu.New() trayMenu.Add("Open Desktop").OnClick(func(ctx *application.Context) { for _, window := range s.app.Window.GetAll() { window.Show() } }) trayMenu.Add("Close Desktop").OnClick(func(ctx *application.Context) { for _, window := range s.app.Window.GetAll() { window.Hide() } }) trayMenu.Add("Environment Info").OnClick(func(ctx *application.Context) { s.ShowEnvironmentDialog() }) // Add brand-specific menu items switch s.brand { case AdminHub: trayMenu.Add("Manage Workspace").OnClick(func(ctx *application.Context) { /* TODO */ }) case ServerHub: trayMenu.Add("Server Control").OnClick(func(ctx *application.Context) { /* TODO */ }) case GatewayHub: trayMenu.Add("Routing Table").OnClick(func(ctx *application.Context) { /* TODO */ }) case DeveloperHub: trayMenu.Add("Debug Console").OnClick(func(ctx *application.Context) { /* TODO */ }) case ClientHub: trayMenu.Add("Connect").OnClick(func(ctx *application.Context) { /* TODO */ }) trayMenu.Add("Disconnect").OnClick(func(ctx *application.Context) { /* TODO */ }) } trayMenu.AddSeparator() trayMenu.Add("Quit").OnClick(func(ctx *application.Context) { s.app.Quit() }) systray.SetMenu(trayMenu) }