diff options
author | David Zeuthen <davidz@redhat.com> | 2011-05-23 16:12:25 -0400 |
---|---|---|
committer | David Zeuthen <davidz@redhat.com> | 2011-05-23 16:12:25 -0400 |
commit | 489a0e997b8a09530ca374eec43d9f765bbc51e1 (patch) | |
tree | 0b65be774f0b9c84a8f29362a19573b3150a56c4 | |
parent | 510823f63256deacfcd83f91fcc82f7d30d44a43 (diff) |
GoaClient: Also handle ::interface-added and ::interface-removed signals
Signed-off-by: David Zeuthen <davidz@redhat.com>
-rw-r--r-- | src/goa/goaclient.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/goa/goaclient.c b/src/goa/goaclient.c index fb8d609..fa7232e 100644 --- a/src/goa/goaclient.c +++ b/src/goa/goaclient.c @@ -94,6 +94,14 @@ static void on_interface_proxy_properties_changed (GDBusObjectManagerClient *m GVariant *changed_properties, const gchar* const *invalidated_properties, gpointer user_data); +static void on_interface_added (GDBusObjectManager *manager, + GDBusObject *object, + GDBusInterface *interface, + gpointer user_data); +static void on_interface_removed (GDBusObjectManager *manager, + GDBusObject *object, + GDBusInterface *interface, + gpointer user_data); G_DEFINE_TYPE_WITH_CODE (GoaClient, goa_client, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init) @@ -113,6 +121,8 @@ goa_client_finalize (GObject *object) g_signal_handlers_disconnect_by_func (client->object_manager, G_CALLBACK (on_object_added), client); g_signal_handlers_disconnect_by_func (client->object_manager, G_CALLBACK (on_object_removed), client); g_signal_handlers_disconnect_by_func (client->object_manager, G_CALLBACK (on_interface_proxy_properties_changed), client); + g_signal_handlers_disconnect_by_func (client->object_manager, G_CALLBACK (on_interface_added), client); + g_signal_handlers_disconnect_by_func (client->object_manager, G_CALLBACK (on_interface_removed), client); g_object_unref (client->object_manager); } @@ -355,6 +365,14 @@ initable_init (GInitable *initable, "interface-proxy-properties-changed", G_CALLBACK (on_interface_proxy_properties_changed), client); + g_signal_connect (client->object_manager, + "interface-added", + G_CALLBACK (on_interface_added), + client); + g_signal_connect (client->object_manager, + "interface-removed", + G_CALLBACK (on_interface_removed), + client); ret = TRUE; @@ -498,3 +516,24 @@ on_interface_proxy_properties_changed (GDBusObjectManagerClient *manager, g_signal_emit (client, signals[ACCOUNT_CHANGED_SIGNAL], 0, object_proxy); } +static void +on_interface_added (GDBusObjectManager *manager, + GDBusObject *object, + GDBusInterface *interface, + gpointer user_data) +{ + GoaClient *client = GOA_CLIENT (user_data); + if (goa_object_peek_account (GOA_OBJECT (object)) != NULL) + g_signal_emit (client, signals[ACCOUNT_CHANGED_SIGNAL], 0, object); +} + +static void +on_interface_removed (GDBusObjectManager *manager, + GDBusObject *object, + GDBusInterface *interface, + gpointer user_data) +{ + GoaClient *client = GOA_CLIENT (user_data); + if (goa_object_peek_account (GOA_OBJECT (object)) != NULL) + g_signal_emit (client, signals[ACCOUNT_CHANGED_SIGNAL], 0, object); +} |