From 41af84b93751087366f82f2d0d5da24970b5a673 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Sun, 1 Mar 2020 12:34:19 +0000 Subject: [PATCH] Only show invalid mappings dialog once When you select the type of information to display, the invalid mapping dialog is shown if necessary on each occasion so this commit changes that to show it once and then you can use the added button. --- gnucash/gnome/dialog-imap-editor.c | 48 +++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) 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); } }