From a7862a4242bb9090df191e33a9d87f8e2693f12e Mon Sep 17 00:00:00 2001 From: scorpion-26 Date: Fri, 28 Jul 2023 18:56:51 +0200 Subject: [PATCH] SNI: Remove callback for erased items Should fix DBusNameVanished spam as found in https://github.com/scorpion-26/gBar/issues/29 --- src/SNI.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/SNI.cpp b/src/SNI.cpp index f97eac9..3dc6233 100644 --- a/src/SNI.cpp +++ b/src/SNI.cpp @@ -39,6 +39,8 @@ namespace SNI std::string menuObjectPath; EventBox* gtkEvent; + + int watcherID; }; std::vector items; @@ -272,13 +274,20 @@ namespace SNI if (it != items.end()) { LOG("SNI: " << name << " vanished!"); + g_bus_unwatch_name(it->watcherID); items.erase(it); InvalidateWidget(); + return; } - else + + auto toRegisterIt = clientsToQuery.find(name); + if (toRegisterIt != clientsToQuery.end()) { - LOG("SNI: Cannot remove unregistered bus name " << name); + clientsToQuery.erase(toRegisterIt); } + + LOG("SNI: Cannot remove unregistered bus name " << name); + return; } static void ItemPropertyChanged(GDBusConnection*, const char* senderName, const char* object, const char*, const char*, GVariant*, void* name) @@ -304,6 +313,7 @@ namespace SNI LOG("SNI: Actual object path: " << itemObjectPath) if (it != items.end()) { + g_bus_unwatch_name(it->watcherID); items.erase(it); } else @@ -325,8 +335,8 @@ namespace SNI LOG("SNI: Creating Item " << client.name << " " << client.object); Item item = CreateItem(std::move(client.name), std::move(client.object)); // Add handler for removing - g_bus_watch_name_on_connection(dbusConnection, item.name.c_str(), G_BUS_NAME_WATCHER_FLAGS_NONE, nullptr, DBusNameVanished, nullptr, - nullptr); + item.watcherID = g_bus_watch_name_on_connection(dbusConnection, item.name.c_str(), G_BUS_NAME_WATCHER_FLAGS_NONE, nullptr, + DBusNameVanished, nullptr, nullptr); // Add handler for icon change char* staticBuf = new char[item.name.size() + 1]{0x0};