From 82e6777cb1a32edb9c85b85c0c3768f9ca62c4c2 Mon Sep 17 00:00:00 2001 From: Marco Barisione Date: Wed, 21 Aug 2013 11:48:25 +0100 Subject: [PATCH] online-accounts: use the async function to get all the providers https://bugzilla.gnome.org/show_bug.cgi?id=706148 --- .../cc-online-accounts-panel.c | 51 +++++++++++++++---- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/panels/online-accounts/cc-online-accounts-panel.c b/panels/online-accounts/cc-online-accounts-panel.c index 58bac85fe..bcec4fc17 100644 --- a/panels/online-accounts/cc-online-accounts-panel.c +++ b/panels/online-accounts/cc-online-accounts-panel.c @@ -682,11 +682,19 @@ on_model_row_inserted (GtkTreeModel *tree_model, /* ---------------------------------------------------------------------------------------------------- */ -static void -add_account (CcGoaPanel *panel, - GoaProvider *provider, - GVariant *preseed) +typedef struct { + CcGoaPanel *panel; + GoaProvider *provider; + GVariant *preseed; +} AddAccountData; + +static void +get_all_providers_cb (GObject *source, + GAsyncResult *res, + gpointer user_data) +{ + AddAccountData *data = user_data; GtkWindow *parent; GtkWidget *dialog; GList *providers; @@ -694,12 +702,15 @@ add_account (CcGoaPanel *panel, GoaObject *object; GError *error; - parent = GTK_WINDOW (cc_shell_get_toplevel (cc_panel_get_shell (CC_PANEL (panel)))); + providers = NULL; + if (!goa_provider_get_all_finish (&providers, res, NULL)) + goto out; - dialog = goa_panel_add_account_dialog_new (panel->client); + parent = GTK_WINDOW (cc_shell_get_toplevel (cc_panel_get_shell (CC_PANEL (data->panel)))); + + dialog = goa_panel_add_account_dialog_new (data->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; @@ -709,7 +720,7 @@ add_account (CcGoaPanel *panel, } goa_panel_add_account_dialog_set_preseed_data (GOA_PANEL_ADD_ACCOUNT_DIALOG (dialog), - provider, preseed); + data->provider, data->preseed); gtk_widget_show_all (dialog); goa_panel_add_account_dialog_run (GOA_PANEL_ADD_ACCOUNT_DIALOG (dialog)); @@ -726,11 +737,11 @@ add_account (CcGoaPanel *panel, { GtkTreeIter iter; /* navigate to newly created object */ - if (goa_panel_accounts_model_get_iter_for_object (panel->accounts_model, + if (goa_panel_accounts_model_get_iter_for_object (data->panel->accounts_model, object, &iter)) { - gtk_tree_selection_select_iter (gtk_tree_view_get_selection (GTK_TREE_VIEW (panel->accounts_treeview)), + gtk_tree_selection_select_iter (gtk_tree_view_get_selection (GTK_TREE_VIEW (data->panel->accounts_treeview)), &iter); } g_object_unref (object); @@ -756,6 +767,26 @@ add_account (CcGoaPanel *panel, } g_list_free_full (providers, g_object_unref); + +out: + g_clear_object (&data->panel); + g_clear_object (&data->provider); + g_clear_pointer (&data->preseed, g_variant_unref); + g_slice_free (AddAccountData, data); +} + +static void +add_account (CcGoaPanel *panel, + GoaProvider *provider, + GVariant *preseed) +{ + AddAccountData *data; + + data = g_slice_new0 (AddAccountData); + data->panel = g_object_ref_sink (panel); + data->provider = (provider != NULL ? g_object_ref (provider) : NULL); + data->preseed = (preseed != NULL ? g_variant_ref (preseed) : NULL); + goa_provider_get_all (get_all_providers_cb, data); } /* ---------------------------------------------------------------------------------------------------- */