diff --git a/main.go b/main.go index d37cb7ad..0ad8df88 100644 --- a/main.go +++ b/main.go @@ -16,6 +16,7 @@ import ( "github.com/wavetermdev/thenextwave/pkg/wavebase" "github.com/wailsapp/wails/v3/pkg/application" + "github.com/wailsapp/wails/v3/pkg/events" ) //go:embed dist @@ -24,6 +25,42 @@ var assets embed.FS //go:embed build/appicon.png var appIcon []byte +func createAppMenu(app *application.App) *application.Menu { + menu := application.NewMenu() + menu.AddRole(application.AppMenu) + fileMenu := menu.AddSubmenu("File") + newWindow := fileMenu.Add("New Window") + newWindow.OnClick(func(appContext *application.Context) { + createWindow(app) + }) + closeWindow := fileMenu.Add("Close Window") + closeWindow.OnClick(func(appContext *application.Context) { + app.CurrentWindow().Close() + }) + menu.AddRole(application.EditMenu) + menu.AddRole(application.ViewMenu) + menu.AddRole(application.WindowMenu) + menu.AddRole(application.HelpMenu) + return menu +} + +func createWindow(app *application.App) { + window := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ + Title: "Wave Terminal", + Mac: application.MacWindow{ + InvisibleTitleBarHeight: 50, + Backdrop: application.MacBackdropTranslucent, + TitleBar: application.MacTitleBarHiddenInset, + }, + BackgroundColour: application.NewRGB(27, 38, 54), + URL: "/public/index.html", + }) + eventbus.RegisterWailsWindow(window) + window.On(events.Common.WindowClosing, func(event *application.WindowEvent) { + eventbus.UnregisterWailsWindow(window.ID()) + }) +} + func main() { err := wavebase.EnsureWaveHomeDir() if err != nil { @@ -52,19 +89,11 @@ func main() { ApplicationShouldTerminateAfterLastWindowClosed: true, }, }) + menu := createAppMenu(app) + app.SetMenu(menu) eventbus.RegisterWailsApp(app) - window := app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ - Title: "Wave Terminal", - Mac: application.MacWindow{ - InvisibleTitleBarHeight: 50, - Backdrop: application.MacBackdropTranslucent, - TitleBar: application.MacTitleBarHiddenInset, - }, - BackgroundColour: application.NewRGB(27, 38, 54), - URL: "/public/index.html", - }) - eventbus.RegisterWailsWindow(window) + createWindow(app) eventbus.Start() defer eventbus.Shutdown() diff --git a/pkg/blockcontroller/blockcontroller.go b/pkg/blockcontroller/blockcontroller.go index 20f72ac0..0e6b9fbb 100644 --- a/pkg/blockcontroller/blockcontroller.go +++ b/pkg/blockcontroller/blockcontroller.go @@ -115,6 +115,7 @@ func CloseBlock(blockId string) { } bc.Close() close(bc.InputCh) + removeBlockData(blockId) } func GetBlockData(blockId string) *BlockData { @@ -129,6 +130,12 @@ func setBlockData(bd *BlockData) { blockDataMap[bd.BlockId] = bd } +func removeBlockData(blockId string) { + globalLock.Lock() + defer globalLock.Unlock() + delete(blockDataMap, blockId) +} + func (bc *BlockController) setShellProc(shellProc *shellexec.ShellProc) error { bc.Lock.Lock() defer bc.Lock.Unlock()