diff --git a/systray.go b/systray.go index 406414f..73fdde2 100644 --- a/systray.go +++ b/systray.go @@ -134,7 +134,7 @@ func ResetMenu() { id := currentID.Load() menuItemsLock.Unlock() for i, item := range menuItems { - if i < id { + if i < id && item.parent == nil { item.Remove() } } @@ -232,6 +232,17 @@ func (item *MenuItem) Hide() { // Remove removes a menu item func (item *MenuItem) Remove() { + menuItemsLock.RLock() + childList := make([]*MenuItem, 0, len(menuItems)) + for _, child := range menuItems { + if child.parent == item { + childList = append(childList, child) + } + } + menuItemsLock.RUnlock() + for _, child := range childList { + child.Remove() + } removeMenuItem(item) menuItemsLock.Lock() delete(menuItems, item.id)