package main import ( _ "embed" "github.com/wailsapp/wails/v3/pkg/events" "log" "github.com/wailsapp/wails/v3/pkg/application" ) func main() { app := application.New(application.Options{ Name: "WebviewWindow Demo", Description: "A demo of the WebviewWindow API", Mac: application.MacOptions{ ApplicationShouldTerminateAfterLastWindowClosed: true, }, }) app.On(events.Mac.ApplicationDidFinishLaunching, func() { log.Println("ApplicationDidFinishLaunching") }) // //currentWindow := func(fn func(window *application.WebviewWindow)) { // if app.CurrentWindow() != nil { // fn(app.CurrentWindow()) // } else { // println("Current WebviewWindow is nil") // } //} // //// Create a custom menu //menu := app.NewMenu() //menu.AddRole(application.AppMenu) // //windowCounter := 1 // //// Let's make a "Demo" menu //myMenu := menu.AddSubmenu("New") // //myMenu.Add("New WebviewWindow"). // SetAccelerator("CmdOrCtrl+N"). // OnClick(func(ctx *application.Context) { // app.NewWebviewWindow(). // SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)). // SetPosition(rand.Intn(1000), rand.Intn(800)). // SetURL("https://wails.io"). // Show() // windowCounter++ // }) //myMenu.Add("New WebviewWindow (Hide on Close"). // SetAccelerator("CmdOrCtrl+H"). // OnClick(func(ctx *application.Context) { // app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{HideOnClose: true}). // SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)). // SetPosition(rand.Intn(1000), rand.Intn(800)). // SetURL("https://wails.io"). // Show() // windowCounter++ // }) //myMenu.Add("New Frameless WebviewWindow"). // SetAccelerator("CmdOrCtrl+F"). // OnClick(func(ctx *application.Context) { // app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ // X: rand.Intn(1000), // Y: rand.Intn(800), // Frameless: true, // Mac: application.MacWindow{ // InvisibleTitleBarHeight: 50, // }, // }).Show() // windowCounter++ // }) //if runtime.GOOS == "darwin" { // myMenu.Add("New WebviewWindow (MacTitleBarHiddenInset)"). // OnClick(func(ctx *application.Context) { // app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ // Mac: application.MacWindow{ // TitleBar: application.MacTitleBarHiddenInset, // InvisibleTitleBarHeight: 25, // }, // }). // SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)). // SetPosition(rand.Intn(1000), rand.Intn(800)). // SetHTML("

A MacTitleBarHiddenInset WebviewWindow example

"). // Show() // windowCounter++ // }) // myMenu.Add("New WebviewWindow (MacTitleBarHiddenInsetUnified)"). // OnClick(func(ctx *application.Context) { // app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ // Mac: application.MacWindow{ // TitleBar: application.MacTitleBarHiddenInsetUnified, // InvisibleTitleBarHeight: 50, // }, // }). // SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)). // SetPosition(rand.Intn(1000), rand.Intn(800)). // SetHTML("

A MacTitleBarHiddenInsetUnified WebviewWindow example

"). // Show() // windowCounter++ // }) // myMenu.Add("New WebviewWindow (MacTitleBarHidden)"). // OnClick(func(ctx *application.Context) { // app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ // Mac: application.MacWindow{ // TitleBar: application.MacTitleBarHidden, // InvisibleTitleBarHeight: 25, // }, // }). // SetTitle("WebviewWindow "+strconv.Itoa(windowCounter)). // SetPosition(rand.Intn(1000), rand.Intn(800)). // SetHTML("

A MacTitleBarHidden WebviewWindow example

"). // Show() // windowCounter++ // }) //} // //sizeMenu := menu.AddSubmenu("Size") //sizeMenu.Add("Set Size (800,600)").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.SetSize(800, 600) // }) //}) // //sizeMenu.Add("Set Size (Random)").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.SetSize(rand.Intn(800)+200, rand.Intn(600)+200) // }) //}) //sizeMenu.Add("Set Min Size (200,200)").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.SetMinSize(200, 200) // }) //}) //sizeMenu.Add("Set Max Size (600,600)").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.SetFullscreenButtonEnabled(false) // w.SetMaxSize(600, 600) // }) //}) //sizeMenu.Add("Get Current WebviewWindow Size").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // width, height := w.Size() // app.InfoDialog().SetTitle("Current WebviewWindow Size").SetMessage("Width: " + strconv.Itoa(width) + " Height: " + strconv.Itoa(height)).Show() // }) //}) // //sizeMenu.Add("Reset Min Size").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.SetMinSize(0, 0) // }) //}) // //sizeMenu.Add("Reset Max Size").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.SetMaxSize(0, 0) // w.SetFullscreenButtonEnabled(true) // }) //}) //positionMenu := menu.AddSubmenu("Position") //positionMenu.Add("Set Position (0,0)").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.SetPosition(0, 0) // }) //}) //positionMenu.Add("Set Position (Random)").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.SetPosition(rand.Intn(1000), rand.Intn(800)) // }) //}) // //positionMenu.Add("Get Position").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // x, y := w.Position() // app.InfoDialog().SetTitle("Current WebviewWindow Position").SetMessage("X: " + strconv.Itoa(x) + " Y: " + strconv.Itoa(y)).Show() // }) //}) // //positionMenu.Add("Center").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.Center() // }) //}) //stateMenu := menu.AddSubmenu("State") //stateMenu.Add("Minimise (for 2 secs)").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.Minimise() // time.Sleep(2 * time.Second) // w.Restore() // }) //}) //stateMenu.Add("Maximise").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.Maximise() // }) //}) //stateMenu.Add("Fullscreen").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.Fullscreen() // }) //}) //stateMenu.Add("UnFullscreen").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.UnFullscreen() // }) //}) //stateMenu.Add("Restore").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.Restore() // }) //}) //stateMenu.Add("Hide (for 2 seconds)").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.Hide() // time.Sleep(2 * time.Second) // w.Show() // }) //}) //stateMenu.Add("Always on Top").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.SetAlwaysOnTop(true) // }) //}) //stateMenu.Add("Not always on Top").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.SetAlwaysOnTop(false) // }) //}) //stateMenu.Add("Google.com").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.SetURL("https://google.com") // }) //}) //stateMenu.Add("wails.io").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // w.SetURL("https://wails.io") // }) //}) //stateMenu.Add("Get Primary Screen").OnClick(func(ctx *application.Context) { // screen, err := app.GetPrimaryScreen() // if err != nil { // app.ErrorDialog().SetTitle("Error").SetMessage(err.Error()).Show() // return // } // msg := fmt.Sprintf("Screen: %+v", screen) // app.InfoDialog().SetTitle("Primary Screen").SetMessage(msg).Show() //}) //stateMenu.Add("Get Screens").OnClick(func(ctx *application.Context) { // screens, err := app.GetScreens() // if err != nil { // app.ErrorDialog().SetTitle("Error").SetMessage(err.Error()).Show() // return // } // for _, screen := range screens { // msg := fmt.Sprintf("Screen: %+v", screen) // app.InfoDialog().SetTitle(fmt.Sprintf("Screen %s", screen.ID)).SetMessage(msg).Show() // } //}) //stateMenu.Add("Get Screen for WebviewWindow").OnClick(func(ctx *application.Context) { // currentWindow(func(w *application.WebviewWindow) { // screen, err := w.GetScreen() // if err != nil { // app.ErrorDialog().SetTitle("Error").SetMessage(err.Error()).Show() // return // } // msg := fmt.Sprintf("Screen: %+v", screen) // app.InfoDialog().SetTitle(fmt.Sprintf("Screen %s", screen.ID)).SetMessage(msg).Show() // }) //}) app.NewWebviewWindowWithOptions(application.WebviewWindowOptions{ Mac: application.MacWindow{ DisableShadow: true, }, }) //app.SetMenu(menu) err := app.Run() if err != nil { log.Fatal(err) } }