aboutsummaryrefslogtreecommitdiffstats
path: root/mail/mail-account-gui.c
diff options
context:
space:
mode:
Diffstat (limited to 'mail/mail-account-gui.c')
-rw-r--r--mail/mail-account-gui.c140
1 files changed, 100 insertions, 40 deletions
diff --git a/mail/mail-account-gui.c b/mail/mail-account-gui.c
index 1335af7833..ed780a834b 100644
--- a/mail/mail-account-gui.c
+++ b/mail/mail-account-gui.c
@@ -45,7 +45,7 @@
#include <gtk/gtknotebook.h>
#include <gtk/gtkhbox.h>
#include <gtk/gtkdialog.h>
-#include <libgnome/gnome-i18n.h>
+#include <gtk/gtkstock.h>
#ifdef USE_GTKFILECHOOSER
#include <gtk/gtkfilechooser.h>
#include <gtk/gtkradiobutton.h>
@@ -528,7 +528,7 @@ mail_account_gui_transport_complete (MailAccountGui *gui, GtkWidget **incomplete
return FALSE;
/* FIXME? */
- if (gtk_toggle_button_get_active (gui->transport_needs_auth) &&
+ if (gtk_toggle_button_get_active (gui->transport.needs_auth) &&
CAMEL_PROVIDER_ALLOWS (gui->transport.provider, CAMEL_URL_PART_USER)) {
const char *text = gtk_entry_get_text (gui->transport.username);
@@ -844,9 +844,9 @@ transport_type_changed (GtkWidget *widget, gpointer user_data)
/* auth */
if (CAMEL_PROVIDER_ALLOWS (provider, CAMEL_URL_PART_AUTH) &&
!CAMEL_PROVIDER_NEEDS (provider, CAMEL_URL_PART_AUTH))
- gtk_widget_show (GTK_WIDGET (gui->transport_needs_auth));
+ gtk_widget_show (GTK_WIDGET (gui->transport.needs_auth));
else
- gtk_widget_hide (GTK_WIDGET (gui->transport_needs_auth));
+ gtk_widget_hide (GTK_WIDGET (gui->transport.needs_auth));
} else
gtk_widget_hide (frame);
@@ -865,7 +865,7 @@ transport_type_changed (GtkWidget *widget, gpointer user_data)
}
build_auth_menu (&gui->transport, provider->authtypes, NULL, FALSE);
- transport_needs_auth_toggled (gui->transport_needs_auth, gui);
+ transport_needs_auth_toggled (gui->transport.needs_auth, gui);
} else
gtk_widget_hide (frame);
@@ -881,38 +881,95 @@ service_changed (GtkEntry *entry, gpointer user_data)
service_complete (service, NULL, NULL));
}
+/* the fun of async ... */
+struct _service_check_data {
+ MailAccountGuiService *gsvc;
+ GtkWidget *dialog;
+ GtkWidget *window;
+
+ int id;
+ gulong destroy_id;
+ int destroyed:1;
+};
+
+static void
+service_check_done(const char *url, CamelProviderType type, GList *types, void *data)
+{
+ struct _service_check_data *sd = data;
+
+ if (!sd->destroyed) {
+ gtk_widget_set_sensitive(sd->window, TRUE);
+ build_auth_menu(sd->gsvc, sd->gsvc->provider->authtypes, types, TRUE);
+ }
+
+ if (sd->dialog) {
+ gtk_widget_destroy(sd->dialog);
+ sd->dialog = NULL;
+ }
+
+ if (sd->destroy_id)
+ g_signal_handler_disconnect(sd->window, sd->destroy_id);
+
+ g_free(sd);
+}
+
+static void
+service_check_response(GtkDialog *d, int button, struct _service_check_data *sd)
+{
+ mail_msg_cancel(sd->id);
+
+ gtk_widget_destroy(sd->dialog);
+ sd->dialog = NULL;
+}
+
+static void
+service_check_destroy(GtkWindow *w, struct _service_check_data *sd)
+{
+ sd->destroy_id = 0;
+ sd->destroyed = TRUE;
+ mail_msg_cancel(sd->id);
+}
+
static void
service_check_supported (GtkButton *button, gpointer user_data)
{
MailAccountGuiService *gsvc = user_data;
EAccountService *service;
- GList *authtypes = NULL;
+ GtkWidget *dialog;
GtkWidget *authitem;
- GtkWidget *window;
-
- service = g_new0 (EAccountService, 1);
-
+ struct _service_check_data *sd;
+
+ sd = g_malloc0(sizeof(*sd));
+ sd->id = -1;
+ sd->gsvc = gsvc;
+
/* This is sort of a hack, when checking for supported AUTH
types we don't want to use whatever authtype is selected
because it may not be available. */
+ service = g_malloc0(sizeof(*service));
authitem = gsvc->authitem;
gsvc->authitem = NULL;
-
save_service (gsvc, NULL, service);
-
gsvc->authitem = authitem;
-
- window = gtk_widget_get_ancestor (GTK_WIDGET (button), GTK_TYPE_WINDOW);
-
- if (mail_config_check_service (service->url, gsvc->provider_type, &authtypes, GTK_WINDOW (window))) {
- build_auth_menu (gsvc, gsvc->provider->authtypes, authtypes, TRUE);
- if (!authtypes) {
- /* provider doesn't support any authtypes */
- gtk_widget_set_sensitive (GTK_WIDGET (gsvc->check_supported), FALSE);
- }
- g_list_free (authtypes);
- }
-
+
+ sd->window = gtk_widget_get_toplevel((GtkWidget *)button);
+ sd->destroy_id = g_signal_connect(sd->window, "destroy", G_CALLBACK(service_check_destroy), sd);
+
+ gtk_widget_set_sensitive(sd->window, FALSE);
+ dialog = gtk_dialog_new_with_buttons(_("Connecting to server..."),
+ (GtkWindow *)sd->window,
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ NULL);
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),
+ gtk_label_new(_("Connecting to server...")),
+ TRUE, TRUE, 10);
+ g_signal_connect(dialog, "response", G_CALLBACK(service_check_response), sd);
+ gtk_widget_show_all(dialog);
+
+ sd->dialog = dialog;
+ sd->id = mail_check_service(service->url, gsvc->provider_type, service_check_done, sd);
+
g_free (service->url);
g_free (service);
}
@@ -1091,7 +1148,7 @@ mail_account_gui_build_extra_conf (MailAccountGui *gui, const char *url_string)
enable_widget = path_label;
} else {
/* make a new label */
- label = gtk_label_new_with_mnemonic (entries[i].text);
+ label = gtk_label_new (entries[i].text);
gtk_table_resize (cur_table, cur_table->nrows + 1, 2);
gtk_table_attach (cur_table, label, 0, 2, rows, rows + 1,
GTK_EXPAND | GTK_FILL, 0, 0, 0);
@@ -1106,7 +1163,7 @@ mail_account_gui_build_extra_conf (MailAccountGui *gui, const char *url_string)
GtkWidget *checkbox;
gboolean active;
- checkbox = gtk_check_button_new_with_mnemonic (entries[i].text);
+ checkbox = gtk_check_button_new_with_label (entries[i].text);
if (url)
active = camel_url_get_param (url, entries[i].name) != NULL;
else
@@ -1143,10 +1200,9 @@ mail_account_gui_build_extra_conf (MailAccountGui *gui, const char *url_string)
entry = path;
} else {
/* make a new text entry with label */
- label = gtk_label_new_with_mnemonic (entries[i].text);
+ label = gtk_label_new (entries[i].text);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
entry = gtk_entry_new ();
- gtk_label_set_mnemonic_widget (label, entry);
gtk_table_attach (cur_table, label, 0, 1, rows, rows + 1,
GTK_FILL, 0, 0, 0);
@@ -1212,7 +1268,7 @@ mail_account_gui_build_extra_conf (MailAccountGui *gui, const char *url_string)
}
hbox = gtk_hbox_new (FALSE, 0);
- checkbox = gtk_check_button_new_with_mnemonic (pre);
+ checkbox = gtk_check_button_new_with_label (pre);
g_free (pre);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkbox), enable);
adj = gtk_adjustment_new (def, min, max, 1, 1, 1);
@@ -1892,8 +1948,8 @@ mail_account_gui_new (EAccount *account, EMAccountPrefs *dialog)
gui->transport.use_ssl = GTK_OPTION_MENU (glade_xml_get_widget (gui->xml, "transport_use_ssl"));
construct_ssl_menu (&gui->transport);
gui->transport.no_ssl = glade_xml_get_widget (gui->xml, "transport_ssl_disabled");
- gui->transport_needs_auth = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "transport_needs_auth"));
- g_signal_connect (gui->transport_needs_auth, "toggled",
+ gui->transport.needs_auth = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "transport_needs_auth"));
+ g_signal_connect (gui->transport.needs_auth, "toggled",
G_CALLBACK (transport_needs_auth_toggled), gui);
gui->transport.authtype = GTK_OPTION_MENU (glade_xml_get_widget (gui->xml, "transport_auth_omenu"));
gui->transport.remember = GTK_TOGGLE_BUTTON (glade_xml_get_widget (gui->xml, "transport_remember_password"));
@@ -2173,7 +2229,7 @@ mail_account_gui_setup (MailAccountGui *gui, GtkWidget *top)
if (transport_proto) {
if (setup_service (gui, &gui->transport, gui->account->transport))
- gtk_toggle_button_set_active (gui->transport_needs_auth, TRUE);
+ gtk_toggle_button_set_active (gui->transport.needs_auth, TRUE);
gui->transport.provider_type = CAMEL_PROVIDER_TRANSPORT;
g_free (transport_proto);
}
@@ -2249,15 +2305,17 @@ save_service (MailAccountGuiService *gsvc, GHashTable *extra_config, EAccountSer
url->user = g_strstrip (g_strdup (str));
}
- if (CAMEL_PROVIDER_ALLOWS (gsvc->provider, CAMEL_URL_PART_AUTH) &&
- GTK_WIDGET_IS_SENSITIVE (gsvc->authtype) && gsvc->authitem && url->user) {
- CamelServiceAuthType *authtype;
-
- authtype = g_object_get_data(G_OBJECT(gsvc->authitem), "authtype");
- if (authtype && authtype->authproto && *authtype->authproto)
- url->authmech = g_strdup (authtype->authproto);
+ if (CAMEL_PROVIDER_ALLOWS (gsvc->provider, CAMEL_URL_PART_AUTH) && url->user) {
+ if (gsvc->needs_auth && gtk_toggle_button_get_active(gsvc->needs_auth)) {
+ CamelServiceAuthType *authtype;
- service->save_passwd = gtk_toggle_button_get_active (gsvc->remember);
+ authtype = g_object_get_data(G_OBJECT(gsvc->authitem), "authtype");
+ if (authtype && authtype->authproto && *authtype->authproto)
+ url->authmech = g_strdup (authtype->authproto);
+ }
+
+ if (gsvc->remember)
+ service->save_passwd = gtk_toggle_button_get_active (gsvc->remember);
}
if (CAMEL_PROVIDER_ALLOWS (gsvc->provider, CAMEL_URL_PART_HOST)) {
@@ -2444,6 +2502,8 @@ mail_account_gui_save (MailAccountGui *gui)
mail_config_save_accounts ();
+ mail_autoreceive_setup ();
+
return TRUE;
}