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 | |
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
-rw-r--r-- | mail/ChangeLog | 11 | ||||
-rw-r--r-- | mail/mail-config.c | 98 |
2 files changed, 95 insertions, 14 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index 169f836809..f4c9dc1172 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,5 +1,16 @@ 2000-05-28 Dan Winship <danw@helixcode.com> + * 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".) + * mail-format.c (write_recipients_to_stream): Use `foo@bar' rather than `<foo@bar>' for recipient with no name. 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); |