diff --git a/exp/examples/kitchensink/main.go b/exp/examples/kitchensink/main.go index 351ccdc51..679174f4b 100644 --- a/exp/examples/kitchensink/main.go +++ b/exp/examples/kitchensink/main.go @@ -77,6 +77,7 @@ func main() { mySystray.SetMenu(myMenu) }) + myMenu.Add("Not Enabled").SetEnabled(false) myMenu.AddSeparator() myMenu.AddCheckbox("My checkbox", true).OnClick(menuCallback) myMenu.AddSeparator() @@ -89,13 +90,17 @@ func main() { submenu.Add("Submenu item 2").OnClick(menuCallback) submenu.Add("Submenu item 3").OnClick(menuCallback) myMenu.AddSeparator() + file4 := myMenu.Add("File 4").OnClick(func(*application.Context) { + println("File 4 clicked") + }) - myMenu.Add("File 3").OnClick(menuCallback).SetTooltip("sdfsdfsdfsdf") - myMenu.Add("File 4").OnClick(menuCallback) + myMenu.Add("Click to toggle").OnClick(func(*application.Context) { + enabled := file4.Enabled() + println("Enabled: ", enabled) + file4.SetEnabled(!enabled) + }) myMenu.Add("File 5").OnClick(menuCallback) - //myMenu.AddSubmenu("File 6").OnClick(menuCallback) - mySystray := app.NewSystemTray() mySystray.SetLabel("Wails is awesome") if runtime.GOOS == "darwin" { diff --git a/exp/pkg/application/menuitem_darwin.go b/exp/pkg/application/menuitem_darwin.go index 68736fc71..acd2de5d9 100644 --- a/exp/pkg/application/menuitem_darwin.go +++ b/exp/pkg/application/menuitem_darwin.go @@ -14,10 +14,13 @@ void* newMenuItem(unsigned int menuItemID, char *label, bool disabled, char* too // Label menuItem.title = [NSString stringWithUTF8String:label]; - // Process callback + if( disabled ) { + [menuItem setTarget:nil]; + } else { + [menuItem setTarget:menuItem]; + } menuItem.menuItemID = menuItemID; menuItem.action = @selector(handleClick); - menuItem.target = menuItem; menuItem.enabled = !disabled; // Tooltip @@ -38,10 +41,20 @@ void setMenuItemLabel(void* nsMenuItem, char *label) { menuItem.title = [NSString stringWithUTF8String:label]; } + // set menu item disabled void setMenuItemDisabled(void* nsMenuItem, bool disabled) { - MenuItem *menuItem = (MenuItem *)nsMenuItem; - menuItem.enabled = !disabled; + dispatch_async(dispatch_get_main_queue(), ^{ + MenuItem *menuItem = (MenuItem *)nsMenuItem; + printf("setMenuItemDisabled: %d\n", disabled); + [menuItem setEnabled:!disabled]; + // remove target + if( disabled ) { + [menuItem setTarget:nil]; + } else { + [menuItem setTarget:menuItem]; + } + }); } // set menu item tooltip