static gboolean on_manager_handle_add_account (GoaManager *manager, GDBusMethodInvocation *invocation, const gchar *provider_type, const gchar *identity, const gchar *presentation_identity, GVariant *credentials, GVariant *details, gpointer user_data) { GoaDaemon *daemon = GOA_DAEMON (user_data); AddAccountData *data; data = g_slice_new0 (AddAccountData); data->daemon = g_object_ref (daemon); data->manager = g_object_ref (manager); data->invocation = g_object_ref (invocation); data->provider_type = g_strdup (provider_type); data->identity = g_strdup (identity); data->presentation_identity = g_strdup (presentation_identity); data->credentials = g_variant_ref (credentials); data->details = g_variant_ref (details); goa_provider_get_all (get_all_providers_cb, data); return TRUE; /* invocation was handled */ }
int main (int argc, char **argv) { GetAllData data = {0,}; GoaProvider *provider; GList *l; data.loop = g_main_loop_new (NULL, FALSE); goa_provider_get_all (get_all_cb, &data); g_main_loop_run (data.loop); if (data.error != NULL) { g_printerr ("Failed to list providers: %s (%s, %d)\n", data.error->message, g_quark_to_string (data.error->domain), data.error->code); g_error_free (data.error); goto out; } for (l = data.providers; l != NULL; l = l->next) { char *provider_name; provider = GOA_PROVIDER (l->data); provider_name = goa_provider_get_provider_name (provider, NULL); g_print ("Got provider %s\n", provider_name); g_free (provider_name); provider = NULL; } out: g_main_loop_unref (data.loop); g_list_free_full (data.providers, g_object_unref); return 0; }
static void add_account (GoaPanel *panel) { GtkWindow *parent; GtkWidget *dialog; gint response; GList *providers; GList *l; GoaObject *object; GError *error; providers = NULL; parent = GTK_WINDOW (cc_shell_get_toplevel (cc_panel_get_shell (CC_PANEL (panel)))); dialog = goa_panel_add_account_dialog_new (panel->client); gtk_window_set_transient_for (GTK_WINDOW (dialog), parent); providers = goa_provider_get_all (); for (l = providers; l != NULL; l = l->next) { GoaProvider *provider; provider = GOA_PROVIDER (l->data); goa_panel_add_account_dialog_add_provider (GOA_PANEL_ADD_ACCOUNT_DIALOG (dialog), provider); } gtk_widget_show_all (dialog); response = gtk_dialog_run (GTK_DIALOG (dialog)); if (response != GTK_RESPONSE_OK) { gtk_widget_destroy (dialog); goto out; } error = NULL; object = goa_panel_add_account_dialog_get_account (GOA_PANEL_ADD_ACCOUNT_DIALOG (dialog), &error); gtk_widget_destroy (dialog); /* We might have an object even when error is set. * eg., if we failed to store the credentials in the keyring. */ if (object != NULL) { GtkTreeIter iter; /* navigate to newly created object */ if (goa_panel_accounts_model_get_iter_for_object (panel->accounts_model, object, &iter)) { gtk_tree_selection_select_iter (gtk_tree_view_get_selection (GTK_TREE_VIEW (panel->accounts_treeview)), &iter); } g_object_unref (object); } if (error != NULL) { if (!(error->domain == GOA_ERROR && error->code == GOA_ERROR_DIALOG_DISMISSED)) { dialog = gtk_message_dialog_new (parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error creating account")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", error->message); gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } g_error_free (error); } out: g_list_foreach (providers, (GFunc) g_object_unref, NULL); g_list_free (providers); }