From 74461913304de718ad8792c91d034c41e2eefbb9 Mon Sep 17 00:00:00 2001 From: Brian Dwyer Date: Wed, 21 Dec 2022 14:47:45 -0500 Subject: [PATCH] Add unix support for removeMenuItem Signed-off-by: Brian Dwyer --- systray_menu_unix.go | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/systray_menu_unix.go b/systray_menu_unix.go index c0e64854..1ce9c067 100644 --- a/systray_menu_unix.go +++ b/systray_menu_unix.go @@ -253,6 +253,42 @@ func findSubLayout(id int32, vals []dbus.Variant) (*menuLayout, bool) { return nil, false } +func removeSubLayout(id int32, vals []dbus.Variant) ([]dbus.Variant, bool) { + for idx, i := range vals { + item := i.Value().(*menuLayout) + if item.V0 == id { + return append(vals[:idx], vals[idx+1:]...), true + } + + if len(item.V2) > 0 { + if child, removed := removeSubLayout(id, item.V2); removed { + return child, true + } + } + } + + return vals, false +} + +func removeMenuItem(item *MenuItem) { + instance.menuLock.Lock() + defer instance.menuLock.Unlock() + + parent := instance.menu + if item.parent != nil { + m, ok := findLayout(int32(item.parent.id)) + if !ok { + return + } + parent = m + } + + if items, removed := removeSubLayout(int32(item.id), parent.V2); removed { + parent.V2 = items + refresh() + } +} + func hideMenuItem(item *MenuItem) { instance.menuLock.Lock() defer instance.menuLock.Unlock()