diff options
author | Dan Winship <danw@src.gnome.org> | 2000-05-29 05:29:56 +0800 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2000-05-29 05:29:56 +0800 |
commit | 0c991132ab6c7740e3f620fac986c7bd0c93542f (patch) | |
tree | 6f998b099befc3d2fc97694cb102b98438f5c6fb /mail/mail-config.c | |
parent | 28a05ec767c48e1f77eee0064c28fdad3ca9d73c (diff) | |
download | gsoc2013-evolution-0c991132ab6c7740e3f620fac986c7bd0c93542f.tar.gz gsoc2013-evolution-0c991132ab6c7740e3f620fac986c7bd0c93542f.tar.zst gsoc2013-evolution-0c991132ab6c7740e3f620fac986c7bd0c93542f.zip |
helper function since we need to set "modal" on the dialogs returned by
* mail-config.c (error_dialog): helper function since we need to
set "modal" on the dialogs returned by gnome_error_dialog to make
them work when popped up from the modal Druid.
(service_acceptable): New function to check if the info entered on
a store/transport page actually checks out.
(mail_config_druid): Connect to the "next" signal on the store and
transport pages and don't let the user continue if the data is
bad and "check this before continuing" is checked. Also, only
display sources/transports in the "mail" domain. (Ie, not
"vfolder".)
svn path=/trunk/; revision=3255
Diffstat (limited to 'mail/mail-config.c')
-rw-r--r-- | mail/mail-config.c | 98 |
1 files changed, 84 insertions, 14 deletions
diff --git a/mail/mail-config.c b/mail/mail-config.c index 513e7e66b0..cc5b840ef5 100644 --- a/mail/mail-config.c +++ b/mail/mail-config.c @@ -108,6 +108,26 @@ put_html (GtkHTML *html, char *text) } +/* Error helper */ +static void +error_dialog (GtkWidget *parent_finder, const char *fmt, ...) +{ + GtkWidget *parent, *dialog; + char *msg; + va_list ap; + + parent = gtk_widget_get_ancestor (parent_finder, GTK_TYPE_WINDOW); + + ap = va_start (ap, fmt); + msg = g_strdup_vprintf (fmt, ap); + va_end (ap); + + dialog = gnome_error_dialog_parented (msg, GTK_WINDOW (parent)); + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); + g_free (msg); +} + + /* Identity page */ static void @@ -147,12 +167,8 @@ identity_next (GnomeDruidPage *page, gpointer arg1, gpointer user_data) data = gtk_entry_get_text (addr); at = strchr (data, '@'); if (!at || !strchr (at + 1, '.')) { - GtkWidget *parent = - gtk_widget_get_ancestor (GTK_WIDGET (page), - GTK_TYPE_WINDOW); - gnome_error_dialog_parented ("Email address must be of the " - "form \"user@domain\".", - GTK_WINDOW (parent)); + error_dialog (GTK_WIDGET (page), "Email address must be " + "of the form \"user@domain\"."); return TRUE; } @@ -424,13 +440,12 @@ get_service_url (GtkObject *table) static void autodetect_cb (GtkWidget *button, GtkObject *table) { - char *url, *err; + char *url; CamelException *ex; CamelService *service; GList *authtypes; GtkHTML *html; GtkOptionMenu *optionmenu; - GtkWidget *parent; int type; type = GPOINTER_TO_UINT (gtk_object_get_data (table, "service_type")); @@ -452,13 +467,57 @@ autodetect_cb (GtkWidget *button, GtkObject *table) return; error: - err = g_strdup_printf ("Could not detect supported " - "authentication types:\n%s", - camel_exception_get_description (ex)); + error_dialog (button, "Could not detect supported authentication " + "types:\n%s", camel_exception_get_description (ex)); + camel_exception_free (ex); +} + +static gboolean +service_acceptable (GtkNotebook *notebook) +{ + char *url; + GtkWidget *table; + GtkToggleButton *check; + int page, type; + CamelService *service; + CamelException *ex; + gboolean ok; + + page = gtk_notebook_get_current_page (notebook); + table = gtk_notebook_get_nth_page (notebook, page); + check = gtk_object_get_data (GTK_OBJECT (table), "check"); + if (!check || !gtk_toggle_button_get_active (check)) + return TRUE; + + type = GPOINTER_TO_UINT (gtk_object_get_data (GTK_OBJECT (table), + "service_type")); + url = get_service_url (GTK_OBJECT (table)); + + ex = camel_exception_new (); + service = camel_session_get_service (session, url, type, ex); + g_free (url); + if (camel_exception_get_id (ex) != CAMEL_EXCEPTION_NONE) + goto error; + + ok = camel_service_connect (service, ex); + if (ok) + camel_service_disconnect (service, ex); + gtk_object_unref (GTK_OBJECT (service)); + + if (ok) + return TRUE; + + error: + error_dialog (GTK_WIDGET (notebook), + camel_exception_get_description (ex)); camel_exception_free (ex); - parent = gtk_widget_get_ancestor (button, GTK_TYPE_WINDOW); - gnome_error_dialog_parented (err, GTK_WINDOW (parent)); - g_free (err); + return FALSE; +} + +static gboolean +service_next (GnomeDruidPage *page, gpointer arg1, gpointer user_data) +{ + return !service_acceptable (user_data); } static void @@ -900,6 +959,9 @@ mail_config_druid (void) for (p = providers; p; p = p->next) { CamelProvider *prov = p->data; + if (strcmp (prov->domain, "mail") != 0) + continue; + if (prov->object_types[CAMEL_PROVIDER_STORE]) { sources = add_service (sources, CAMEL_PROVIDER_STORE, @@ -972,6 +1034,10 @@ mail_config_druid (void) gnome_druid_append_page (druid, GNOME_DRUID_PAGE (page)); gtk_signal_connect (GTK_OBJECT (page), "prepare", GTK_SIGNAL_FUNC (prepare_service), dpage->vbox); + gtk_signal_connect (GTK_OBJECT (page), "next", + GTK_SIGNAL_FUNC (service_next), + gtk_object_get_data (GTK_OBJECT (dpage->vbox), + "notebook")); gtk_widget_show (page); @@ -989,6 +1055,10 @@ mail_config_druid (void) gnome_druid_append_page (druid, GNOME_DRUID_PAGE (page)); gtk_signal_connect (GTK_OBJECT (page), "prepare", GTK_SIGNAL_FUNC (prepare_service), dpage->vbox); + gtk_signal_connect (GTK_OBJECT (page), "next", + GTK_SIGNAL_FUNC (service_next), + gtk_object_get_data (GTK_OBJECT (dpage->vbox), + "notebook")); gtk_widget_show (page); |