[gnome-online-accounts] exchange: Show a spinner and don't block the UI during autodiscover
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-online-accounts] exchange: Show a spinner and don't block the UI during autodiscover
- Date: Sat, 21 Apr 2012 14:55:59 +0000 (UTC)
commit 729f92f8aed7430fbafa6ec67630ccf501179101
Author: Debarshi Ray <debarshir gnome org>
Date: Sat Apr 21 16:53:46 2012 +0200
exchange: Show a spinner and don't block the UI during autodiscover
src/goabackend/goaexchangeprovider.c | 51 ++++++++++++++++++++++++++--------
1 files changed, 39 insertions(+), 12 deletions(-)
---
diff --git a/src/goabackend/goaexchangeprovider.c b/src/goabackend/goaexchangeprovider.c
index 93d5839..ff4c99d 100644
--- a/src/goabackend/goaexchangeprovider.c
+++ b/src/goabackend/goaexchangeprovider.c
@@ -359,6 +359,7 @@ typedef struct
GtkWidget *cluebar;
GtkWidget *cluebar_label;
+ GtkWidget *spinner;
GtkWidget *email_address;
GtkWidget *password;
@@ -434,6 +435,7 @@ on_email_address_or_password_changed (GtkEditable *editable, gpointer user_data)
static void
create_account_details_ui (GtkBox *vbox, gboolean new_account, AddAccountData *data)
{
+ GtkWidget *header_grid;
GtkWidget *grid1;
GtkWidget *grid2;
GtkWidget *hbox;
@@ -450,7 +452,12 @@ create_account_details_ui (GtkBox *vbox, gboolean new_account, AddAccountData *d
gtk_container_add (GTK_CONTAINER (gtk_info_bar_get_content_area (GTK_INFO_BAR (data->cluebar))),
data->cluebar_label);
+ header_grid = gtk_grid_new ();
+ gtk_orientable_set_orientation (GTK_ORIENTABLE (header_grid), GTK_ORIENTATION_HORIZONTAL);
+ gtk_box_pack_start (vbox, header_grid, FALSE, FALSE, 0);
+
label = gtk_label_new (NULL);
+ gtk_widget_set_hexpand (label, TRUE);
markup = g_strconcat ("<b>",
(new_account) ? _("New Microsoft Exchange Account") : _("Microsoft Exchange Account"),
"</b>",
@@ -458,7 +465,11 @@ create_account_details_ui (GtkBox *vbox, gboolean new_account, AddAccountData *d
gtk_label_set_markup (GTK_LABEL (label), markup);
g_free (markup);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_box_pack_start (vbox, label, FALSE, FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (header_grid), label);
+
+ data->spinner = gtk_spinner_new ();
+ gtk_widget_set_no_show_all (data->spinner, TRUE);
+ gtk_container_add (GTK_CONTAINER (header_grid), data->spinner);
grid1 = gtk_grid_new ();
gtk_orientable_set_orientation (GTK_ORIENTABLE (grid1), GTK_ORIENTATION_VERTICAL);
@@ -507,6 +518,18 @@ add_account_cb (GoaManager *manager, GAsyncResult *res, gpointer user_data)
g_main_loop_quit (data->loop);
}
+static void
+autodiscover_cb (GObject *source_object, GAsyncResult *res, gpointer user_data)
+{
+ GoaEwsClient *client = GOA_EWS_CLIENT (source_object);
+ AddAccountData *data = user_data;
+
+ goa_ews_client_autodiscover_finish (client, res, &data->error);
+ g_main_loop_quit (data->loop);
+ gtk_spinner_stop (GTK_SPINNER (data->spinner));
+ gtk_widget_hide (data->spinner);
+}
+
/* ---------------------------------------------------------------------------------------------------- */
static GoaObject *
@@ -517,7 +540,6 @@ add_account (GoaProvider *provider,
GError **error)
{
AddAccountData data;
- GError *local_error;
GVariantBuilder builder;
GoaEwsClient *ews_client;
GoaObject *ret;
@@ -568,21 +590,26 @@ add_account (GoaProvider *provider,
&data.error))
goto out;
- local_error = NULL;
- if (!goa_ews_client_autodiscover_sync (ews_client,
- email_address,
- password,
- username,
- server,
- NULL,
- &local_error))
+ goa_ews_client_autodiscover (ews_client,
+ email_address,
+ password,
+ username,
+ server,
+ NULL,
+ autodiscover_cb,
+ &data);
+ gtk_spinner_start (GTK_SPINNER (data.spinner));
+ gtk_widget_show (data.spinner);
+ g_main_loop_run (data.loop);
+
+ if (data.error != NULL)
{
gchar *markup;
markup = g_strdup_printf ("<b>%s:</b> %s",
_("Error connecting to Microsoft Exchange server"),
- local_error->message);
- g_error_free (local_error);
+ data.error->message);
+ g_clear_error (&data.error);
gtk_label_set_markup (GTK_LABEL (data.cluebar_label), markup);
g_free (markup);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]