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  }