static void manager_new_ready (GDBusConnection *connection, GAsyncResult *res, GSimpleAsyncResult *simple) { MMManager *manager; gchar *name_owner; GError *error = NULL; manager = mm_manager_new_finish (res, &error); if (!manager) { g_printerr ("error: couldn't create manager: %s\n", error ? error->message : "unknown error"); exit (EXIT_FAILURE); } name_owner = g_dbus_object_manager_client_get_name_owner (G_DBUS_OBJECT_MANAGER_CLIENT (manager)); if (!name_owner) { g_printerr ("error: couldn't find the ModemManager process in the bus\n"); exit (EXIT_FAILURE); } g_debug ("ModemManager process found at '%s'", name_owner); g_free (name_owner); g_simple_async_result_set_op_res_gpointer (simple, manager, NULL); g_simple_async_result_complete (simple); g_object_unref (simple); }
static void on_manager_new_ready (GObject *source_object, GAsyncResult *res, gpointer user_data) { GClueModemSourcePrivate *priv = GCLUE_MODEM_SOURCE (user_data)->priv; GList *objects, *node; GError *error = NULL; priv->manager = mm_manager_new_finish (res, &error); if (priv->manager == NULL) { g_warning ("Failed to connect to ModemManager: %s", error->message); g_error_free (error); return; } objects = g_dbus_object_manager_get_objects (G_DBUS_OBJECT_MANAGER (priv->manager)); for (node = objects; node != NULL; node = node->next) { on_mm_object_added (G_DBUS_OBJECT_MANAGER (priv->manager), G_DBUS_OBJECT (node->data), user_data); /* FIXME: Currently we only support 1 modem device */ if (priv->modem != NULL) break; } g_list_free_full (objects, g_object_unref); g_signal_connect (G_OBJECT (priv->manager), "object-added", G_CALLBACK (on_mm_object_added), user_data); g_signal_connect (G_OBJECT (priv->manager), "object-removed", G_CALLBACK (on_mm_object_removed), user_data); }