aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/e-mail-config-assistant.c77
1 files changed, 73 insertions, 4 deletions
diff --git a/mail/e-mail-config-assistant.c b/mail/e-mail-config-assistant.c
index aceeacc73e..62944943f4 100644
--- a/mail/e-mail-config-assistant.c
+++ b/mail/e-mail-config-assistant.c
@@ -35,6 +35,9 @@
(G_TYPE_INSTANCE_GET_PRIVATE \
((obj), E_TYPE_MAIL_CONFIG_ASSISTANT, EMailConfigAssistantPrivate))
+/* GtkAssistant's back button label. */
+#define BACK_BUTTON_LABEL N_("Go _Back")
+
typedef struct _AutoconfigContext AutoconfigContext;
struct _EMailConfigAssistantPrivate {
@@ -47,7 +50,10 @@ struct _EMailConfigAssistantPrivate {
EMailConfigSummaryPage *summary_page;
EMailConfigPage *lookup_page;
GHashTable *visited_pages;
- gboolean auto_configure_done;
+ gboolean auto_configured;
+
+ /* GtkAssistant owns this. */
+ GtkButton *back_button; /* not referenced */
};
struct _AutoconfigContext {
@@ -273,9 +279,6 @@ mail_config_assistant_autoconfigure_cb (GObject *source_object,
context = (AutoconfigContext *) user_data;
priv = E_MAIL_CONFIG_ASSISTANT_GET_PRIVATE (context->assistant);
- /* Whether it works or not, we only do this once. */
- priv->auto_configure_done = TRUE;
-
autoconfig = e_mail_autoconfig_finish (result, &error);
/* We don't really care about errors, we only capture the GError
@@ -292,6 +295,9 @@ mail_config_assistant_autoconfigure_cb (GObject *source_object,
/* Autoconfiguration worked! Feed the results to the
* service pages and then skip to the Summary page. */
+ /* For the summary page... */
+ priv->auto_configured = TRUE;
+
e_mail_config_service_page_auto_configure (
priv->receiving_page, autoconfig);
@@ -395,6 +401,40 @@ mail_config_assistant_close_cb (GObject *object,
}
static void
+mail_config_assistant_find_back_button_cb (GtkWidget *widget,
+ gpointer user_data)
+{
+ EMailConfigAssistant *assistant;
+
+ assistant = E_MAIL_CONFIG_ASSISTANT (user_data);
+
+ if (GTK_IS_BUTTON (widget)) {
+ GtkButton *button;
+ const gchar *gtk_label;
+ const gchar *our_label;
+
+ button = GTK_BUTTON (widget);
+
+ /* XXX The gtkassistant.ui file assigns the back button
+ * an ID of "back", but I don't think we have access
+ * to it from here. I guess just compare by label,
+ * and hope our translation matches GTK's. Yuck. */
+
+ gtk_label = gtk_button_get_label (button);
+ our_label = gettext (BACK_BUTTON_LABEL);
+
+ if (g_strcmp0 (gtk_label, our_label) == 0)
+ assistant->priv->back_button = button;
+
+ } else if (GTK_IS_CONTAINER (widget)) {
+ gtk_container_forall (
+ GTK_CONTAINER (widget),
+ mail_config_assistant_find_back_button_cb,
+ assistant);
+ }
+}
+
+static void
mail_config_assistant_set_session (EMailConfigAssistant *assistant,
EMailSession *session)
{
@@ -565,6 +605,16 @@ mail_config_assistant_constructed (GObject *object)
session = e_mail_config_assistant_get_session (assistant);
registry = e_mail_session_get_registry (session);
+ /* XXX Locate the GtkAssistant's internal "Go Back" button so
+ * we can temporarily rename it for autoconfigure results.
+ * Walking the container like this is an extremely naughty
+ * and brittle hack, but GtkAssistant does not provide API
+ * to access it directly. */
+ gtk_container_forall (
+ GTK_CONTAINER (assistant),
+ mail_config_assistant_find_back_button_cb,
+ assistant);
+
/* Configure a new identity source. */
identity_source = e_source_new (NULL, NULL, NULL);
@@ -817,6 +867,25 @@ mail_config_assistant_prepare (GtkAssistant *assistant,
first_visit = TRUE;
}
+ /* Are we viewing autoconfiguration results? If so, temporarily
+ * rename the back button to clarify that account details can be
+ * revised. Otherwise reset the button to its original label. */
+ if (priv->back_button != NULL) {
+ gboolean auto_configure_results;
+ const gchar *label;
+
+ auto_configure_results =
+ E_IS_MAIL_CONFIG_SUMMARY_PAGE (page) &&
+ priv->auto_configured && first_visit;
+
+ if (auto_configure_results)
+ label = _("_Revise Details");
+ else
+ label = gettext (BACK_BUTTON_LABEL);
+
+ gtk_button_set_label (priv->back_button, label);
+ }
+
if (E_IS_MAIL_CONFIG_LOOKUP_PAGE (page)) {
AutoconfigContext *context;
ESource *source;