[gnome-control-center] online-accounts: use the async function to get all the providers
- From: Marco Barisione <mbari src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] online-accounts: use the async function to get all the providers
- Date: Thu, 22 Aug 2013 14:28:15 +0000 (UTC)
commit 82e6777cb1a32edb9c85b85c0c3768f9ca62c4c2
Author: Marco Barisione <marco barisione collabora co uk>
Date: Wed Aug 21 11:48:25 2013 +0100
online-accounts: use the async function to get all the providers
https://bugzilla.gnome.org/show_bug.cgi?id=706148
panels/online-accounts/cc-online-accounts-panel.c | 49 +++++++++++++++++----
1 files changed, 40 insertions(+), 9 deletions(-)
---
diff --git a/panels/online-accounts/cc-online-accounts-panel.c
b/panels/online-accounts/cc-online-accounts-panel.c
index 58bac85..bcec4fc 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,
/* ---------------------------------------------------------------------------------------------------- */
+typedef struct
+{
+ CcGoaPanel *panel;
+ GoaProvider *provider;
+ GVariant *preseed;
+} AddAccountData;
+
static void
-add_account (CcGoaPanel *panel,
- GoaProvider *provider,
- GVariant *preseed)
+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);
}
/* ---------------------------------------------------------------------------------------------------- */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]