diff --git a/gnucash/gnome/dialog-imap-editor.c b/gnucash/gnome/dialog-imap-editor.c index 76a7f351ab..4dc512127a 100644 --- a/gnucash/gnome/dialog-imap-editor.c +++ b/gnucash/gnome/dialog-imap-editor.c @@ -56,6 +56,13 @@ typedef enum ONLINE }GncListType; +typedef struct +{ + guint inv_dialog_shown_bayes : 1; + guint inv_dialog_shown_nbayes : 1; + guint inv_dialog_shown_online : 1; +}GncInvFlags; + typedef struct { GtkWidget *dialog; @@ -80,6 +87,7 @@ typedef struct GtkWidget *expand_button; GtkWidget *collapse_button; GtkWidget *remove_button; + GncInvFlags inv_dialog_shown; }ImapDialog; @@ -371,6 +379,13 @@ gnc_imap_invalid_maps_dialog (ImapDialog *imap_dialog) else { gtk_widget_show (imap_dialog->remove_button); + + if (imap_dialog->type == BAYES) + imap_dialog->inv_dialog_shown.inv_dialog_shown_bayes = TRUE; + if (imap_dialog->type == NBAYES) + imap_dialog->inv_dialog_shown.inv_dialog_shown_nbayes = TRUE; + if (imap_dialog->type == ONLINE) + imap_dialog->inv_dialog_shown.inv_dialog_shown_online = TRUE; } g_free (message); g_free (message2); @@ -378,6 +393,24 @@ gnc_imap_invalid_maps_dialog (ImapDialog *imap_dialog) } } +static void +gnc_imap_invalid_maps (ImapDialog *imap_dialog) +{ + gboolean inv_dialog_shown = FALSE; + + if ((imap_dialog->type == BAYES) && (imap_dialog->inv_dialog_shown.inv_dialog_shown_bayes)) + inv_dialog_shown = TRUE; + + if ((imap_dialog->type == NBAYES) && (imap_dialog->inv_dialog_shown.inv_dialog_shown_nbayes)) + inv_dialog_shown = TRUE; + + if ((imap_dialog->type == ONLINE) && (imap_dialog->inv_dialog_shown.inv_dialog_shown_online)) + inv_dialog_shown = TRUE; + + if (!inv_dialog_shown) + gnc_imap_invalid_maps_dialog (imap_dialog); +} + void gnc_imap_dialog_response_cb (GtkDialog *dialog, gint response_id, gpointer user_data) { @@ -519,9 +552,22 @@ list_type_selected_cb (GtkToggleButton* button, ImapDialog *imap_dialog) // Lets do this only on change of list type if (type != imap_dialog->type) { + gboolean inv_dialog_shown = FALSE; + imap_dialog->type = type; get_account_info (imap_dialog); - gnc_imap_invalid_maps_dialog (imap_dialog); + + if ((imap_dialog->type == BAYES) && (imap_dialog->inv_dialog_shown.inv_dialog_shown_bayes)) + inv_dialog_shown = TRUE; + + if ((imap_dialog->type == NBAYES) && (imap_dialog->inv_dialog_shown.inv_dialog_shown_nbayes)) + inv_dialog_shown = TRUE; + + if ((imap_dialog->type == ONLINE) && (imap_dialog->inv_dialog_shown.inv_dialog_shown_online)) + inv_dialog_shown = TRUE; + + if (!inv_dialog_shown) + gnc_imap_invalid_maps_dialog (imap_dialog); } }