commit c197f36640f0ef2f8c6c813823897d34bcd30a6a
parent c1fe8219bb91c10d451c17e36014434fc170cc49
Author: Janne Veteläinen <janne.vetelainen@elisanet.fi>
Date: Wed, 17 Apr 2024 13:13:26 +0300
Connect to menuitem action finalize callback
Instead of tracking the userdata manually
Diffstat:
3 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/dbusmenu.c b/dbusmenu.c
@@ -32,6 +32,14 @@ action_activated_cb(GSimpleAction *action, GVariant* param, ActionCallbackData *
}
+static void
+actioncbdata_finalize(ActionCallbackData *data, GClosure *closure)
+{
+ g_free(data);
+ data = NULL;
+}
+
+
static GSimpleAction*
create_action(uint32_t id, StatusNotifierItem *snitem)
{
@@ -41,9 +49,13 @@ create_action(uint32_t id, StatusNotifierItem *snitem)
ActionCallbackData *data = g_malloc(sizeof(ActionCallbackData));
data->id = id;
data->proxy = snitem->menuproxy;
- snitem->action_cb_data_slist = g_slist_prepend(snitem->action_cb_data_slist, data);
- g_signal_connect(action, "activate", G_CALLBACK(action_activated_cb), data);
+ g_signal_connect_data(action,
+ "activate",
+ G_CALLBACK(action_activated_cb),
+ data,
+ (GClosureNotify)actioncbdata_finalize,
+ G_CONNECT_DEFAULT);
g_free(action_name);
diff --git a/dwlbtray.h b/dwlbtray.h
@@ -36,7 +36,6 @@ typedef struct StatusNotifierHost {
typedef struct StatusNotifierItem {
GDBusProxy *menuproxy;
GDBusProxy *proxy;
- GSList *action_cb_data_slist;
GSimpleActionGroup *actiongroup;
GVariant *iconpixmap_v;
GdkPaintable *paintable;
diff --git a/statusnotifierhost.c b/statusnotifierhost.c
@@ -179,8 +179,6 @@ unregister_statusnotifieritem(StatusNotifierItem *snitem)
g_object_unref(snitem->menuproxy);
if (snitem->proxy)
g_object_unref(snitem->proxy);
- if (snitem->action_cb_data_slist)
- g_slist_free_full(snitem->action_cb_data_slist, g_free);
if (snitem->paintable) {
g_object_unref(snitem->paintable);