mirror of git://git.sysmocom.de/ofono
gdbus: Add callback support for handling property changes
This commit is contained in:
parent
f40f27cd44
commit
90c719f29c
|
@ -46,7 +46,8 @@ struct GDBusClient {
|
||||||
void *signal_data;
|
void *signal_data;
|
||||||
GDBusProxyFunction proxy_added;
|
GDBusProxyFunction proxy_added;
|
||||||
GDBusProxyFunction proxy_removed;
|
GDBusProxyFunction proxy_removed;
|
||||||
void *proxy_data;
|
GDBusPropertyFunction property_changed;
|
||||||
|
void *user_data;
|
||||||
GList *proxy_list;
|
GList *proxy_list;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -230,7 +231,7 @@ static void proxy_free(gpointer data)
|
||||||
GDBusClient *client = proxy->client;
|
GDBusClient *client = proxy->client;
|
||||||
|
|
||||||
if (client->proxy_removed)
|
if (client->proxy_removed)
|
||||||
client->proxy_removed(proxy, client->proxy_data);
|
client->proxy_removed(proxy, client->user_data);
|
||||||
|
|
||||||
modify_match(client->dbus_conn, "RemoveMatch",
|
modify_match(client->dbus_conn, "RemoveMatch",
|
||||||
proxy->match_rule);
|
proxy->match_rule);
|
||||||
|
@ -433,7 +434,16 @@ static void add_property(GDBusProxy *proxy, const char *name,
|
||||||
|
|
||||||
prop = g_hash_table_lookup(proxy->prop_list, name);
|
prop = g_hash_table_lookup(proxy->prop_list, name);
|
||||||
if (prop != NULL) {
|
if (prop != NULL) {
|
||||||
|
GDBusClient *client = proxy->client;
|
||||||
|
|
||||||
prop_entry_update(prop, &value);
|
prop_entry_update(prop, &value);
|
||||||
|
|
||||||
|
if (client == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (client->property_changed)
|
||||||
|
client->property_changed(proxy, name, &value,
|
||||||
|
client->user_data);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -518,6 +528,10 @@ static void properties_changed(GDBusClient *client, const char *path,
|
||||||
|
|
||||||
g_hash_table_remove(proxy->prop_list, name);
|
g_hash_table_remove(proxy->prop_list, name);
|
||||||
|
|
||||||
|
if (client->property_changed)
|
||||||
|
client->property_changed(proxy, name, NULL,
|
||||||
|
client->user_data);
|
||||||
|
|
||||||
dbus_message_iter_next(&entry);
|
dbus_message_iter_next(&entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -540,7 +554,7 @@ static void parse_properties(GDBusClient *client, const char *path,
|
||||||
update_properties(proxy, iter);
|
update_properties(proxy, iter);
|
||||||
|
|
||||||
if (client->proxy_added)
|
if (client->proxy_added)
|
||||||
client->proxy_added(proxy, client->proxy_data);
|
client->proxy_added(proxy, client->user_data);
|
||||||
|
|
||||||
client->proxy_list = g_list_append(client->proxy_list, proxy);
|
client->proxy_list = g_list_append(client->proxy_list, proxy);
|
||||||
}
|
}
|
||||||
|
@ -994,15 +1008,18 @@ gboolean g_dbus_client_set_signal_watch(GDBusClient *client,
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean g_dbus_client_set_proxy_handlers(GDBusClient *client,
|
gboolean g_dbus_client_set_proxy_handlers(GDBusClient *client,
|
||||||
GDBusProxyFunction added,
|
GDBusProxyFunction proxy_added,
|
||||||
GDBusProxyFunction removed, void *user_data)
|
GDBusProxyFunction proxy_removed,
|
||||||
|
GDBusPropertyFunction property_changed,
|
||||||
|
void *user_data)
|
||||||
{
|
{
|
||||||
if (client == NULL)
|
if (client == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
client->proxy_added = added;
|
client->proxy_added = proxy_added;
|
||||||
client->proxy_removed = removed;
|
client->proxy_removed = proxy_removed;
|
||||||
client->proxy_data = user_data;
|
client->property_changed = property_changed;
|
||||||
|
client->user_data = user_data;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -302,10 +302,14 @@ gboolean g_dbus_client_set_signal_watch(GDBusClient *client,
|
||||||
GDBusMessageFunction function, void *user_data);
|
GDBusMessageFunction function, void *user_data);
|
||||||
|
|
||||||
typedef void (* GDBusProxyFunction) (GDBusProxy *proxy, void *user_data);
|
typedef void (* GDBusProxyFunction) (GDBusProxy *proxy, void *user_data);
|
||||||
|
typedef void (* GDBusPropertyFunction) (GDBusProxy *proxy, const char *name,
|
||||||
|
DBusMessageIter *iter, void *user_data);
|
||||||
|
|
||||||
gboolean g_dbus_client_set_proxy_handlers(GDBusClient *client,
|
gboolean g_dbus_client_set_proxy_handlers(GDBusClient *client,
|
||||||
GDBusProxyFunction added,
|
GDBusProxyFunction proxy_added,
|
||||||
GDBusProxyFunction removed, void *user_data);
|
GDBusProxyFunction proxy_removed,
|
||||||
|
GDBusPropertyFunction property_changed,
|
||||||
|
void *user_data);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue