From 9c1da3a631fbf0a771bcff2f071cc5ab7bdf309c Mon Sep 17 00:00:00 2001 From: blinxen Date: Mon, 13 Oct 2025 21:28:33 +0200 Subject: [PATCH] Close dbus menu when unregistering sni --- include/swaybar/tray/dbusmenu.h | 2 ++ swaybar/tray/host.c | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/swaybar/tray/dbusmenu.h b/include/swaybar/tray/dbusmenu.h index dc90f6e57..701fdb823 100644 --- a/include/swaybar/tray/dbusmenu.h +++ b/include/swaybar/tray/dbusmenu.h @@ -8,6 +8,8 @@ void swaybar_dbusmenu_open(struct swaybar_sni *sni, struct swaybar_output *output, struct swaybar_seat *seat, uint32_t serial, int x, int y); +void swaybar_dbusmenu_destroy(struct swaybar_dbusmenu *menu); + bool dbusmenu_pointer_button(void *data, struct wl_pointer *wl_pointer, uint32_t serial, uint32_t time_, uint32_t button, uint32_t state); diff --git a/swaybar/tray/host.c b/swaybar/tray/host.c index 79b54606f..aa00199f4 100644 --- a/swaybar/tray/host.c +++ b/swaybar/tray/host.c @@ -7,6 +7,7 @@ #include "swaybar/tray/host.h" #include "swaybar/tray/item.h" #include "swaybar/tray/tray.h" +#include "swaybar/tray/dbusmenu.h" #include "list.h" #include "log.h" #include "stringop.h" @@ -55,7 +56,9 @@ static int handle_sni_unregistered(sd_bus_message *msg, void *data, int idx = list_seq_find(tray->items, cmp_sni_id, id); if (idx != -1) { sway_log(SWAY_INFO, "Unregistering Status Notifier Item '%s'", id); - destroy_sni(tray->items->items[idx]); + struct swaybar_sni *sni = tray->items->items[idx]; + swaybar_dbusmenu_destroy(sni->tray->menu); + destroy_sni(sni); list_del(tray->items, idx); set_bar_dirty(tray->bar); }