github.com/secoba/wails/v2@v2.6.4/internal/frontend/desktop/darwin/callbacks.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  
    12  #include <stdlib.h>
    13  */
    14  import "C"
    15  
    16  import (
    17  	"errors"
    18  	"strconv"
    19  
    20  	"github.com/secoba/wails/v2/pkg/menu"
    21  )
    22  
    23  func (f *Frontend) handleCallback(menuItemID uint) error {
    24  	menuItem := getMenuItemForID(menuItemID)
    25  	if menuItem == nil {
    26  		return errors.New("unknown menuItem ID: " + strconv.Itoa(int(menuItemID)))
    27  	}
    28  
    29  	wailsMenuItem := menuItem.wailsMenuItem
    30  	if wailsMenuItem.Type == menu.CheckboxType {
    31  		wailsMenuItem.Checked = !wailsMenuItem.Checked
    32  		C.UpdateMenuItem(menuItem.nsmenuitem, bool2Cint(wailsMenuItem.Checked))
    33  	}
    34  	if wailsMenuItem.Type == menu.RadioType {
    35  		// Ignore if we clicked the item that is already checked
    36  		if !wailsMenuItem.Checked {
    37  			for _, item := range menuItem.radioGroupMembers {
    38  				if item.wailsMenuItem.Checked {
    39  					item.wailsMenuItem.Checked = false
    40  					C.UpdateMenuItem(item.nsmenuitem, C.int(0))
    41  				}
    42  			}
    43  			wailsMenuItem.Checked = true
    44  			C.UpdateMenuItem(menuItem.nsmenuitem, C.int(1))
    45  		}
    46  	}
    47  	if wailsMenuItem.Click != nil {
    48  		go wailsMenuItem.Click(&menu.CallbackData{MenuItem: wailsMenuItem})
    49  	}
    50  	return nil
    51  }