| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package glfw
- import (
- "fyne.io/fyne/v2"
- )
- func buildMenuOverlay(menus *fyne.MainMenu, w *window) fyne.CanvasObject {
- if len(menus.Items) == 0 {
- fyne.LogError("Main menu must have at least one child menu", nil)
- return nil
- }
- menus = addMissingQuitForMainMenu(menus, w)
- return NewMenuBar(menus, w.canvas)
- }
- func addMissingQuitForMainMenu(menus *fyne.MainMenu, w *window) *fyne.MainMenu {
- var lastItem *fyne.MenuItem
- if len(menus.Items[0].Items) > 0 {
- lastItem = menus.Items[0].Items[len(menus.Items[0].Items)-1]
- if lastItem.Label == "Quit" {
- lastItem.IsQuit = true
- }
- }
- if lastItem == nil || !lastItem.IsQuit { // make sure the first menu always has a quit option
- quitItem := fyne.NewMenuItem("Quit", nil)
- quitItem.IsQuit = true
- menus.Items[0].Items = append(menus.Items[0].Items, fyne.NewMenuItemSeparator(), quitItem)
- }
- for _, item := range menus.Items[0].Items {
- if item.IsQuit && item.Action == nil {
- item.Action = func() {
- for _, win := range w.driver.AllWindows() {
- if glWin, ok := win.(*window); ok {
- glWin.closed(glWin.view())
- } else {
- win.Close() // for test windows
- }
- }
- }
- }
- }
- return menus
- }
|