gnucash maint: Multiple changes pushed

Robert Fewell bobit at code.gnucash.org
Sun Nov 8 08:12:15 EST 2020


Updated	 via  https://github.com/Gnucash/gnucash/commit/bbc6887b (commit)
	 via  https://github.com/Gnucash/gnucash/commit/4c2df4c2 (commit)
	from  https://github.com/Gnucash/gnucash/commit/2290fa7c (commit)



commit bbc6887b0fc43b93c98b9520e78b753e85df44cb
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Sun Nov 8 12:42:07 2020 +0000

    Change source files dialog-dup-trans.* for space and tabs

diff --git a/gnucash/gnome-utils/dialog-dup-trans.c b/gnucash/gnome-utils/dialog-dup-trans.c
index f2542a8fb..329ecafb1 100644
--- a/gnucash/gnome-utils/dialog-dup-trans.c
+++ b/gnucash/gnome-utils/dialog-dup-trans.c
@@ -48,11 +48,11 @@ typedef struct
     GtkWidget * link_edit;
 
     GtkWidget *duplicate_title_label; // GtkLabel
-    GtkWidget *duplicate_table; // GtkTable
-    GtkWidget *date_label; // GtkLabel
-    GtkWidget *num_label; // GtkLabel
-    GtkWidget *tnum_label; // GtkLabel
-    GtkWidget *link_label; //GtkLabel
+    GtkWidget *duplicate_table;       // GtkTable
+    GtkWidget *date_label;            // GtkLabel
+    GtkWidget *num_label;             // GtkLabel
+    GtkWidget *tnum_label;            // GtkLabel
+    GtkWidget *link_label;            // GtkLabel
 } DupTransDialog;
 
 /* Parses the string value and returns true if it is a
@@ -66,10 +66,10 @@ parse_num (const char *string, long int *num)
     if (string == NULL)
         return FALSE;
 
-    if (!gnc_strisnum(string))
+    if (!gnc_strisnum (string))
         return FALSE;
 
-    number = strtol(string, NULL, 10);
+    number = strtol (string, NULL, 10);
 
     if ((number == LONG_MIN) || (number == LONG_MAX))
         return FALSE;
@@ -147,7 +147,7 @@ gnc_dup_trans_dialog_create (GtkWidget * parent, DupTransDialog *dt_dialog,
     GtkBuilder  *builder;
     const gchar *tt = _("Use +- keys to increment/decrement number");
 
-    builder = gtk_builder_new();
+    builder = gtk_builder_new ();
     gnc_builder_add_from_file (builder, "gnc-plugin-page-register.glade", "num_adjustment");
     gnc_builder_add_from_file (builder, "gnc-plugin-page-register.glade", "tnum_adjustment");
     gnc_builder_add_from_file (builder, "gnc-plugin-page-register.glade", "duplicate_transaction_dialog");
@@ -161,7 +161,7 @@ gnc_dup_trans_dialog_create (GtkWidget * parent, DupTransDialog *dt_dialog,
 
     /* parent */
     if (parent != NULL)
-        gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
+        gtk_window_set_transient_for (GTK_WINDOW(dialog), GTK_WINDOW(parent));
 
     /* date widget */
     dt_dialog->date_label = GTK_WIDGET(gtk_builder_get_object (builder, "date_label"));
@@ -171,13 +171,13 @@ gnc_dup_trans_dialog_create (GtkWidget * parent, DupTransDialog *dt_dialog,
         GtkWidget *hbox;
 
         date_edit = gnc_date_edit_new (date, FALSE, FALSE);
-        gnc_date_activates_default(GNC_DATE_EDIT(date_edit), TRUE);
+        gnc_date_activates_default (GNC_DATE_EDIT(date_edit), TRUE);
         hbox = GTK_WIDGET(gtk_builder_get_object (builder, "date_hbox"));
         gtk_widget_show (date_edit);
 
         gnc_date_make_mnemonic_target (GNC_DATE_EDIT(date_edit), dt_dialog->date_label);
 
-        gtk_box_pack_end (GTK_BOX (hbox), date_edit, TRUE, TRUE, 0);
+        gtk_box_pack_end (GTK_BOX(hbox), date_edit, TRUE, TRUE, 0);
         dt_dialog->date_edit = date_edit;
     }
     else
@@ -227,14 +227,14 @@ gnc_dup_trans_dialog_create (GtkWidget * parent, DupTransDialog *dt_dialog,
 
     gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, dt_dialog);
 
-    g_object_unref(G_OBJECT(builder));
+    g_object_unref (G_OBJECT(builder));
 }
 
 static gboolean
 gnc_dup_trans_dialog_internal (GtkWidget * parent,
                                const char* window_title, const char* title,
-                               gboolean show_date, time64 *date_p,
-                               GDate *gdate_p, const char *num, char **out_num,
+                               gboolean show_date, time64 *date_p, GDate *gdate_p,
+                               const char *num, char **out_num,
                                const char *tnum, char **out_tnum,
                                const char *tlink, char **out_tlink)
 {
@@ -251,9 +251,9 @@ gnc_dup_trans_dialog_internal (GtkWidget * parent,
     if (!show_date)
     {
         // The "date" field isn't being asked for, so we make the widgets invisible
-        gtk_widget_set_visible(dt_dialog->date_label, FALSE);
+        gtk_widget_set_visible (dt_dialog->date_label, FALSE);
         if (dt_dialog->date_edit)
-            gtk_widget_set_visible(dt_dialog->date_edit, FALSE);
+            gtk_widget_set_visible (dt_dialog->date_edit, FALSE);
         // If no "date" field, there must be a "num" field, so give it focus
         if (out_num)
             gtk_widget_grab_focus (dt_dialog->num_edit);
@@ -262,70 +262,70 @@ gnc_dup_trans_dialog_internal (GtkWidget * parent,
     {
         GNCDateEdit *gde;
 
-        gde = GNC_DATE_EDIT (dt_dialog->date_edit);
+        gde = GNC_DATE_EDIT(dt_dialog->date_edit);
         entry = gde->date_entry;
         gtk_widget_grab_focus (entry);
     }
 
     if (window_title)
-        gtk_window_set_title (GTK_WINDOW (dt_dialog->dialog), window_title);
+        gtk_window_set_title (GTK_WINDOW(dt_dialog->dialog), window_title);
 
     if (title)
     {
-        gchar *full_text = g_strdup_printf("<b>%s</b>", title);
-        gtk_label_set_markup(GTK_LABEL (dt_dialog->duplicate_title_label), full_text);
-        g_free(full_text);
+        gchar *full_text = g_strdup_printf ("<b>%s</b>", title);
+        gtk_label_set_markup (GTK_LABEL(dt_dialog->duplicate_title_label), full_text);
+        g_free (full_text);
     }
 
     if (!out_num)
     {
         // The "num" field isn't being asked for, so we make the widgets invisible
-        gtk_widget_set_visible(dt_dialog->num_label, FALSE);
-        gtk_widget_set_visible(dt_dialog->num_edit, FALSE);
+        gtk_widget_set_visible (dt_dialog->num_label, FALSE);
+        gtk_widget_set_visible (dt_dialog->num_edit, FALSE);
     }
 
     if (!tnum)
     {
         // The "tnum" field isn't being asked for, so we make the widgets invisible
-        gtk_widget_set_visible(dt_dialog->tnum_label, FALSE);
-        gtk_widget_set_visible(dt_dialog->tnum_edit, FALSE);
+        gtk_widget_set_visible (dt_dialog->tnum_label, FALSE);
+        gtk_widget_set_visible (dt_dialog->tnum_edit, FALSE);
     }
 
     if (!show_date && !tnum)
     {
         // The "date" and the "tnum" fields aren't being asked for, this is a split copy
-        gtk_label_set_markup(GTK_LABEL (dt_dialog->num_label), _("Action/Number"));
+        gtk_label_set_markup (GTK_LABEL(dt_dialog->num_label), _("Action/Number"));
     }
 
     if (tnum)
     {
-        gtk_entry_set_activates_default(GTK_ENTRY(dt_dialog->num_edit), FALSE);
-        gtk_entry_set_activates_default(GTK_ENTRY(dt_dialog->tnum_edit), TRUE);
+        gtk_entry_set_activates_default (GTK_ENTRY(dt_dialog->num_edit), FALSE);
+        gtk_entry_set_activates_default (GTK_ENTRY(dt_dialog->tnum_edit), TRUE);
     }
 
     if (tlink)
     {
-        gtk_widget_set_visible(dt_dialog->link_label, TRUE);
-        gtk_widget_set_visible(dt_dialog->link_edit, TRUE);
+        gtk_widget_set_visible (dt_dialog->link_label, TRUE);
+        gtk_widget_set_visible (dt_dialog->link_edit, TRUE);
     }
     else
     {
-        gtk_widget_set_visible(dt_dialog->link_label, FALSE);
-        gtk_widget_set_visible(dt_dialog->link_edit, FALSE);
+        gtk_widget_set_visible (dt_dialog->link_label, FALSE);
+        gtk_widget_set_visible (dt_dialog->link_edit, FALSE);
     }
 
-    result = gtk_dialog_run (GTK_DIALOG (dt_dialog->dialog));
+    result = gtk_dialog_run (GTK_DIALOG(dt_dialog->dialog));
 
     if (result == GTK_RESPONSE_OK)
     {
         if (date_p)
-            *date_p = gnc_date_edit_get_date (GNC_DATE_EDIT (dt_dialog->date_edit));
+            *date_p = gnc_date_edit_get_date (GNC_DATE_EDIT(dt_dialog->date_edit));
         if (gdate_p)
-            gnc_date_edit_get_gdate (GNC_DATE_EDIT (dt_dialog->date_edit), gdate_p);
+            gnc_date_edit_get_gdate (GNC_DATE_EDIT(dt_dialog->date_edit), gdate_p);
         if (out_num)
-            *out_num = g_strdup (gtk_entry_get_text (GTK_ENTRY (dt_dialog->num_edit)));
+            *out_num = g_strdup (gtk_entry_get_text (GTK_ENTRY(dt_dialog->num_edit)));
         if (tnum)
-            *out_tnum = g_strdup (gtk_entry_get_text (GTK_ENTRY (dt_dialog->tnum_edit)));
+            *out_tnum = g_strdup (gtk_entry_get_text (GTK_ENTRY(dt_dialog->tnum_edit)));
         if (tlink)
         {
             if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dt_dialog->link_edit)))
@@ -336,20 +336,23 @@ gnc_dup_trans_dialog_internal (GtkWidget * parent,
     else
         ok = FALSE;
 
-    gtk_widget_destroy(GTK_WIDGET(dt_dialog->dialog));
+    gtk_widget_destroy (GTK_WIDGET(dt_dialog->dialog));
     g_free (dt_dialog);
 
     return ok;
 }
 
 gboolean
-gnc_dup_trans_dialog (GtkWidget * parent, const char* title, gboolean show_date,
-                      time64 *date_p, const char *num, char **out_num,
+gnc_dup_trans_dialog (GtkWidget * parent, const char* title,
+                      gboolean show_date, time64 *date_p,
+                      const char *num, char **out_num,
                       const char *tnum, char **out_tnum,
                       const char *tlink, char **out_tlink)
 {
-    return gnc_dup_trans_dialog_internal(parent, NULL, title, show_date, date_p, NULL,
-                                         num, out_num, tnum, out_tnum, tlink, out_tlink);
+    return gnc_dup_trans_dialog_internal (parent, NULL, title,
+                                          show_date, date_p, NULL,
+                                          num, out_num, tnum, out_tnum,
+                                          tlink, out_tlink);
 }
 
 gboolean
@@ -357,29 +360,35 @@ gnc_dup_trans_dialog_gdate (GtkWidget * parent, GDate *gdate_p,
                             const char *num, char **out_num)
 {
     time64 tmp_time;
-    g_assert(gdate_p);
+    g_assert (gdate_p);
 
     tmp_time = gdate_to_time64 (*gdate_p);
-    return gnc_dup_trans_dialog_internal(parent, NULL, NULL, TRUE, &tmp_time, gdate_p,
-                                         num, out_num, NULL, NULL, NULL, NULL);
+    return gnc_dup_trans_dialog_internal (parent, NULL, NULL, TRUE,
+                                          &tmp_time, gdate_p,
+                                          num, out_num, NULL, NULL,
+                                          NULL, NULL);
 }
 
 gboolean
 gnc_dup_time64_dialog (GtkWidget * parent, const char *window_title,
                        const char* title, time64 *date)
 {
-    return gnc_dup_trans_dialog_internal(parent, window_title, title, TRUE, date, NULL,
-                                         NULL, NULL, NULL, NULL, NULL, NULL);
+    return gnc_dup_trans_dialog_internal (parent, window_title, title, TRUE,
+                                          date, NULL,
+                                          NULL, NULL, NULL, NULL,
+                                          NULL, NULL);
 }
 
 gboolean
 gnc_dup_date_dialog (GtkWidget * parent, const char* title, GDate *gdate_p)
 {
     time64 tmp_time;
-    g_assert(gdate_p);
+    g_assert (gdate_p);
 
-    tmp_time = gdate_to_time64(*gdate_p);
-    return gnc_dup_trans_dialog_internal(parent, NULL, title, TRUE, &tmp_time, gdate_p,
-                                         NULL, NULL, NULL, NULL, NULL, NULL);
+    tmp_time = gdate_to_time64 (*gdate_p);
+    return gnc_dup_trans_dialog_internal (parent, NULL, title, TRUE,
+                                          &tmp_time, gdate_p,
+                                          NULL, NULL, NULL, NULL,
+                                          NULL, NULL);
 }
 
diff --git a/gnucash/gnome-utils/dialog-dup-trans.h b/gnucash/gnome-utils/dialog-dup-trans.h
index 7c862c0c0..055abe0bd 100644
--- a/gnucash/gnome-utils/dialog-dup-trans.h
+++ b/gnucash/gnome-utils/dialog-dup-trans.h
@@ -50,8 +50,9 @@
  * Return: TRUE if user closes dialog with 'OK'                         *
 \***********************************************************************/
 gboolean
-gnc_dup_trans_dialog (GtkWidget * parent, const char* title, gboolean show_date,
-                      time64 *date_p, const char *num, char **out_num,
+gnc_dup_trans_dialog (GtkWidget * parent, const char* title,
+                      gboolean show_date, time64 *date_p,
+                      const char *num, char **out_num,
                       const char *tnum, char **out_tnum,
                       const char *tdoclink, char **out_tdoclink);
 

commit 4c2df4c2addde5faa72b625d3b58c83b2e6fee61
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Sun Nov 8 11:40:35 2020 +0000

    Bug 645379 - Problem with Number field when duplicating a transaction
    
    When you duplicate a transaction, the dialog presented has a
    GtkSpinbutton for the number field and non-numeric values are being
    discarded. The register and transfer dialog have a GtkEntry for this
    field so change this dialog to using them also.

diff --git a/gnucash/gnome-utils/dialog-dup-trans.c b/gnucash/gnome-utils/dialog-dup-trans.c
index 87d040923..f2542a8fb 100644
--- a/gnucash/gnome-utils/dialog-dup-trans.c
+++ b/gnucash/gnome-utils/dialog-dup-trans.c
@@ -81,17 +81,61 @@ parse_num (const char *string, long int *num)
 }
 
 static gboolean
-gnc_dup_trans_output_cb(GtkSpinButton *spinbutton,
-                        gpointer user_data)
+gnc_dup_inc_dec (GtkWidget *widget, const gchar *text, gint inc_dec)
 {
-    gboolean is_number;
     long int num;
-    gchar *txt = gtk_editable_get_chars(GTK_EDITABLE(spinbutton), 0, -1);
-    is_number = parse_num(txt, &num);
-    g_free(txt);
-    if (!is_number)
-        gtk_entry_set_text(GTK_ENTRY(spinbutton), "");
-    return !is_number;
+
+    if (parse_num (text, &num))
+    {
+        gchar *format;
+        gchar *out;
+        num = num + inc_dec;
+
+        if (num == -1)
+            num = 0;
+
+        if (g_str_has_prefix (text, "0"))
+            format = g_strdup_printf ("%s%ld%s", "%0", strlen (text), "d");
+        else
+            format = g_strdup_printf ("%s", "%ld");
+
+        out = g_strdup_printf (format, num);
+
+        gtk_entry_set_text (GTK_ENTRY(widget), out);
+        g_free (format);
+        g_free (out);
+        return TRUE;
+    }
+    return FALSE;
+}
+
+static gboolean
+gnc_dup_key_press_event_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
+{
+    const gchar *text = gtk_entry_get_text (GTK_ENTRY(widget));
+
+    if (gnc_strisnum (text))
+    {
+        GdkModifierType modifiers = gtk_accelerator_get_default_mod_mask ();
+        gint increment;
+        long int num;
+
+        if ((event->state & modifiers) == GDK_CONTROL_MASK ||
+            (event->state & modifiers) == GDK_MOD1_MASK)
+            return FALSE;
+
+        if (event->keyval == GDK_KEY_plus || event->keyval == GDK_KEY_KP_Add)
+            increment = 1;
+        else if (event->keyval == GDK_KEY_minus || event->keyval == GDK_KEY_KP_Subtract)
+            increment = -1;
+        else
+            return FALSE;
+
+        return gnc_dup_inc_dec (widget, text, increment);
+
+    }
+    else
+        return FALSE;
 }
 
 static void
@@ -101,6 +145,7 @@ gnc_dup_trans_dialog_create (GtkWidget * parent, DupTransDialog *dt_dialog,
 {
     GtkWidget *dialog;
     GtkBuilder  *builder;
+    const gchar *tt = _("Use +- keys to increment/decrement number");
 
     builder = gtk_builder_new();
     gnc_builder_add_from_file (builder, "gnc-plugin-page-register.glade", "num_adjustment");
@@ -147,31 +192,33 @@ gnc_dup_trans_dialog_create (GtkWidget * parent, DupTransDialog *dt_dialog,
     dt_dialog->num_label = GTK_WIDGET(gtk_builder_get_object (builder, "num_label"));
     dt_dialog->tnum_label = GTK_WIDGET(gtk_builder_get_object (builder, "tnum_label"));
 
-    {
-        GtkWidget *num_spin, *tnum_spin;
-        long int num, tnum;
-
-        num_spin = GTK_WIDGET(gtk_builder_get_object (builder, "num_spin"));
-        tnum_spin = GTK_WIDGET(gtk_builder_get_object (builder, "tnum_spin"));
-        dt_dialog->num_edit = num_spin;
-        dt_dialog->tnum_edit = tnum_spin;
-
-        gtk_entry_set_activates_default(GTK_ENTRY(num_spin), TRUE);
-        g_signal_connect(num_spin, "output",
-                         G_CALLBACK(gnc_dup_trans_output_cb), dt_dialog);
-        g_signal_connect(tnum_spin, "output",
-                         G_CALLBACK(gnc_dup_trans_output_cb), dt_dialog);
-
-        if (num_str && parse_num (num_str, &num))
-            gtk_spin_button_set_value (GTK_SPIN_BUTTON (num_spin), num + 1);
-        else
-            gtk_entry_set_text (GTK_ENTRY (num_spin), "");
+    dt_dialog->num_edit = GTK_WIDGET(gtk_builder_get_object (builder, "num_entry"));
+    dt_dialog->tnum_edit = GTK_WIDGET(gtk_builder_get_object (builder, "tnum_entry"));
 
-        if (tnum_str && parse_num (tnum_str, &tnum))
-            gtk_spin_button_set_value (GTK_SPIN_BUTTON (tnum_spin), tnum + 1);
-        else
-            gtk_entry_set_text (GTK_ENTRY (tnum_spin), "");
+    if (num_str)
+        gtk_entry_set_text (GTK_ENTRY(dt_dialog->num_edit), num_str);
+    if (tnum_str)
+        gtk_entry_set_text (GTK_ENTRY(dt_dialog->tnum_edit), tnum_str);
+
+    g_signal_connect (dt_dialog->num_edit, "key-press-event",
+                      G_CALLBACK(gnc_dup_key_press_event_cb),
+                      dt_dialog);
+
+    g_signal_connect (dt_dialog->tnum_edit, "key-press-event",
+                      G_CALLBACK(gnc_dup_key_press_event_cb),
+                      dt_dialog);
+
+    if (gnc_strisnum (num_str))
+    {
+        gtk_widget_set_tooltip_text (GTK_WIDGET(dt_dialog->num_edit), tt);
+        gnc_dup_inc_dec (GTK_WIDGET(dt_dialog->num_edit), num_str, 1);
     }
+    if (gnc_strisnum (tnum_str))
+    {
+        gtk_widget_set_tooltip_text (GTK_WIDGET(dt_dialog->tnum_edit), tt);
+        gnc_dup_inc_dec (GTK_WIDGET(dt_dialog->tnum_edit), tnum_str, 1);
+    }
+
     /* Transaction Linked Document */
     {
         dt_dialog->link_label = GTK_WIDGET(gtk_builder_get_object (builder, "link_label"));
diff --git a/gnucash/gtkbuilder/gnc-plugin-page-register.glade b/gnucash/gtkbuilder/gnc-plugin-page-register.glade
index 84534ce5e..5e835ffdc 100644
--- a/gnucash/gtkbuilder/gnc-plugin-page-register.glade
+++ b/gnucash/gtkbuilder/gnc-plugin-page-register.glade
@@ -559,10 +559,209 @@ If 0, all previous days included</property>
       <placeholder/>
     </child>
   </object>
-  <object class="GtkAdjustment" id="num_adjustment">
-    <property name="upper">1000000000</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
+  <object class="GtkDialog" id="duplicate_transaction_dialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">6</property>
+    <property name="title" translatable="yes" comments="Duplicate Transaction Dialog">Duplicate Transaction</property>
+    <property name="resizable">False</property>
+    <property name="modal">True</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox15">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">6</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area15">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="button76">
+                <property name="label" translatable="yes">_Cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="button77">
+                <property name="label" translatable="yes">_OK</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="duplicate_title_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="label" translatable="yes"><b>New Transaction Information</b></property>
+            <property name="use_markup">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkGrid" id="duplicate_table">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="margin_start">6</property>
+            <property name="margin_end">6</property>
+            <property name="border_width">6</property>
+            <property name="row_spacing">3</property>
+            <property name="column_spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="date_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">end</property>
+                <property name="label" translatable="yes">_Date</property>
+                <property name="use_underline">True</property>
+                <property name="justify">center</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="num_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">end</property>
+                <property name="label" translatable="yes">_Number</property>
+                <property name="use_underline">True</property>
+                <property name="justify">center</property>
+                <property name="mnemonic_widget">num_entry</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkBox" id="date_hbox">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="tnum_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">end</property>
+                <property name="label" translatable="yes">_Transaction Number</property>
+                <property name="use_underline">True</property>
+                <property name="justify">center</property>
+                <property name="mnemonic_widget">tnum_entry</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="link_check_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="halign">start</property>
+                <property name="image_position">top</property>
+                <property name="active">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="link_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">end</property>
+                <property name="label" translatable="yes">Keep Linked Document Entry</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="num_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="tnum_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-6">button76</action-widget>
+      <action-widget response="-5">button77</action-widget>
+    </action-widgets>
+    <child type="titlebar">
+      <placeholder/>
+    </child>
+  </object>
+  <object class="GtkEntryBuffer" id="entrybuffer1">
+    <property name="text" translatable="yes">0</property>
   </object>
   <object class="GtkDialog" id="sort_by_dialog">
     <property name="can_focus">False</property>
@@ -906,221 +1105,6 @@ If 0, all previous days included</property>
       <placeholder/>
     </child>
   </object>
-  <object class="GtkAdjustment" id="tnum_adjustment">
-    <property name="upper">1000000000</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
-  </object>
-  <object class="GtkDialog" id="duplicate_transaction_dialog">
-    <property name="can_focus">False</property>
-    <property name="border_width">6</property>
-    <property name="title" translatable="yes" comments="Duplicate Transaction Dialog">Duplicate Transaction</property>
-    <property name="resizable">False</property>
-    <property name="modal">True</property>
-    <property name="type_hint">dialog</property>
-    <child internal-child="vbox">
-      <object class="GtkBox" id="dialog-vbox15">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="orientation">vertical</property>
-        <property name="spacing">6</property>
-        <child internal-child="action_area">
-          <object class="GtkButtonBox" id="dialog-action_area15">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="button76">
-                <property name="label" translatable="yes">_Cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_underline">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="button77">
-                <property name="label" translatable="yes">_OK</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="has_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_underline">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkGrid" id="duplicate_table">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="margin_start">6</property>
-            <property name="margin_end">6</property>
-            <property name="border_width">6</property>
-            <property name="row_spacing">3</property>
-            <property name="column_spacing">6</property>
-            <child>
-              <object class="GtkLabel" id="date_label">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="halign">end</property>
-                <property name="label" translatable="yes">_Date</property>
-                <property name="use_underline">True</property>
-                <property name="justify">center</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="num_label">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="halign">end</property>
-                <property name="label" translatable="yes">_Number</property>
-                <property name="use_underline">True</property>
-                <property name="justify">center</property>
-                <property name="mnemonic_widget">num_spin</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkSpinButton" id="num_spin">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="has_focus">True</property>
-                <property name="primary_icon_activatable">False</property>
-                <property name="secondary_icon_activatable">False</property>
-                <property name="adjustment">num_adjustment</property>
-                <property name="climb_rate">1</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkBox" id="date_hbox">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <child>
-                  <placeholder/>
-                </child>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="tnum_label">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="halign">end</property>
-                <property name="label" translatable="yes">_Transaction Number</property>
-                <property name="use_underline">True</property>
-                <property name="justify">center</property>
-                <property name="mnemonic_widget">tnum_spin</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">2</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkSpinButton" id="tnum_spin">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="primary_icon_activatable">False</property>
-                <property name="secondary_icon_activatable">False</property>
-                <property name="adjustment">tnum_adjustment</property>
-                <property name="climb_rate">1</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">2</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkCheckButton" id="link_check_button">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">False</property>
-                <property name="halign">start</property>
-                <property name="image_position">top</property>
-                <property name="active">True</property>
-                <property name="draw_indicator">True</property>
-              </object>
-              <packing>
-                <property name="left_attach">1</property>
-                <property name="top_attach">3</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkLabel" id="link_label">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="halign">end</property>
-                <property name="label" translatable="yes">Keep Linked Document Entry</property>
-              </object>
-              <packing>
-                <property name="left_attach">0</property>
-                <property name="top_attach">3</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="duplicate_title_label">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="halign">start</property>
-            <property name="label" translatable="yes"><b>New Transaction Information</b></property>
-            <property name="use_markup">True</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-    <action-widgets>
-      <action-widget response="-6">button76</action-widget>
-      <action-widget response="-5">button77</action-widget>
-    </action-widgets>
-    <child type="titlebar">
-      <placeholder/>
-    </child>
-  </object>
   <object class="GtkDialog" id="void_transaction_dialog">
     <property name="can_focus">False</property>
     <property name="border_width">6</property>
diff --git a/gnucash/gtkbuilder/gnc-plugin-page-register2.glade b/gnucash/gtkbuilder/gnc-plugin-page-register2.glade
index be1eee226..c0340f8b2 100644
--- a/gnucash/gtkbuilder/gnc-plugin-page-register2.glade
+++ b/gnucash/gtkbuilder/gnc-plugin-page-register2.glade
@@ -64,6 +64,21 @@
             <property name="position">0</property>
           </packing>
         </child>
+        <child>
+          <object class="GtkLabel" id="duplicate_title_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="halign">start</property>
+            <property name="margin_start">6</property>
+            <property name="label" translatable="yes"><b>New Transaction Information</b></property>
+            <property name="use_markup">True</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkGrid" id="duplicate_table">
             <property name="visible">True</property>
@@ -93,7 +108,7 @@
                 <property name="label" translatable="yes">_Number</property>
                 <property name="use_underline">True</property>
                 <property name="justify">center</property>
-                <property name="mnemonic_widget">num_spin</property>
+                <property name="mnemonic_widget">num_entry</property>
               </object>
               <packing>
                 <property name="left_attach">0</property>
@@ -101,14 +116,22 @@
               </packing>
             </child>
             <child>
-              <object class="GtkSpinButton" id="num_spin">
+              <object class="GtkBox" id="date_hbox">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="num_entry">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="has_focus">True</property>
-                <property name="primary_icon_activatable">False</property>
-                <property name="secondary_icon_activatable">False</property>
-                <property name="adjustment">adjustment1</property>
-                <property name="climb_rate">1</property>
               </object>
               <packing>
                 <property name="left_attach">1</property>
@@ -116,16 +139,55 @@
               </packing>
             </child>
             <child>
-              <object class="GtkBox" id="date_hbox">
+              <object class="GtkLabel" id="tnum_label">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <child>
-                  <placeholder/>
-                </child>
+                <property name="halign">end</property>
+                <property name="label" translatable="yes">_Transaction Number</property>
+                <property name="use_underline">True</property>
+                <property name="justify">center</property>
+                <property name="mnemonic_widget">tnum_entry</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" id="link_label">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">end</property>
+                <property name="label" translatable="yes">Keep Linked Document Entry</property>
+              </object>
+              <packing>
+                <property name="left_attach">0</property>
+                <property name="top_attach">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkEntry" id="tnum_entry">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
               </object>
               <packing>
                 <property name="left_attach">1</property>
-                <property name="top_attach">0</property>
+                <property name="top_attach">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkCheckButton" id="link_check_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="halign">start</property>
+                <property name="image_position">top</property>
+                <property name="active">True</property>
+                <property name="draw_indicator">True</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">3</property>
               </packing>
             </child>
           </object>
@@ -135,21 +197,6 @@
             <property name="position">2</property>
           </packing>
         </child>
-        <child>
-          <object class="GtkLabel" id="duplicate_title_label">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="halign">start</property>
-            <property name="margin_start">6</property>
-            <property name="label" translatable="yes"><b>New Transaction Information</b></property>
-            <property name="use_markup">True</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
       </object>
     </child>
     <action-widgets>
diff --git a/gnucash/register/ledger-core/split-register.c b/gnucash/register/ledger-core/split-register.c
index eff5798e1..7dcde96ce 100644
--- a/gnucash/register/ledger-core/split-register.c
+++ b/gnucash/register/ledger-core/split-register.c
@@ -571,6 +571,7 @@ gnc_split_register_duplicate_current (SplitRegister* reg)
     }
     else
     {
+        Account* account;
         NumCell* num_cell;
         Transaction* new_trans;
         int trans_split_index;
@@ -587,18 +588,17 @@ gnc_split_register_duplicate_current (SplitRegister* reg)
         /* We are on a transaction row. Copy the whole transaction. */
 
         date = info->last_date_entered;
-        if (gnc_strisnum (gnc_get_num_action (trans, trans_split)))
-        {
-            Account* account = gnc_split_register_get_default_account (reg);
 
-            if (account)
-                in_num = xaccAccountGetLastNum (account);
-            else
-                in_num = gnc_get_num_action (trans, trans_split);
-            in_tnum = (reg->use_tran_num_for_num_field
-                       ? NULL
-                       : gnc_get_num_action (trans, NULL));
-        }
+        account = gnc_split_register_get_default_account (reg);
+
+        if (account && gnc_strisnum (gnc_get_num_action (trans, trans_split)))
+            in_num = xaccAccountGetLastNum (account);
+        else
+            in_num = gnc_get_num_action (trans, trans_split);
+
+        in_tnum = (reg->use_tran_num_for_num_field
+                   ? NULL
+                   : gnc_get_num_action (trans, NULL));
 
         if (!gnc_dup_trans_dialog (gnc_split_register_get_parent (reg), NULL,
                                    TRUE, &date, in_num, &out_num, in_tnum, &out_tnum,



Summary of changes:
 gnucash/gnome-utils/dialog-dup-trans.c             | 222 +++++++----
 gnucash/gnome-utils/dialog-dup-trans.h             |   5 +-
 gnucash/gtkbuilder/gnc-plugin-page-register.glade  | 422 ++++++++++-----------
 gnucash/gtkbuilder/gnc-plugin-page-register2.glade | 101 +++--
 gnucash/register/ledger-core/split-register.c      |  22 +-
 5 files changed, 430 insertions(+), 342 deletions(-)



More information about the gnucash-changes mailing list