mirror of
https://github.com/netbirdio/systray.git
synced 2026-05-22 17:08:41 -07:00
Fix hiding/showing submenus on Windows
This commit is contained in:
committed by
Seth Wright
parent
e2e5b48057
commit
e849b2a1b8
+11
-4
@@ -36,13 +36,12 @@ var (
|
||||
pCreatePopupMenu = u32.NewProc("CreatePopupMenu")
|
||||
pCreateWindowEx = u32.NewProc("CreateWindowExW")
|
||||
pDefWindowProc = u32.NewProc("DefWindowProcW")
|
||||
pDeleteMenu = u32.NewProc("DeleteMenu")
|
||||
pRemoveMenu = u32.NewProc("RemoveMenu")
|
||||
pDestroyWindow = u32.NewProc("DestroyWindow")
|
||||
pDispatchMessage = u32.NewProc("DispatchMessageW")
|
||||
pDrawIconEx = u32.NewProc("DrawIconEx")
|
||||
pGetCursorPos = u32.NewProc("GetCursorPos")
|
||||
pGetDC = u32.NewProc("GetDC")
|
||||
pGetMenuItemID = u32.NewProc("GetMenuItemID")
|
||||
pGetMessage = u32.NewProc("GetMessageW")
|
||||
pGetSystemMetrics = u32.NewProc("GetSystemMetrics")
|
||||
pInsertMenuItem = u32.NewProc("InsertMenuItemW")
|
||||
@@ -557,6 +556,14 @@ func (t *winTray) addOrUpdateMenuItem(menuItemId uint32, parentId uint32, title
|
||||
}
|
||||
|
||||
if res == 0 {
|
||||
// Menu item does not already exist, create it
|
||||
t.muMenus.RLock()
|
||||
submenu, exists := t.menus[menuItemId]
|
||||
t.muMenus.RUnlock()
|
||||
if exists {
|
||||
mi.Mask |= MIIM_SUBMENU
|
||||
mi.SubMenu = submenu
|
||||
}
|
||||
t.addToVisibleItems(parentId, menuItemId)
|
||||
position := t.getVisibleItemIndex(parentId, menuItemId)
|
||||
res, _, err = pInsertMenuItem.Call(
|
||||
@@ -613,14 +620,14 @@ func (t *winTray) addSeparatorMenuItem(menuItemId, parentId uint32) error {
|
||||
}
|
||||
|
||||
func (t *winTray) hideMenuItem(menuItemId, parentId uint32) error {
|
||||
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms647629(v=vs.85).aspx
|
||||
// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-removemenu
|
||||
const MF_BYCOMMAND = 0x00000000
|
||||
const ERROR_SUCCESS syscall.Errno = 0
|
||||
|
||||
t.muMenus.RLock()
|
||||
menu := uintptr(t.menus[parentId])
|
||||
t.muMenus.RUnlock()
|
||||
res, _, err := pDeleteMenu.Call(
|
||||
res, _, err := pRemoveMenu.Call(
|
||||
menu,
|
||||
uintptr(menuItemId),
|
||||
MF_BYCOMMAND,
|
||||
|
||||
Reference in New Issue
Block a user