dwlb

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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:
Mdbusmenu.c | 16++++++++++++++--
Mdwlbtray.h | 1-
Mstatusnotifierhost.c | 2--
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);