r21903 - gnucash/trunk/src/import-export/aqbanking - Bug #668693: aqbanking: Improve transaction UI

Christian Stimming cstim at code.gnucash.org
Sat Jan 28 17:12:26 EST 2012


Author: cstim
Date: 2012-01-28 17:12:26 -0500 (Sat, 28 Jan 2012)
New Revision: 21903
Trac: http://svn.gnucash.org/trac/changeset/21903

Modified:
   gnucash/trunk/src/import-export/aqbanking/dialog-ab-trans.c
   gnucash/trunk/src/import-export/aqbanking/dialog-ab.glade
Log:
Bug #668693: aqbanking: Improve transaction UI

* Use expander to show/hide templates
* Disable execute button as long as field values are incorrect
* Use icons and tooltips in entries to indicate that an incorrect value was inserted

Patch by Johannes Schmid.

Modified: gnucash/trunk/src/import-export/aqbanking/dialog-ab-trans.c
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/dialog-ab-trans.c	2012-01-28 22:12:12 UTC (rev 21902)
+++ gnucash/trunk/src/import-export/aqbanking/dialog-ab-trans.c	2012-01-28 22:12:26 UTC (rev 21903)
@@ -69,11 +69,10 @@
 static AB_JOB *gnc_ab_trans_dialog_get_available_empty_job(AB_ACCOUNT *ab_acc,
                                                            GncABTransType trans_type);
 
-static gboolean gnc_ab_trans_dialog_check_ktoblzcheck(GtkWidget *parent, const GncABTransDialog *td,
-                                                      const AB_TRANSACTION *trans);
+static void gnc_ab_trans_dialog_check_ktoblzcheck(const GncABTransDialog *td,
+                                                  const AB_TRANSACTION *trans);
 
-/* Callbacks - connect with GtkBuilder */
-G_MODULE_EXPORT void gnc_ab_trans_dialog_account_changed_cb(GtkEditable *editable, gpointer user_data);
+/* Callbacks - connected with GtkBuilder */
 G_MODULE_EXPORT void gnc_ab_trans_dialog_bankcode_changed_cb(GtkEditable *editable, gpointer user_data);
 G_MODULE_EXPORT void gnc_ab_trans_dialog_add_templ_cb(GtkButton *button, gpointer user_data);
 G_MODULE_EXPORT void gnc_ab_trans_dialog_moveup_templ_cb(GtkButton *button, gpointer user_data);
@@ -89,6 +88,7 @@
                                                                      GtkTreePath *path,
                                                                      GtkTreeViewColumn *column, 
                                                                      gpointer user_data);
+G_MODULE_EXPORT void gnc_ab_trans_dialog_verify_values(GncABTransDialog *td);
 
 
 enum
@@ -104,7 +104,7 @@
     GtkWidget *dialog;
     GtkWidget *parent;
     AB_ACCOUNT *ab_acc;
-
+    
     /* Whether this is a transfer or a direct debit */
     GncABTransType trans_type;
 
@@ -129,6 +129,9 @@
     GtkTreeView *template_gtktreeview;
     GtkListStore *template_list_store;
 
+    /* Exec button */
+    GtkWidget *exec_button;
+    
     /* Flag, if template list has been changed */
     gboolean templ_changed;
 
@@ -227,6 +230,7 @@
     const gchar *ab_accountnumber;
     const gchar *ab_bankname;
     const gchar *ab_bankcode;
+    GtkWidget *trans_vbox;
     GtkWidget *heading_label;
     GtkWidget *recp_name_heading;
     GtkWidget *recp_account_heading;
@@ -271,6 +275,7 @@
         gtk_window_set_transient_for(GTK_WINDOW(td->dialog), GTK_WINDOW(parent));
 
     /* Extract widgets */
+    trans_vbox = GTK_WIDGET(gtk_builder_get_object (builder, "trans_vbox"));    
     heading_label = GTK_WIDGET(gtk_builder_get_object (builder, "heading_label"));
     recp_name_heading = GTK_WIDGET(gtk_builder_get_object (builder, "recp_name_heading"));
     td->recp_name_entry = GTK_WIDGET(gtk_builder_get_object (builder, "recp_name_entry"));
@@ -284,6 +289,7 @@
     td->purpose_cont_entry = GTK_WIDGET(gtk_builder_get_object (builder, "purpose_cont_entry"));
     td->purpose_cont2_entry = GTK_WIDGET(gtk_builder_get_object (builder, "purpose_cont2_entry"));
     td->purpose_cont3_entry = GTK_WIDGET(gtk_builder_get_object (builder, "purpose_cont3_entry"));
+    td->exec_button = GTK_WIDGET(gtk_builder_get_object(builder, "exec_now_button"));
     orig_name_heading = GTK_WIDGET(gtk_builder_get_object (builder, "orig_name_heading"));
     orig_name_label = GTK_WIDGET(gtk_builder_get_object (builder, "orig_name_label"));
     orig_account_heading = GTK_WIDGET(gtk_builder_get_object (builder, "orig_account_heading"));
@@ -302,7 +308,9 @@
                                           TRUE);
     gnc_amount_edit_set_fraction(GNC_AMOUNT_EDIT(td->amount_edit),
                                  commodity_scu);
-
+    g_signal_connect_swapped (gnc_amount_edit_gtk_entry(GNC_AMOUNT_EDIT(td->amount_edit)), "changed",
+                              G_CALLBACK(gnc_ab_trans_dialog_verify_values), td);
+    
     /* Check for what kind of transaction this should be, and change the
      * labels accordingly */
     switch (trans_type)
@@ -367,23 +375,37 @@
     gtk_tree_view_append_column(td->template_gtktreeview, column);
 
     /* Connect the Signals */
-    gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, td);
+    gtk_builder_connect_signals_full(builder, gnc_builder_connect_full_func, td);
 
     g_object_unref(G_OBJECT(builder));
 
+    /* Disabled OK button until suitable values are filled */
+    gnc_ab_trans_dialog_verify_values(td);
+    
     return td;
 }
 
-static gboolean
-check_ktoblzcheck(GtkWidget *parent, const GncABTransDialog *td,
-                  const AB_TRANSACTION *trans)
+static void
+gnc_ab_trans_dialog_entry_set (GtkWidget* entry,
+                               const gchar* message,
+                               const gchar* stock_icon)
 {
+        g_object_set (entry, 
+                      "secondary-icon-stock", stock_icon, 
+                      "secondary-icon-tooltip-text", message,
+                      NULL);
+}
+
+static void
+gnc_ab_trans_dialog_check_ktoblzcheck(const GncABTransDialog *td,
+                                      const AB_TRANSACTION *trans)
+{
 #ifndef HAVE_KTOBLZCHECK_H
-    return TRUE;
+    return;
 #else
     gint blzresult;
     const char *blztext;
-    gboolean values_ok = TRUE;
+    gchar* message;
 
     ENTER(" ");
 
@@ -394,15 +416,16 @@
     switch (blzresult)
     {
     case 2:
-        gtk_widget_show(parent);
-        values_ok = gnc_verify_dialog(
-                        parent, TRUE,
-                        _("The internal check of the destination account number '%s' "
-                          "at the specified bank with bank code '%s' failed. This means "
-                          "the account number might contain an error. Should the online "
-                          "transfer job be sent with this account number anyway?"),
-                        AB_Transaction_GetRemoteAccountNumber(trans),
-                        AB_Transaction_GetRemoteBankCode(trans));
+        message = g_strdup_printf(_("The internal check of the destination account number '%s' "
+                                    "at the specified bank with bank code '%s' failed. This means "
+                                    "the account number might contain an error."),
+                                  AB_Transaction_GetRemoteAccountNumber(trans),
+                                  AB_Transaction_GetRemoteBankCode(trans));
+        gnc_ab_trans_dialog_entry_set (td->recp_bankcode_entry, message, 
+                                       GTK_STOCK_DIALOG_WARNING);
+        gnc_ab_trans_dialog_entry_set (td->recp_account_entry, message, 
+                                       GTK_STOCK_DIALOG_WARNING);
+                                       
         blztext = "Kontonummer wahrscheinlich falsch";
         break;
     case 0:
@@ -417,13 +440,130 @@
         break;
     }
 
+    if (blzresult != 2)
+    {
+        gnc_ab_trans_dialog_entry_set (td->recp_bankcode_entry, "", 
+                                       NULL);
+        gnc_ab_trans_dialog_entry_set (td->recp_account_entry, "", 
+                                       NULL);
+    }
+
     LEAVE("KtoBlzCheck said check is %d = %s",
           blzresult, blztext ? blztext : "(none)");
-
-    return values_ok;
 #endif
 }
 
+static void
+gnc_ab_trans_dialog_clear_transaction(GncABTransDialog *td)
+{
+    AB_Transaction_free(td->ab_trans);
+    td->ab_trans = NULL;
+}
+
+void
+gnc_ab_trans_dialog_verify_values(GncABTransDialog *td)
+{
+    gchar* purpose;
+    gchar* othername;
+    const gchar* account;
+    const gchar* bankcode;
+
+    gboolean values_ok = TRUE;
+
+    GtkWidget *amount_entry = gnc_amount_edit_gtk_entry(GNC_AMOUNT_EDIT(td->amount_edit));
+
+    /* Fill in the values from the entry fields into a new
+     * AB_TRANSACTION */
+    td->ab_trans = gnc_ab_trans_dialog_fill_values(td);
+
+    /* Check recipient / remote name */
+    othername = gnc_ab_get_remote_name(td->ab_trans);
+    if (!othername || !strlen(othername))
+    {
+        gnc_ab_trans_dialog_entry_set (td->recp_name_entry, 
+                                       _("You did not enter a recipient name.  A recipient name is "
+                                         "required for an online transfer.\n"),
+                                       GTK_STOCK_CANCEL);
+
+        g_free (othername);
+        values_ok = FALSE;
+    }
+    else
+    {
+        gnc_ab_trans_dialog_entry_set (td->recp_name_entry, "", NULL);
+        g_free(othername);
+    }
+
+    /* Check account */
+    account = AB_Transaction_GetRemoteAccountNumber(td->ab_trans);
+    if (!account || !strlen(account))
+    {
+        gnc_ab_trans_dialog_entry_set (td->recp_account_entry, 
+                                       _("You did not enter a recipient account.  A recipient account is "
+                                         "required for an online transfer.\n"),
+                                       GTK_STOCK_CANCEL);
+        values_ok = FALSE;
+    }
+    else
+    {
+        gnc_ab_trans_dialog_entry_set (td->recp_account_entry, "", NULL);
+    }
+    /* Check bank */
+    bankcode = AB_Transaction_GetRemoteBankCode(td->ab_trans);
+    if (!bankcode || !strlen(bankcode))
+    {
+        gnc_ab_trans_dialog_entry_set (td->recp_bankcode_entry, 
+                                       _("You did not enter a recipient bank.  A recipient bank is "
+                                         "required for an online transfer.\n"),
+                                       GTK_STOCK_CANCEL);
+        values_ok = FALSE;
+    }
+    else
+    {
+        gnc_ab_trans_dialog_entry_set (td->recp_bankcode_entry, "", NULL);
+    }
+    /* Check if account details are correct - gives warning only */
+    if (values_ok)
+        gnc_ab_trans_dialog_check_ktoblzcheck(td, td->ab_trans);
+
+    /* Check transaction value */
+    if (AB_Value_GetValueAsDouble(AB_Transaction_GetValue(td->ab_trans))
+        == 0.0)
+    {
+        gnc_ab_trans_dialog_entry_set (amount_entry, 
+                                       _("The amount is zero or the amount field could not be "
+                                         "interpreted correctly. You might have mixed up decimal "
+                                         "point and comma, compared to your locale settings. "
+                                         "This does not result in a valid online transfer job."),
+                                       GTK_STOCK_CANCEL);
+        values_ok = FALSE;
+    }
+    else
+    {
+        gnc_ab_trans_dialog_entry_set (amount_entry, "", NULL);
+    }
+    
+    /* Check transaction purpose */
+    purpose = gnc_ab_get_purpose(td->ab_trans);
+    if (!purpose || !strlen(purpose))
+    {
+        gnc_ab_trans_dialog_entry_set (td->purpose_entry, 
+                                       _("You did not enter any transaction purpose. A purpose is "
+                                         "required for an online transfer.\n"),
+                                       GTK_STOCK_CANCEL);
+        g_free (purpose);
+        values_ok = FALSE;
+    }
+    else
+    {
+        gnc_ab_trans_dialog_entry_set (td->purpose_entry, "", NULL);
+        g_free(purpose);
+    }
+
+    gtk_widget_set_sensitive(td->exec_button, values_ok);
+    gnc_ab_trans_dialog_clear_transaction(td);
+}
+
 gint
 gnc_ab_trans_dialog_run_until_ok(GncABTransDialog *td)
 {
@@ -454,117 +594,30 @@
     /* Show the dialog */
     gtk_widget_show(td->dialog);
 
-    /* Repeat until entered values make sense */
-    do
+    /* Now run the dialog until it gets closed by a button press */
+    result = gtk_dialog_run (GTK_DIALOG (td->dialog));
+
+    /* Was cancel pressed or dialog closed?
+     *  GNC_RESPONSE_NOW == execute now
+     *  GNC_RESPONSE_LATER == scheduled for later execution (unimplemented)
+     *  GTK_RESPONSE_CANCEL == cancel
+     *  GTK_RESPONSE_DELETE_EVENT == window destroyed */
+    if (result != GNC_RESPONSE_NOW && result != GNC_RESPONSE_LATER)
     {
-        /* Now run the dialog until it gets closed by a button press */
-        result = gtk_dialog_run (GTK_DIALOG (td->dialog));
+        gtk_widget_destroy(td->dialog);
+        td->dialog = NULL;
+        return result;
+    }
 
-        /* Was cancel pressed or dialog closed?
-         *  GNC_RESPONSE_NOW == execute now
-         *  GNC_RESPONSE_LATER == scheduled for later execution (unimplemented)
-         *  GTK_RESPONSE_CANCEL == cancel
-         *  GTK_RESPONSE_DELETE_EVENT == window destroyed */
-        if (result != GNC_RESPONSE_NOW && result != GNC_RESPONSE_LATER)
-        {
-            gtk_widget_destroy(td->dialog);
-            td->dialog = NULL;
-            break;
-        }
+    /* Get the transaction details - have been checked beforehand */
+    td->ab_trans = gnc_ab_trans_dialog_fill_values(td);
 
-        /* Now fill in the values from the entry fields into a new
-         * AB_TRANSACTION */
-        td->ab_trans = gnc_ab_trans_dialog_fill_values(td);
-        values_ok = TRUE;
+    /* FIXME: If this is a direct debit, set the textkey/ "Textschluessel"/
+     * transactionCode according to some GUI selection here!! */
+    /*if (td->trans_type == SINGLE_DEBITNOTE)
+    AB_TRANSACTION_setTextKey (td->hbci_trans, 05); */
+    
 
-        /* Check transaction value */
-        values_ok =
-            AB_Value_GetValueAsDouble(AB_Transaction_GetValue(td->ab_trans))
-            != 0.0;
-        if (!values_ok)
-        {
-            gtk_widget_show(td->dialog);
-            if (gnc_verify_dialog(
-                        td->dialog, TRUE, "%s",
-                        _("The amount is zero or the amount field could not be "
-                          "interpreted correctly. You might have mixed up decimal "
-                          "point and comma, compared to your locale settings. "
-                          "This does not result in a valid online transfer job. \n"
-                          "\n"
-                          "Do you want to enter the job again?")))
-            {
-                continue;
-            }
-            else
-            {
-                AB_Transaction_free(td->ab_trans);
-                td->ab_trans = NULL;
-                result = GTK_RESPONSE_CANCEL;
-                break;
-            }
-        }
-
-        /* Check transaction purpose */
-        purpose = gnc_ab_get_purpose(td->ab_trans);
-        values_ok = *purpose;
-        g_free(purpose);
-        if (!values_ok)
-        {
-            gtk_widget_show(td->dialog);
-            if (gnc_verify_dialog(
-                        td->dialog, TRUE, "%s",
-                        _("You did not enter any transaction purpose. A purpose is "
-                          "required for an online transfer.\n"
-                          "\n"
-                          "Do you want to enter the job again?")))
-            {
-                continue;
-            }
-            else
-            {
-                AB_Transaction_free(td->ab_trans);
-                td->ab_trans = NULL;
-                result = GTK_RESPONSE_CANCEL;
-                break;
-            }
-        }
-
-        /* Check recipient / remote name */
-        othername = gnc_ab_get_remote_name(td->ab_trans);
-        values_ok = othername && *othername;
-        g_free(othername);
-        if (!values_ok)
-        {
-            gtk_widget_show(td->dialog);
-            if (gnc_verify_dialog(
-                        td->dialog, TRUE, "%s",
-                        _("You did not enter a recipient name.  A recipient name is "
-                          "required for an online transfer.\n"
-                          "\n"
-                          "Do you want to enter the job again?")))
-            {
-                continue;
-            }
-            else
-            {
-                AB_Transaction_free(td->ab_trans);
-                td->ab_trans = NULL;
-                result = GTK_RESPONSE_CANCEL;
-                break;
-            }
-        }
-
-        /* FIXME: If this is a direct debit, set the textkey/ "Textschluessel"/
-         * transactionCode according to some GUI selection here!! */
-        /*if (td->trans_type == SINGLE_DEBITNOTE)
-          AB_TRANSACTION_setTextKey (td->hbci_trans, 05); */
-
-        /* And finally check the account code, if ktoblzcheck is available */
-        values_ok = check_ktoblzcheck(td->dialog, td, td->ab_trans);
-
-    }
-    while (!values_ok);
-
     /* Hide the dialog */
     if (td->dialog)
         gtk_widget_hide(td->dialog);
@@ -808,12 +861,6 @@
 }
 
 void
-gnc_ab_trans_dialog_account_changed_cb(GtkEditable *editable, gpointer user_data)
-{
-    /* TODO */
-}
-
-void
 gnc_ab_trans_dialog_bankcode_changed_cb(GtkEditable *editable, gpointer user_data)
 {
 #if HAVE_KTOBLZCHECK_H
@@ -864,6 +911,7 @@
     }
     LEAVE(" ");
 #endif
+    gnc_ab_trans_dialog_verify_values(td);
 }
 
 struct _FindTemplData

Modified: gnucash/trunk/src/import-export/aqbanking/dialog-ab.glade
===================================================================
--- gnucash/trunk/src/import-export/aqbanking/dialog-ab.glade	2012-01-28 22:12:12 UTC (rev 21902)
+++ gnucash/trunk/src/import-export/aqbanking/dialog-ab.glade	2012-01-28 22:12:26 UTC (rev 21903)
@@ -1,7 +1,6 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy project-wide -->
   <object class="GtkDialog" id="Connection Dialog">
     <property name="can_focus">False</property>
     <property name="border_width">5</property>
@@ -11,12 +10,12 @@
     <property name="type_hint">dialog</property>
     <signal name="delete-event" handler="ggg_delete_event_cb" swapped="no"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox9">
+      <object class="GtkBox" id="dialog-vbox9">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area9">
+          <object class="GtkButtonBox" id="dialog-action_area9">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="layout_style">end</property>
@@ -118,12 +117,10 @@
                           <object class="GtkEntry" id="top_entry">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="invisible_char">&#x25CF;</property>
+                            <property name="invisible_char">●</property>
                             <property name="invisible_char_set">True</property>
                             <property name="primary_icon_activatable">False</property>
                             <property name="secondary_icon_activatable">False</property>
-                            <property name="primary_icon_sensitive">True</property>
-                            <property name="secondary_icon_sensitive">True</property>
                           </object>
                           <packing>
                             <property name="left_attach">1</property>
@@ -181,12 +178,10 @@
                           <object class="GtkEntry" id="second_entry">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="invisible_char">&#x25CF;</property>
+                            <property name="invisible_char">●</property>
                             <property name="invisible_char_set">True</property>
                             <property name="primary_icon_activatable">False</property>
                             <property name="secondary_icon_activatable">False</property>
-                            <property name="primary_icon_sensitive">True</property>
-                            <property name="secondary_icon_sensitive">True</property>
                           </object>
                           <packing>
                             <property name="left_attach">1</property>
@@ -240,8 +235,6 @@
                       <object class="GtkScrolledWindow" id="scrolledwindow30">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="hscrollbar_policy">automatic</property>
-                        <property name="vscrollbar_policy">automatic</property>
                         <property name="shadow_type">in</property>
                         <child>
                           <object class="GtkTextView" id="log_text">
@@ -305,12 +298,12 @@
     <property name="title" translatable="yes">Get Transactions Online</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox1">
+      <object class="GtkBox" id="dialog-vbox1">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
         <property name="spacing">2</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
+          <object class="GtkButtonBox" id="dialog-action_area1">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="layout_style">end</property>
@@ -623,11 +616,11 @@
     <property name="title" translatable="yes">Enter Password</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox3">
+      <object class="GtkBox" id="dialog-vbox3">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area3">
+          <object class="GtkButtonBox" id="dialog-action_area3">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="layout_style">end</property>
@@ -729,12 +722,10 @@
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="visibility">False</property>
-                    <property name="invisible_char">&#x25CF;</property>
+                    <property name="invisible_char">●</property>
                     <property name="invisible_char_set">True</property>
                     <property name="primary_icon_activatable">False</property>
                     <property name="secondary_icon_activatable">False</property>
-                    <property name="primary_icon_sensitive">True</property>
-                    <property name="secondary_icon_sensitive">True</property>
                   </object>
                   <packing>
                     <property name="left_attach">1</property>
@@ -747,12 +738,10 @@
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="visibility">False</property>
-                    <property name="invisible_char">&#x25CF;</property>
+                    <property name="invisible_char">●</property>
                     <property name="invisible_char_set">True</property>
                     <property name="primary_icon_activatable">False</property>
                     <property name="secondary_icon_activatable">False</property>
-                    <property name="primary_icon_sensitive">True</property>
-                    <property name="secondary_icon_sensitive">True</property>
                   </object>
                   <packing>
                     <property name="left_attach">1</property>
@@ -891,11 +880,11 @@
     <property name="title" translatable="yes">Name for new template</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox2">
+      <object class="GtkBox" id="dialog-vbox2">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area2">
+          <object class="GtkButtonBox" id="dialog-action_area2">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="layout_style">end</property>
@@ -963,13 +952,11 @@
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="max_length">250</property>
-                <property name="invisible_char">&#x25CF;</property>
+                <property name="invisible_char">●</property>
                 <property name="activates_default">True</property>
                 <property name="invisible_char_set">True</property>
                 <property name="primary_icon_activatable">False</property>
                 <property name="secondary_icon_activatable">False</property>
-                <property name="primary_icon_sensitive">True</property>
-                <property name="secondary_icon_sensitive">True</property>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -997,114 +984,13 @@
     <property name="title" translatable="yes">Online Transaction</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox7">
+      <object class="GtkBox" id="dialog-vbox7">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
         <property name="spacing">2</property>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area7">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="exec_later_button">
-                <property name="label" translatable="yes">Execute later (unimpl.)</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_action_appearance">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="cancel_button">
-                <property name="label">gtk-cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_action_appearance">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="exec_now_button">
-                <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">True</property>
-                <property name="has_tooltip">True</property>
-                <property name="tooltip_markup">Execute this online transaction now</property>
-                <property name="tooltip_text" translatable="yes">Execute this online transaction now</property>
-                <property name="use_action_appearance">False</property>
-                <child>
-                  <object class="GtkAlignment" id="alignment6">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="xscale">0</property>
-                    <property name="yscale">0</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox122">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="spacing">2</property>
-                        <child>
-                          <object class="GtkImage" id="image4">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="stock">gtk-execute</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label8877454">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="label" translatable="yes">Execute Now</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>
-                    </child>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">2</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="GtkVBox" id="vbox151">
+          <object class="GtkVBox" id="trans_vbox">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="border_width">5</property>
@@ -1122,17 +1008,6 @@
               </packing>
             </child>
             <child>
-              <object class="GtkHSeparator" id="hseparator7">
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
               <object class="GtkTable" id="table6">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
@@ -1143,13 +1018,11 @@
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="max_length">12</property>
-                    <property name="invisible_char">&#x25CF;</property>
+                    <property name="invisible_char">●</property>
                     <property name="invisible_char_set">True</property>
                     <property name="primary_icon_activatable">False</property>
                     <property name="secondary_icon_activatable">False</property>
-                    <property name="primary_icon_sensitive">True</property>
-                    <property name="secondary_icon_sensitive">True</property>
-                    <signal name="changed" handler="gnc_ab_trans_dialog_account_changed_cb" swapped="no"/>
+                    <signal name="changed" handler="gnc_ab_trans_dialog_verify_values" swapped="yes"/>
                     <signal name="insert-text" handler="gnc_ab_trans_dialog_entry_filter_cb" swapped="no"/>
                   </object>
                   <packing>
@@ -1177,12 +1050,10 @@
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="max_length">8</property>
-                    <property name="invisible_char">&#x25CF;</property>
+                    <property name="invisible_char">●</property>
                     <property name="invisible_char_set">True</property>
                     <property name="primary_icon_activatable">False</property>
                     <property name="secondary_icon_activatable">False</property>
-                    <property name="primary_icon_sensitive">True</property>
-                    <property name="secondary_icon_sensitive">True</property>
                     <signal name="changed" handler="gnc_ab_trans_dialog_bankcode_changed_cb" swapped="no"/>
                     <signal name="insert-text" handler="gnc_ab_trans_dialog_entry_filter_cb" swapped="no"/>
                   </object>
@@ -1215,12 +1086,11 @@
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
                     <property name="max_length">27</property>
-                    <property name="invisible_char">&#x25CF;</property>
+                    <property name="invisible_char">●</property>
                     <property name="invisible_char_set">True</property>
                     <property name="primary_icon_activatable">False</property>
                     <property name="secondary_icon_activatable">False</property>
-                    <property name="primary_icon_sensitive">True</property>
-                    <property name="secondary_icon_sensitive">True</property>
+                    <signal name="changed" handler="gnc_ab_trans_dialog_verify_values" swapped="yes"/>
                   </object>
                   <packing>
                     <property name="right_attach">3</property>
@@ -1442,6 +1312,202 @@
                   </packing>
                 </child>
                 <child>
+                  <object class="GtkEntry" id="purpose_entry">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="max_length">27</property>
+                    <property name="invisible_char">●</property>
+                    <property name="invisible_char_set">True</property>
+                    <property name="primary_icon_activatable">False</property>
+                    <property name="secondary_icon_activatable">False</property>
+                    <signal name="changed" handler="gnc_ab_trans_dialog_verify_values" swapped="yes"/>
+                  </object>
+                  <packing>
+                    <property name="top_attach">11</property>
+                    <property name="bottom_attach">12</property>
+                    <property name="y_options"></property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEntry" id="purpose_cont2_entry">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="max_length">27</property>
+                    <property name="invisible_char">●</property>
+                    <property name="invisible_char_set">True</property>
+                    <property name="primary_icon_activatable">False</property>
+                    <property name="secondary_icon_activatable">False</property>
+                    <signal name="changed" handler="gnc_ab_trans_dialog_verify_values" swapped="yes"/>
+                  </object>
+                  <packing>
+                    <property name="top_attach">13</property>
+                    <property name="bottom_attach">14</property>
+                    <property name="y_options"></property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEntry" id="purpose_cont_entry">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="max_length">27</property>
+                    <property name="invisible_char">●</property>
+                    <property name="invisible_char_set">True</property>
+                    <property name="primary_icon_activatable">False</property>
+                    <property name="secondary_icon_activatable">False</property>
+                    <signal name="changed" handler="gnc_ab_trans_dialog_verify_values" swapped="yes"/>
+                  </object>
+                  <packing>
+                    <property name="left_attach">2</property>
+                    <property name="right_attach">3</property>
+                    <property name="top_attach">11</property>
+                    <property name="bottom_attach">12</property>
+                    <property name="y_options"></property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEntry" id="purpose_cont3_entry">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="max_length">27</property>
+                    <property name="invisible_char">●</property>
+                    <property name="invisible_char_set">True</property>
+                    <property name="primary_icon_activatable">False</property>
+                    <property name="secondary_icon_activatable">False</property>
+                    <signal name="changed" handler="gnc_ab_trans_dialog_verify_values" swapped="yes"/>
+                  </object>
+                  <packing>
+                    <property name="left_attach">2</property>
+                    <property name="right_attach">3</property>
+                    <property name="top_attach">13</property>
+                    <property name="bottom_attach">14</property>
+                    <property name="y_options"></property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHBox" id="amount_hbox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="top_attach">8</property>
+                    <property name="bottom_attach">9</property>
+                    <property name="y_options"></property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHSeparator" id="hseparator8">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                  </object>
+                  <packing>
+                    <property name="right_attach">3</property>
+                    <property name="top_attach">19</property>
+                    <property name="bottom_attach">20</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"></property>
+                    <property name="y_padding">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHSeparator" id="hseparator4">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                  </object>
+                  <packing>
+                    <property name="right_attach">3</property>
+                    <property name="top_attach">14</property>
+                    <property name="bottom_attach">15</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"></property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHSeparator" id="hseparator5">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                  </object>
+                  <packing>
+                    <property name="right_attach">3</property>
+                    <property name="top_attach">6</property>
+                    <property name="bottom_attach">7</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"></property>
+                    <property name="y_padding">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkHSeparator" id="hseparator6">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                  </object>
+                  <packing>
+                    <property name="right_attach">3</property>
+                    <property name="top_attach">9</property>
+                    <property name="bottom_attach">10</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"></property>
+                  </packing>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkExpander" id="expander1">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <child>
                   <object class="GtkHBox" id="hbox117">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
@@ -1450,6 +1516,7 @@
                       <object class="GtkVButtonBox" id="vbutonbox158">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
+                        <property name="homogeneous">True</property>
                         <child>
                           <object class="GtkButton" id="add_templ_button">
                             <property name="visible">True</property>
@@ -1633,8 +1700,6 @@
                       <object class="GtkScrolledWindow" id="template_scrolledwindow">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="hscrollbar_policy">automatic</property>
-                        <property name="vscrollbar_policy">automatic</property>
                         <property name="shadow_type">in</property>
                         <child>
                           <object class="GtkTreeView" id="template_list">
@@ -1643,6 +1708,9 @@
                             <property name="headers_visible">False</property>
                             <property name="rules_hint">True</property>
                             <signal name="row-activated" handler="gnc_ab_trans_dialog_templ_list_row_activated_cb" swapped="no"/>
+                            <child internal-child="selection">
+                              <object class="GtkTreeSelection" id="treeview-selection1"/>
+                            </child>
                           </object>
                         </child>
                       </object>
@@ -1650,222 +1718,143 @@
                         <property name="expand">True</property>
                         <property name="fill">True</property>
                         <property name="pack_type">end</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkLabel" id="label8877442">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">Use Transaction Template</property>
-                        <property name="justify">center</property>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
                         <property name="position">2</property>
                       </packing>
                     </child>
                   </object>
-                  <packing>
-                    <property name="right_attach">3</property>
-                    <property name="top_attach">20</property>
-                    <property name="bottom_attach">21</property>
-                    <property name="x_options">GTK_FILL</property>
-                  </packing>
                 </child>
-                <child>
-                  <object class="GtkEntry" id="purpose_entry">
+                <child type="label">
+                  <object class="GtkLabel" id="label1">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="max_length">27</property>
-                    <property name="invisible_char">&#x25CF;</property>
-                    <property name="invisible_char_set">True</property>
-                    <property name="primary_icon_activatable">False</property>
-                    <property name="secondary_icon_activatable">False</property>
-                    <property name="primary_icon_sensitive">True</property>
-                    <property name="secondary_icon_sensitive">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Templates</property>
                   </object>
-                  <packing>
-                    <property name="top_attach">11</property>
-                    <property name="bottom_attach">12</property>
-                    <property name="y_options"></property>
-                  </packing>
                 </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkHSeparator" id="hseparator7">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">3</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area7">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="exec_later_button">
+                <property name="label" translatable="yes">Execute later (unimpl.)</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_action_appearance">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="cancel_button">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="exec_now_button">
+                <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">True</property>
+                <property name="has_tooltip">True</property>
+                <property name="tooltip_markup">Execute this online transaction now</property>
+                <property name="tooltip_text" translatable="yes">Execute this online transaction now</property>
+                <property name="use_action_appearance">False</property>
                 <child>
-                  <object class="GtkEntry" id="purpose_cont2_entry">
+                  <object class="GtkAlignment" id="alignment6">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="max_length">27</property>
-                    <property name="invisible_char">&#x25CF;</property>
-                    <property name="invisible_char_set">True</property>
-                    <property name="primary_icon_activatable">False</property>
-                    <property name="secondary_icon_activatable">False</property>
-                    <property name="primary_icon_sensitive">True</property>
-                    <property name="secondary_icon_sensitive">True</property>
-                  </object>
-                  <packing>
-                    <property name="top_attach">13</property>
-                    <property name="bottom_attach">14</property>
-                    <property name="y_options"></property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkEntry" id="purpose_cont_entry">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="max_length">27</property>
-                    <property name="invisible_char">&#x25CF;</property>
-                    <property name="invisible_char_set">True</property>
-                    <property name="primary_icon_activatable">False</property>
-                    <property name="secondary_icon_activatable">False</property>
-                    <property name="primary_icon_sensitive">True</property>
-                    <property name="secondary_icon_sensitive">True</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">2</property>
-                    <property name="right_attach">3</property>
-                    <property name="top_attach">11</property>
-                    <property name="bottom_attach">12</property>
-                    <property name="y_options"></property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkEntry" id="purpose_cont3_entry">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="max_length">27</property>
-                    <property name="invisible_char">&#x25CF;</property>
-                    <property name="invisible_char_set">True</property>
-                    <property name="primary_icon_activatable">False</property>
-                    <property name="secondary_icon_activatable">False</property>
-                    <property name="primary_icon_sensitive">True</property>
-                    <property name="secondary_icon_sensitive">True</property>
-                  </object>
-                  <packing>
-                    <property name="left_attach">2</property>
-                    <property name="right_attach">3</property>
-                    <property name="top_attach">13</property>
-                    <property name="bottom_attach">14</property>
-                    <property name="y_options"></property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkHBox" id="amount_hbox">
-                    <property name="visible">True</property>
                     <property name="can_focus">False</property>
+                    <property name="xscale">0</property>
+                    <property name="yscale">0</property>
                     <child>
-                      <placeholder/>
+                      <object class="GtkHBox" id="hbox122">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="spacing">2</property>
+                        <child>
+                          <object class="GtkImage" id="image4">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="stock">gtk-execute</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="label8877454">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes">Execute Now</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>
                     </child>
                   </object>
-                  <packing>
-                    <property name="top_attach">8</property>
-                    <property name="bottom_attach">9</property>
-                    <property name="y_options"></property>
-                  </packing>
                 </child>
-                <child>
-                  <object class="GtkHSeparator" id="hseparator8">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                  </object>
-                  <packing>
-                    <property name="right_attach">3</property>
-                    <property name="top_attach">19</property>
-                    <property name="bottom_attach">20</property>
-                    <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
-                    <property name="y_padding">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkHSeparator" id="hseparator4">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                  </object>
-                  <packing>
-                    <property name="right_attach">3</property>
-                    <property name="top_attach">14</property>
-                    <property name="bottom_attach">15</property>
-                    <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkHSeparator" id="hseparator5">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                  </object>
-                  <packing>
-                    <property name="right_attach">3</property>
-                    <property name="top_attach">6</property>
-                    <property name="bottom_attach">7</property>
-                    <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
-                    <property name="y_padding">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkHSeparator" id="hseparator6">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                  </object>
-                  <packing>
-                    <property name="right_attach">3</property>
-                    <property name="top_attach">9</property>
-                    <property name="bottom_attach">10</property>
-                    <property name="x_options">GTK_FILL</property>
-                    <property name="y_options"></property>
-                  </packing>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
-                <child>
-                  <placeholder/>
-                </child>
               </object>
               <packing>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
                 <property name="position">2</property>
               </packing>
             </child>
           </object>
           <packing>
-            <property name="expand">True</property>
+            <property name="expand">False</property>
             <property name="fill">True</property>
-            <property name="position">2</property>
+            <property name="pack_type">end</property>
+            <property name="position">1</property>
           </packing>
         </child>
       </object>



More information about the gnucash-changes mailing list