From f0fc1e537d3c48defe55526c6b3aa1c1af0ac8be Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Sun, 29 Nov 2020 14:53:32 +0000 Subject: [PATCH] Read-Only register warning non specific If you have a place holder account register or sub account register which are read only open when you close Gnucash, the next time you open Gnucash a read only warning dialog is raised but has no indication of what register it applies to so this commit adds the account name to the warning text. --- gnucash/gnome/gnc-split-reg.c | 25 ++++++++++++++++++++++++- gnucash/gnome/gnc-split-reg2.c | 25 ++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/gnucash/gnome/gnc-split-reg.c b/gnucash/gnome/gnc-split-reg.c index 9491e58b25..717f144dc4 100644 --- a/gnucash/gnome/gnc-split-reg.c +++ b/gnucash/gnome/gnc-split-reg.c @@ -2444,8 +2444,30 @@ gboolean gtk_callback_bug_workaround (gpointer argp) { dialog_args *args = argp; - const gchar *read_only = _("This account register is read-only."); + const gchar *read_only_this = _("This account register is read-only."); + const gchar *read_only_acc = _("The '%s' account register is read-only."); + gchar *read_only = NULL; GtkWidget *dialog; + GNCLedgerDisplayType ledger_type = gnc_ledger_display_type (args->gsr->ledger); + Account *acc = gnc_ledger_display_leader (args->gsr->ledger); + const gchar *acc_name = NULL; + gchar *tmp = NULL; + + if (acc) + { + acc_name = xaccAccountGetName (acc); + + if (ledger_type == LD_SINGLE) + read_only = g_strdup_printf (read_only_acc, acc_name); + else + { + gchar *tmp = g_strconcat (acc_name, "+", NULL); + read_only = g_strdup_printf (read_only_acc, tmp); + g_free (tmp); + } + } + else + read_only = g_strdup (read_only_this); dialog = gtk_message_dialog_new(GTK_WINDOW(args->gsr->window), GTK_DIALOG_DESTROY_WITH_PARENT, @@ -2456,6 +2478,7 @@ gtk_callback_bug_workaround (gpointer argp) "%s", args->string); gnc_dialog_run(GTK_DIALOG(dialog), GNC_PREF_WARN_REG_IS_READ_ONLY); gtk_widget_destroy(dialog); + g_free(read_only); g_free(args); return FALSE; } diff --git a/gnucash/gnome/gnc-split-reg2.c b/gnucash/gnome/gnc-split-reg2.c index 1b372bf69a..9e774d3848 100644 --- a/gnucash/gnome/gnc-split-reg2.c +++ b/gnucash/gnome/gnc-split-reg2.c @@ -934,8 +934,30 @@ gboolean gtk_callback_bug_workaround (gpointer argp) { dialog_args *args = argp; - const gchar *read_only = _("This account register is read-only."); + const gchar *read_only_this = _("This account register is read-only."); + const gchar *read_only_acc = _("The '%s' account register is read-only."); + gchar *read_only = NULL; GtkWidget *dialog; + GNCLedgerDisplay2Type ledger_type = gnc_ledger_display2_type (args->gsr->ledger); + Account *acc = gnc_ledger_display2_leader (args->gsr->ledger); + const gchar *acc_name = NULL; + gchar *tmp = NULL; + + if (acc) + { + acc_name = xaccAccountGetName (acc); + + if (ledger_type == LD2_SINGLE) + read_only = g_strdup_printf (read_only_acc, acc_name); + else + { + gchar *tmp = g_strconcat (acc_name, "+", NULL); + read_only = g_strdup_printf (read_only_acc, tmp); + g_free (tmp); + } + } + else + read_only = g_strdup (read_only_this); dialog = gtk_message_dialog_new (GTK_WINDOW(args->gsr->window), GTK_DIALOG_DESTROY_WITH_PARENT, @@ -946,6 +968,7 @@ gtk_callback_bug_workaround (gpointer argp) "%s", args->string); gnc_dialog_run (GTK_DIALOG (dialog), GNC_PREF_WARN_REG_IS_READ_ONLY); gtk_widget_destroy (dialog); + g_free(read_only); g_free (args); return FALSE; }