cli/pkg/display/tray.go

79 lines
2.2 KiB
Go

package display
import (
"embed"
"runtime"
"github.com/wailsapp/wails/v3/pkg/application"
)
//go:embed assets/apptray.png
var assets embed.FS
// systemTray configures and creates the system tray icon and menu.
func (s *Service) systemTray() {
systray := s.Core().App.SystemTray.New()
systray.SetTooltip("Core")
systray.SetLabel("Core")
// Load and set tray icon
appTrayIcon, err := assets.ReadFile("assets/apptray.png")
if err == nil {
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.NewWithStruct(&Window{
Name: "system-tray",
Title: "System Tray Status",
URL: "system-tray.html",
Width: 400,
Frameless: true,
Hidden: true,
})
systray.AttachWindow(trayWindow).WindowOffset(5)
// --- Build Tray Menu ---
trayMenu := s.Core().App.Menu.New()
trayMenu.Add("Open Desktop").OnClick(func(ctx *application.Context) {
for _, window := range s.Core().App.Window.GetAll() {
window.Show()
}
})
trayMenu.Add("Close Desktop").OnClick(func(ctx *application.Context) {
for _, window := range s.Core().App.Window.GetAll() {
window.Hide()
}
})
trayMenu.Add("Environment Info").OnClick(func(ctx *application.Context) {
s.ShowEnvironmentDialog()
})
// Add brand-specific menu items
//switch d.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.Core().App.Quit()
})
systray.SetMenu(trayMenu)
}