Fix hidden menuItem on windows

And bring menu_windows into alignment with popupmenu_windows
This commit is contained in:
Ian VanSchooten 2025-03-06 14:00:40 -05:00 committed by Lea Anthony
commit b733b1d3c4
No known key found for this signature in database
GPG key ID: 33DAF7BB90A58405
2 changed files with 27 additions and 13 deletions

View file

@ -36,6 +36,14 @@ func (w *windowsMenu) update() {
func (w *windowsMenu) processMenu(parentMenu w32.HMENU, inputMenu *Menu) {
for _, item := range inputMenu.items {
w.currentMenuID++
itemID := w.currentMenuID
w.menuMapping[itemID] = item
menuItemImpl := newMenuItemImpl(item, parentMenu, itemID)
menuItemImpl.parent = inputMenu
item.impl = menuItemImpl
if item.Hidden() {
if item.accelerator != nil && item.callback != nil {
if w.parentWindow != nil {
@ -44,11 +52,7 @@ func (w *windowsMenu) processMenu(parentMenu w32.HMENU, inputMenu *Menu) {
globalApplication.removeKeyBinding(item.accelerator.String())
}
}
continue
}
w.currentMenuID++
itemID := w.currentMenuID
w.menuMapping[itemID] = item
flags := uint32(w32.MF_STRING)
if item.disabled {
@ -84,6 +88,11 @@ func (w *windowsMenu) processMenu(parentMenu w32.HMENU, inputMenu *Menu) {
}
var menuText = w32.MustStringToUTF16Ptr(thisText)
// If the item is hidden, don't append
if item.Hidden() {
continue
}
w32.AppendMenu(parentMenu, flags, uintptr(itemID), menuText)
if item.bitmap != nil {
w32.SetMenuIcons(parentMenu, itemID, item.bitmap, nil)

View file

@ -61,6 +61,14 @@ func (p *Win32Menu) newMenu() w32.HMENU {
func (p *Win32Menu) buildMenu(parentMenu w32.HMENU, inputMenu *Menu) {
currentRadioGroup := RadioGroup{}
for _, item := range inputMenu.items {
p.currentMenuID++
itemID := p.currentMenuID
p.menuMapping[itemID] = item
menuItemImpl := newMenuItemImpl(item, parentMenu, itemID)
menuItemImpl.parent = inputMenu
item.impl = menuItemImpl
if item.Hidden() {
if item.accelerator != nil {
if p.parentWindow != nil {
@ -71,14 +79,7 @@ func (p *Win32Menu) buildMenu(parentMenu w32.HMENU, inputMenu *Menu) {
globalApplication.removeKeyBinding(item.accelerator.String())
}
}
continue
}
p.currentMenuID++
itemID := p.currentMenuID
p.menuMapping[itemID] = item
menuItemImpl := newMenuItemImpl(item, parentMenu, itemID)
menuItemImpl.parent = inputMenu
flags := uint32(w32.MF_STRING)
if item.disabled {
@ -131,6 +132,12 @@ func (p *Win32Menu) buildMenu(parentMenu w32.HMENU, inputMenu *Menu) {
}
}
}
// If the item is hidden, don't append
if item.Hidden() {
continue
}
ok := w32.AppendMenu(parentMenu, flags, uintptr(itemID), w32.MustStringToUTF16Ptr(menuText))
if !ok {
globalApplication.fatal("error adding menu item '%s'", menuText)
@ -141,8 +148,6 @@ func (p *Win32Menu) buildMenu(parentMenu w32.HMENU, inputMenu *Menu) {
globalApplication.fatal("error setting menu icons: %w", err)
}
}
item.impl = menuItemImpl
}
if len(currentRadioGroup) > 0 {
for _, radioMember := range currentRadioGroup {