Skip to content

Commit e849b2a

Browse files
simonlindholmCrosse
authored andcommitted
Fix hiding/showing submenus on Windows
1 parent e2e5b48 commit e849b2a

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

systray_windows.go

+11-4
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,12 @@ var (
3636
pCreatePopupMenu = u32.NewProc("CreatePopupMenu")
3737
pCreateWindowEx = u32.NewProc("CreateWindowExW")
3838
pDefWindowProc = u32.NewProc("DefWindowProcW")
39-
pDeleteMenu = u32.NewProc("DeleteMenu")
39+
pRemoveMenu = u32.NewProc("RemoveMenu")
4040
pDestroyWindow = u32.NewProc("DestroyWindow")
4141
pDispatchMessage = u32.NewProc("DispatchMessageW")
4242
pDrawIconEx = u32.NewProc("DrawIconEx")
4343
pGetCursorPos = u32.NewProc("GetCursorPos")
4444
pGetDC = u32.NewProc("GetDC")
45-
pGetMenuItemID = u32.NewProc("GetMenuItemID")
4645
pGetMessage = u32.NewProc("GetMessageW")
4746
pGetSystemMetrics = u32.NewProc("GetSystemMetrics")
4847
pInsertMenuItem = u32.NewProc("InsertMenuItemW")
@@ -557,6 +556,14 @@ func (t *winTray) addOrUpdateMenuItem(menuItemId uint32, parentId uint32, title
557556
}
558557

559558
if res == 0 {
559+
// Menu item does not already exist, create it
560+
t.muMenus.RLock()
561+
submenu, exists := t.menus[menuItemId]
562+
t.muMenus.RUnlock()
563+
if exists {
564+
mi.Mask |= MIIM_SUBMENU
565+
mi.SubMenu = submenu
566+
}
560567
t.addToVisibleItems(parentId, menuItemId)
561568
position := t.getVisibleItemIndex(parentId, menuItemId)
562569
res, _, err = pInsertMenuItem.Call(
@@ -613,14 +620,14 @@ func (t *winTray) addSeparatorMenuItem(menuItemId, parentId uint32) error {
613620
}
614621

615622
func (t *winTray) hideMenuItem(menuItemId, parentId uint32) error {
616-
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms647629(v=vs.85).aspx
623+
// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-removemenu
617624
const MF_BYCOMMAND = 0x00000000
618625
const ERROR_SUCCESS syscall.Errno = 0
619626

620627
t.muMenus.RLock()
621628
menu := uintptr(t.menus[parentId])
622629
t.muMenus.RUnlock()
623-
res, _, err := pDeleteMenu.Call(
630+
res, _, err := pRemoveMenu.Call(
624631
menu,
625632
uintptr(menuItemId),
626633
MF_BYCOMMAND,

0 commit comments

Comments
 (0)