github.com/secoba/wails/v2@v2.6.4/internal/frontend/desktop/darwin/menuitem.go (about) 1 //go:build darwin 2 // +build darwin 3 4 package darwin 5 6 /* 7 #cgo CFLAGS: -x objective-c 8 #cgo LDFLAGS: -framework Foundation -framework Cocoa -framework WebKit 9 #import <Foundation/Foundation.h> 10 #import "Application.h" 11 #import "WailsContext.h" 12 13 #include <stdlib.h> 14 */ 15 import "C" 16 17 import ( 18 "log" 19 "math" 20 "sync" 21 ) 22 23 var ( 24 menuItemToID = make(map[*MenuItem]uint) 25 idToMenuItem = make(map[uint]*MenuItem) 26 menuItemLock sync.Mutex 27 menuItemIDCounter uint = 0 28 ) 29 30 func createMenuItemID(item *MenuItem) uint { 31 menuItemLock.Lock() 32 defer menuItemLock.Unlock() 33 counter := 0 34 for { 35 menuItemIDCounter++ 36 value := idToMenuItem[menuItemIDCounter] 37 if value == nil { 38 break 39 } 40 counter++ 41 if counter == math.MaxInt { 42 log.Fatal("insane amounts of menuitems detected! Aborting before the collapse of the world!") 43 } 44 } 45 idToMenuItem[menuItemIDCounter] = item 46 menuItemToID[item] = menuItemIDCounter 47 return menuItemIDCounter 48 } 49 50 func getMenuItemForID(id uint) *MenuItem { 51 menuItemLock.Lock() 52 defer menuItemLock.Unlock() 53 return idToMenuItem[id] 54 }