aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Winship <danw@src.gnome.org>2000-05-29 05:29:56 +0800
committerDan Winship <danw@src.gnome.org>2000-05-29 05:29:56 +0800
commit0c991132ab6c7740e3f620fac986c7bd0c93542f (patch)
tree6f998b099befc3d2fc97694cb102b98438f5c6fb
parent28a05ec767c48e1f77eee0064c28fdad3ca9d73c (diff)
downloadgsoc2013-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/ChangeLog11
-rw-r--r--mail/mail-config.c98
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);