diff --git a/gdbus/client.c b/gdbus/client.c index 0311f9a4..369e3acf 100644 --- a/gdbus/client.c +++ b/gdbus/client.c @@ -62,6 +62,8 @@ struct GDBusProxy { char *match_rule; GDBusPropertyFunction prop_func; void *prop_data; + GDBusProxyFunction removed_func; + void *removed_data; }; struct prop_entry { @@ -394,6 +396,9 @@ static void proxy_free(gpointer data) proxy->client = NULL; } + if (proxy->removed_func) + proxy->removed_func(proxy, proxy->removed_data); + g_dbus_proxy_unref(proxy); } @@ -761,6 +766,18 @@ gboolean g_dbus_proxy_set_property_watch(GDBusProxy *proxy, return TRUE; } +gboolean g_dbus_proxy_set_removed_watch(GDBusProxy *proxy, + GDBusProxyFunction function, void *user_data) +{ + if (proxy == NULL) + return FALSE; + + proxy->removed_func = function; + proxy->removed_data = user_data; + + return TRUE; +} + static void refresh_properties(GDBusClient *client) { GList *list; diff --git a/gdbus/gdbus.h b/gdbus/gdbus.h index 6f5a0121..8b133939 100644 --- a/gdbus/gdbus.h +++ b/gdbus/gdbus.h @@ -341,6 +341,9 @@ typedef void (* GDBusPropertyFunction) (GDBusProxy *proxy, const char *name, gboolean g_dbus_proxy_set_property_watch(GDBusProxy *proxy, GDBusPropertyFunction function, void *user_data); +gboolean g_dbus_proxy_set_removed_watch(GDBusProxy *proxy, + GDBusProxyFunction destroy, void *user_data); + GDBusClient *g_dbus_client_new(DBusConnection *connection, const char *service, const char *path);