[gnome-bluetooth] lib: Fix updating device and adapter list after initialization



commit d09e649252e207b5880d22e9dfb1928fb171db34
Author: Benjamin Berg <bberg redhat com>
Date:   Wed Nov 22 15:11:13 2017 +0100

    lib: Fix updating device and adapter list after initialization
    
    Patch 17983ace (lib: Use GDBusObjectManager) only added listeners for
    interface-added and interface-removed. However, as GDBusObjectManager
    simplifies the API to emit object-added/-removed those have to be
    listened for changes too.
    
    Without this the list of bluetooth devices and adapters is never updated
    after the initial object listing.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=790714

 lib/bluetooth-client.c |   33 +++++++++++++++++++++++++++++++++
 1 files changed, 33 insertions(+), 0 deletions(-)
---
diff --git a/lib/bluetooth-client.c b/lib/bluetooth-client.c
index c3eec76..7abb437 100644
--- a/lib/bluetooth-client.c
+++ b/lib/bluetooth-client.c
@@ -783,6 +783,36 @@ interface_removed (GDBusObjectManager *manager,
 }
 
 static void
+object_added (GDBusObjectManager *manager,
+             GDBusObject        *object,
+             BluetoothClient    *client)
+{
+       GList *interfaces, *l;
+
+       interfaces = g_dbus_object_get_interfaces (object);
+
+       for (l = interfaces; l != NULL; l = l->next)
+               interface_added (manager, object, G_DBUS_INTERFACE (l->data), client);
+
+       g_list_free_full (interfaces, g_object_unref);
+}
+
+static void
+object_removed (GDBusObjectManager *manager,
+               GDBusObject        *object,
+               BluetoothClient    *client)
+{
+       GList *interfaces, *l;
+
+       interfaces = g_dbus_object_get_interfaces (object);
+
+       for (l = interfaces; l != NULL; l = l->next)
+               interface_removed (manager, object, G_DBUS_INTERFACE (l->data), client);
+
+       g_list_free_full (interfaces, g_object_unref);
+}
+
+static void
 object_manager_new_callback(GObject      *source_object,
                            GAsyncResult *res,
                            void         *user_data)
@@ -802,6 +832,9 @@ object_manager_new_callback(GObject      *source_object,
        g_signal_connect (G_OBJECT (priv->manager), "interface-added", (GCallback) interface_added, client);
        g_signal_connect (G_OBJECT (priv->manager), "interface-removed", (GCallback) interface_removed, 
client);
 
+       g_signal_connect (G_OBJECT (priv->manager), "object-added", (GCallback) object_added, client);
+       g_signal_connect (G_OBJECT (priv->manager), "object-removed", (GCallback) object_removed, client);
+
        object_list = g_dbus_object_manager_get_objects (priv->manager);
 
        /* We need to add the adapters first, otherwise the devices will


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]