gnucash master: Multiple changes pushed

Robert Fewell bobit at code.gnucash.org
Mon Feb 17 06:02:32 EST 2020


Updated	 via  https://github.com/Gnucash/gnucash/commit/5475f39f (commit)
	 via  https://github.com/Gnucash/gnucash/commit/7a16e048 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/832ad7e8 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/ba1af550 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/ce0d52e1 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/c60555e9 (commit)
	from  https://github.com/Gnucash/gnucash/commit/efed7094 (commit)



commit 5475f39f0b87279ae51aaf807466b4cb5604e90a
Merge: efed70941 7a16e0482
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Mon Feb 17 10:33:00 2020 +0000

    Merge branch 'maint'

diff --cc gnucash/report/stylesheets/css.scm
index 1353987bd,f5f6e0097..bbb134bac
--- a/gnucash/report/stylesheets/css.scm
+++ b/gnucash/report/stylesheets/css.scm
@@@ -19,17 -19,22 +19,23 @@@
  ;; Boston, MA  02110-1301,  USA       gnu at gnu.org
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  
 -(define-module (gnucash report stylesheet-css))
 +(define-module (gnucash report stylesheets css))
  
 -(use-modules (gnucash gnc-module))
 +(use-modules (gnucash engine))
 +(use-modules (gnucash utilities))
  (use-modules (gnucash core-utils))
 -(use-modules (gnucash gettext))
 -
 -(gnc:module-load "gnucash/html" 0)
 -(gnc:module-load "gnucash/report/report-system" 0)
 +(use-modules (gnucash app-utils))
 +(use-modules (gnucash report))
 +(use-modules (srfi srfi-13))
 +(use-modules (gnucash html))
  
  (define default-css "/* default style */
+ @media (prefers-color-scheme: dark) {
+     body {
+         color: #000; background-color: #fff;
+     }
+ }
+ 
  html, body {
      height: 100vh;
      margin: 0;

commit 7a16e048223af70b2373ce1516b4448647a8bd2f
Author: Geert Janssens <geert at kobaltwit.be>
Date:   Sun Feb 16 20:02:33 2020 +0100

    Use GNUCASH_BUILD_ID in the gnucash appdata file
    
    Add it to the release version if
    - it was defined
    - and it's not the same as GNC_VCS_REV

diff --git a/cmake/insert-vcs-data.cmake b/cmake/insert-vcs-data.cmake
index 2e0ce92ca..bcd95ffd3 100644
--- a/cmake/insert-vcs-data.cmake
+++ b/cmake/insert-vcs-data.cmake
@@ -13,4 +13,9 @@
 
 include (${SRC_DIR}/cmake/version-info2env.cmake)
 versioninfo2env (${VCS_INFO_FILE})
+
+
+if (GNUCASH_BUILD_ID AND NOT "${GNUCASH_BUILD_ID}" STREQUAL "${GNC_VCS_REV}")
+    set (GNC_VCS_REV "${GNC_VCS_REV} (${GNUCASH_BUILD_ID})")
+endif()
 configure_file(${SRC} ${DST})
diff --git a/gnucash/gnome/CMakeLists.txt b/gnucash/gnome/CMakeLists.txt
index 9fd607d2e..2dee01035 100644
--- a/gnucash/gnome/CMakeLists.txt
+++ b/gnucash/gnome/CMakeLists.txt
@@ -187,6 +187,7 @@ add_custom_command(
     COMMAND ${CMAKE_COMMAND} -D SRC=${GNC_APPDATA_IN}
                              -D DST=${CMAKE_CURRENT_BINARY_DIR}/gnucash.appdata.xml
                              -D VCS_INFO_FILE=${VCS_INFO_FILE}
+                             -D GNUCASH_BUILD_ID=${GNUCASH_BUILD_ID}
                              -D PROJECT_VERSION=${PROJECT_VERSION}
                              -D SRC_DIR=${CMAKE_SOURCE_DIR}
                              -P ${CMAKE_SOURCE_DIR}/cmake/insert-vcs-data.cmake)

commit 832ad7e85ee1368942d709271ba5de55f2ae09aa
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Sun Feb 16 14:39:37 2020 +0000

    Reformat source files gnc-plugin-page.*
    
    Change tabs for spaces and change some space positioning.

diff --git a/gnucash/gnome-utils/gnc-plugin-page.c b/gnucash/gnome-utils/gnc-plugin-page.c
index 9e6c70dca..4afd75674 100644
--- a/gnucash/gnome-utils/gnc-plugin-page.c
+++ b/gnucash/gnome-utils/gnc-plugin-page.c
@@ -47,16 +47,16 @@ static gpointer parent_class = NULL;
 
 static void gnc_plugin_page_class_init (GncPluginPageClass *klass);
 static void gnc_plugin_page_init       (GncPluginPage *plugin_page,
-		                        void *data);
+                                        void *data);
 static void gnc_plugin_page_finalize   (GObject *object);
-static void gnc_plugin_page_set_property (GObject         *object,
-        guint            prop_id,
-        const GValue    *value,
-        GParamSpec      *pspec);
-static void gnc_plugin_page_get_property (GObject         *object,
-        guint            prop_id,
-        GValue          *value,
-        GParamSpec      *pspec);
+static void gnc_plugin_page_set_property (GObject      *object,
+                                          guint         prop_id,
+                                          const GValue *value,
+                                          GParamSpec   *pspec);
+static void gnc_plugin_page_get_property (GObject      *object,
+                                          guint         prop_id,
+                                          GValue       *value,
+                                          GParamSpec   *pspec);
 
 static void gnc_plugin_page_default_focus (GncPluginPage *plugin_page,
                                            gboolean on_current_page);
@@ -112,10 +112,10 @@ typedef struct _GncPluginPagePrivate
 } GncPluginPagePrivate;
 
 GNC_DEFINE_TYPE_WITH_CODE(GncPluginPage, gnc_plugin_page, G_TYPE_OBJECT,
-		        G_ADD_PRIVATE(GncPluginPage))
+                G_ADD_PRIVATE(GncPluginPage))
 
 #define GNC_PLUGIN_PAGE_GET_PRIVATE(o)  \
-   ((GncPluginPagePrivate*)g_type_instance_get_private((GTypeInstance*)o, GNC_TYPE_PLUGIN_PAGE))
+   ((GncPluginPagePrivate*)g_type_instance_get_private ((GTypeInstance*)o, GNC_TYPE_PLUGIN_PAGE))
 
 /*  Create the display widget that corresponds to this plugin.  This
  *  function will be called by the main/embedded window manipulation
@@ -128,9 +128,9 @@ gnc_plugin_page_create_widget (GncPluginPage *plugin_page)
     GncPluginPageClass *klass;
     GtkWidget *widget;
 
-    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page), NULL);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(plugin_page), NULL);
 
-    klass = GNC_PLUGIN_PAGE_GET_CLASS (plugin_page);
+    klass = GNC_PLUGIN_PAGE_GET_CLASS(plugin_page);
     g_return_val_if_fail (klass != NULL, NULL);
     g_return_val_if_fail (klass->create_widget != NULL, NULL);
 
@@ -143,7 +143,7 @@ gnc_plugin_page_create_widget (GncPluginPage *plugin_page)
      * main notebook for the window.
      */
     if (klass->destroy_widget)
-        g_object_ref(widget);
+        g_object_ref (widget);
 
     return widget;
 }
@@ -157,9 +157,9 @@ gnc_plugin_page_destroy_widget (GncPluginPage *plugin_page)
 {
     GncPluginPageClass *klass;
 
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(plugin_page));
 
-    klass = GNC_PLUGIN_PAGE_GET_CLASS (plugin_page);
+    klass = GNC_PLUGIN_PAGE_GET_CLASS(plugin_page);
     g_return_if_fail (klass != NULL);
     g_return_if_fail (klass->destroy_widget != NULL);
 
@@ -172,19 +172,15 @@ void
 gnc_plugin_page_show_summarybar (GncPluginPage *page,
                                  gboolean visible)
 {
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(page));
 
     if (!page->summarybar)
         return;
 
     if (visible)
-    {
-        gtk_widget_show(page->summarybar);
-    }
+        gtk_widget_show (page->summarybar);
     else
-    {
-        gtk_widget_hide(page->summarybar);
-    }
+        gtk_widget_hide (page->summarybar);
 }
 
 
@@ -199,16 +195,16 @@ gnc_plugin_page_save_page (GncPluginPage *page,
 {
     GncPluginPageClass *klass;
 
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(page));
     g_return_if_fail (key_file != NULL);
     g_return_if_fail (group_name != NULL);
 
     ENTER(" ");
-    klass = GNC_PLUGIN_PAGE_GET_CLASS (page);
+    klass = GNC_PLUGIN_PAGE_GET_CLASS(page);
     g_return_if_fail (klass != NULL);
     g_return_if_fail (klass->save_page != NULL);
 
-    klass->save_page(page, key_file, group_name);
+    klass->save_page (page, key_file, group_name);
     LEAVE(" ");
 }
 
@@ -227,17 +223,17 @@ gnc_plugin_page_recreate_page(GtkWidget *window,
     GType type;
 
     ENTER("type %s, keyfile %p, group %s", page_type, key_file, page_group);
-    type = g_type_from_name(page_type);
+    type = g_type_from_name (page_type);
     if (type == 0)
     {
         LEAVE("Cannot find type named %s", page_type);
         return NULL;
     }
 
-    klass = g_type_class_ref(type);
+    klass = g_type_class_ref (type);
     if (klass == NULL)
     {
-        const gchar *type_name = g_type_name(type);
+        const gchar *type_name = g_type_name (type);
         LEAVE("Cannot create class %s(%s)", page_type, type_name ? type_name : "invalid type");
         return NULL;
     }
@@ -245,12 +241,12 @@ gnc_plugin_page_recreate_page(GtkWidget *window,
     if (!klass->recreate_page)
     {
         LEAVE("Class %shas no recreate function.", page_type);
-        g_type_class_unref(klass);
+        g_type_class_unref (klass);
         return NULL;
     }
 
     page = (klass->recreate_page)(window, key_file, page_group);
-    g_type_class_unref(klass);
+    g_type_class_unref (klass);
     LEAVE(" ");
     return page;
 }
@@ -268,9 +264,9 @@ gnc_plugin_page_merge_actions (GncPluginPage *page,
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     priv->ui_merge = ui_merge;
     gtk_action_group_set_sensitive (priv->action_group, TRUE);
-    priv->merge_id = gnc_plugin_add_actions(priv->ui_merge,
-                                            priv->action_group,
-                                            priv->ui_description);
+    priv->merge_id = gnc_plugin_add_actions (priv->ui_merge,
+                                             priv->action_group,
+                                             priv->ui_description);
 }
 
 
@@ -283,13 +279,13 @@ gnc_plugin_page_unmerge_actions (GncPluginPage *page,
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
 
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(page));
     g_return_if_fail (priv->merge_id != 0);
     g_return_if_fail (priv->action_group != NULL);
 
-    gtk_ui_manager_remove_ui(ui_merge, priv->merge_id);
+    gtk_ui_manager_remove_ui (ui_merge, priv->merge_id);
     gtk_action_group_set_sensitive (priv->action_group, FALSE);
-    gtk_ui_manager_remove_action_group(ui_merge, priv->action_group);
+    gtk_ui_manager_remove_action_group (ui_merge, priv->action_group);
 
     priv->ui_merge = NULL;
     priv->merge_id = 0;
@@ -301,8 +297,8 @@ gnc_plugin_page_get_action (GncPluginPage *page, const gchar *name)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_val_if_fail(GNC_IS_PLUGIN_PAGE(page), NULL);
-    g_return_val_if_fail(name != NULL, NULL);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), NULL);
+    g_return_val_if_fail (name != NULL, NULL);
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     if (!priv->action_group)
@@ -317,9 +313,9 @@ gnc_plugin_page_get_plugin_name (GncPluginPage *plugin_page)
 {
     GncPluginPageClass *klass;
 
-    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page), NULL);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(plugin_page), NULL);
 
-    klass = GNC_PLUGIN_PAGE_GET_CLASS (plugin_page);
+    klass = GNC_PLUGIN_PAGE_GET_CLASS(plugin_page);
     g_return_val_if_fail (klass != NULL, NULL);
 
     return (klass->plugin_name);
@@ -330,33 +326,33 @@ gnc_plugin_page_get_plugin_name (GncPluginPage *plugin_page)
 void
 gnc_plugin_page_inserted (GncPluginPage *plugin_page)
 {
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(plugin_page));
 
-    g_signal_emit (G_OBJECT (plugin_page), signals[INSERTED], 0);
+    g_signal_emit (G_OBJECT(plugin_page), signals[INSERTED], 0);
 }
 
 void
 gnc_plugin_page_removed (GncPluginPage *plugin_page)
 {
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(plugin_page));
 
-    g_signal_emit (G_OBJECT (plugin_page), signals[REMOVED], 0);
+    g_signal_emit (G_OBJECT(plugin_page), signals[REMOVED], 0);
 }
 
 void
 gnc_plugin_page_selected (GncPluginPage *plugin_page)
 {
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(plugin_page));
 
-    g_signal_emit (G_OBJECT (plugin_page), signals[SELECTED], 0);
+    g_signal_emit (G_OBJECT(plugin_page), signals[SELECTED], 0);
 }
 
 void
 gnc_plugin_page_unselected (GncPluginPage *plugin_page)
 {
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (plugin_page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(plugin_page));
 
-    g_signal_emit (G_OBJECT (plugin_page), signals[UNSELECTED], 0);
+    g_signal_emit (G_OBJECT(plugin_page), signals[UNSELECTED], 0);
 }
 
 /** Initialize the class for a new generic plugin page.  This will set
@@ -369,7 +365,7 @@ gnc_plugin_page_unselected (GncPluginPage *plugin_page)
 static void
 gnc_plugin_page_class_init (GncPluginPageClass *klass)
 {
-    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+    GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
 
     parent_class = g_type_class_peek_parent (klass);
     gobject_class->finalize = gnc_plugin_page_finalize;
@@ -527,8 +523,8 @@ gnc_plugin_page_init (GncPluginPage *page, void *data)
     page->window      = NULL;
     page->summarybar  = NULL;
 
-    gnc_gobject_tracking_remember(G_OBJECT(page),
-		                  G_OBJECT_CLASS(klass));
+    gnc_gobject_tracking_remember (G_OBJECT(page),
+                                   G_OBJECT_CLASS(klass));
 }
 
 
@@ -545,28 +541,31 @@ gnc_plugin_page_finalize (GObject *object)
     GncPluginPagePrivate *priv;
     GncPluginPage *page;
 
-    page = GNC_PLUGIN_PAGE (object);
+    page = GNC_PLUGIN_PAGE(object);
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     if (priv->page_name)
-        g_free(priv->page_name);
+        g_free (priv->page_name);
+
     if (priv->page_color)
-        g_free(priv->page_color);
+        g_free (priv->page_color);
+
     if (priv->uri)
-        g_free(priv->uri);
+        g_free (priv->uri);
+
     if (priv->statusbar_text)
-        g_free(priv->statusbar_text);
+        g_free (priv->statusbar_text);
 
     if (priv->books)
     {
-        g_list_free(priv->books);
+        g_list_free (priv->books);
         priv->books = NULL;
     }
 
     page->window = NULL; // Don't need to free it.
 
-    gnc_gobject_tracking_forget(object);
-    G_OBJECT_CLASS (parent_class)->finalize (object);
+    gnc_gobject_tracking_forget (object);
+    G_OBJECT_CLASS(parent_class)->finalize (object);
 }
 
 /************************************************************/
@@ -673,22 +672,22 @@ gnc_plugin_page_set_property (GObject      *object,
     switch (prop_id)
     {
     case PROP_PAGE_NAME:
-        gnc_plugin_page_set_page_name(page, g_value_get_string(value));
+        gnc_plugin_page_set_page_name (page, g_value_get_string (value));
         break;
     case PROP_PAGE_COLOR:
-        gnc_plugin_page_set_page_color(page, g_value_get_string(value));
+        gnc_plugin_page_set_page_color (page, g_value_get_string (value));
         break;
     case PROP_PAGE_URI:
-        gnc_plugin_page_set_uri(page, g_value_get_string(value));
+        gnc_plugin_page_set_uri (page, g_value_get_string (value));
         break;
     case PROP_STATUSBAR_TEXT:
-        gnc_plugin_page_set_statusbar_text(page, g_value_get_string(value));
+        gnc_plugin_page_set_statusbar_text (page, g_value_get_string (value));
         break;
     case PROP_USE_NEW_WINDOW:
-        gnc_plugin_page_set_use_new_window(page, g_value_get_boolean(value));
+        gnc_plugin_page_set_use_new_window (page, g_value_get_boolean (value));
         break;
     case PROP_UI_DESCRIPTION:
-        gnc_plugin_page_set_ui_description(page, g_value_get_string(value));
+        gnc_plugin_page_set_ui_description (page, g_value_get_string (value));
         break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -706,11 +705,11 @@ gnc_plugin_page_add_book (GncPluginPage *page, QofBook *book)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(page));
     g_return_if_fail (book != NULL);
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
-    priv->books = g_list_append(priv->books, book);
+    priv->books = g_list_append (priv->books, book);
 }
 
 
@@ -721,11 +720,11 @@ gnc_plugin_page_has_book (GncPluginPage *page, QofBook *book)
     GncPluginPagePrivate *priv;
     GList *item;
 
-    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), FALSE);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), FALSE);
     g_return_val_if_fail (book != NULL, FALSE);
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
-    for (item = priv->books; item; item = g_list_next(item))
+    for (item = priv->books; item; item = g_list_next (item))
     {
         if (item->data == book)
         {
@@ -742,7 +741,7 @@ gnc_plugin_page_has_books (GncPluginPage *page)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), FALSE);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), FALSE);
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     return (priv->books != NULL);
@@ -754,7 +753,7 @@ gnc_plugin_page_has_books (GncPluginPage *page)
 GtkWidget *
 gnc_plugin_page_get_window (GncPluginPage *page)
 {
-    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), NULL);
 
     return page->window;
 }
@@ -767,7 +766,7 @@ gnc_plugin_page_get_page_name (GncPluginPage *page)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), NULL);
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     return priv->page_name;
@@ -782,12 +781,13 @@ gnc_plugin_page_set_page_name (GncPluginPage *page, const gchar *name)
     GncPluginPagePrivate *priv;
     GncPluginPageClass *klass;
 
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(page));
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     if (priv->page_name)
-        g_free(priv->page_name);
-    priv->page_name = g_strdup(name);
+        g_free (priv->page_name);
+
+    priv->page_name = g_strdup (name);
 
     /* Perform page specific actions */
     klass = GNC_PLUGIN_PAGE_GET_CLASS (page);
@@ -806,7 +806,7 @@ gnc_plugin_page_get_page_long_name (GncPluginPage *page)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), NULL);
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     return priv->page_long_name;
@@ -820,12 +820,13 @@ gnc_plugin_page_set_page_long_name (GncPluginPage *page, const gchar *name)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(page));
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     if (priv->page_long_name)
-        g_free(priv->page_long_name);
-    priv->page_long_name = g_strdup(name);
+        g_free (priv->page_long_name);
+
+    priv->page_long_name = g_strdup (name);
 }
 
 
@@ -835,7 +836,7 @@ gnc_plugin_page_get_page_color (GncPluginPage *page)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), NULL);
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     return priv->page_color;
@@ -848,13 +849,14 @@ gnc_plugin_page_set_page_color (GncPluginPage *page, const gchar *color)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(page));
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     if (priv->page_color)
-        g_free(priv->page_color);
+        g_free (priv->page_color);
+
     if (color)
-        priv->page_color = g_strdup(color);
+        priv->page_color = g_strdup (color);
 }
 
 
@@ -968,7 +970,7 @@ gnc_plugin_page_get_uri (GncPluginPage *page)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), NULL);
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     return priv->uri;
@@ -981,12 +983,13 @@ gnc_plugin_page_set_uri (GncPluginPage *page, const gchar *name)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(page));
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     if (priv->uri)
-        g_free(priv->uri);
-    priv->uri = g_strdup(name);
+        g_free (priv->uri);
+
+    priv->uri = g_strdup (name);
 }
 
 
@@ -996,7 +999,7 @@ gnc_plugin_page_get_statusbar_text (GncPluginPage *page)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), NULL);
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     return priv->statusbar_text;
@@ -1009,12 +1012,13 @@ gnc_plugin_page_set_statusbar_text (GncPluginPage *page, const gchar *message)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(page));
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     if (priv->statusbar_text)
-        g_free(priv->statusbar_text);
-    priv->statusbar_text = g_strdup(message);
+        g_free (priv->statusbar_text);
+
+    priv->statusbar_text = g_strdup (message);
 }
 
 
@@ -1024,7 +1028,7 @@ gnc_plugin_page_get_use_new_window (GncPluginPage *page)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), FALSE);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), FALSE);
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     return priv->use_new_window;
@@ -1040,7 +1044,7 @@ gnc_plugin_page_set_use_new_window (GncPluginPage *page, gboolean use_new)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE (page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(page));
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     priv->use_new_window = use_new;
@@ -1053,7 +1057,7 @@ gnc_plugin_page_get_ui_description (GncPluginPage *page)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), FALSE);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), FALSE);
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     return priv->ui_description;
@@ -1068,12 +1072,13 @@ gnc_plugin_page_set_ui_description (GncPluginPage *page,
 {
     GncPluginPagePrivate *priv;
 
-    g_return_if_fail(GNC_IS_PLUGIN_PAGE(page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE(page));
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     if (priv->ui_description)
-        g_free(priv->ui_description);
-    priv->ui_description = g_strdup(ui_filename);
+        g_free (priv->ui_description);
+
+    priv->ui_description = g_strdup (ui_filename);
 }
 
 
@@ -1083,7 +1088,7 @@ gnc_plugin_page_get_ui_merge (GncPluginPage *page)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_val_if_fail(GNC_IS_PLUGIN_PAGE(page), NULL);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), NULL);
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     return priv->ui_merge;
@@ -1096,7 +1101,8 @@ gnc_plugin_page_get_action_group(GncPluginPage *page)
 {
     GncPluginPagePrivate *priv;
 
-    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE (page), NULL);
+    g_return_val_if_fail (GNC_IS_PLUGIN_PAGE(page), NULL);
+
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
     return priv->action_group;
 }
@@ -1110,8 +1116,8 @@ gnc_plugin_page_create_action_group (GncPluginPage *page, const gchar *group_nam
     GtkActionGroup *group;
 
     priv = GNC_PLUGIN_PAGE_GET_PRIVATE(page);
-    group = gtk_action_group_new(group_name);
-    gtk_action_group_set_translation_domain(group, PROJECT_NAME);
+    group = gtk_action_group_new (group_name);
+    gtk_action_group_set_translation_domain (group, PROJECT_NAME);
     priv->action_group = group;
     return group;
 }
@@ -1121,11 +1127,13 @@ gnc_plugin_page_finish_pending (GncPluginPage *page)
 {
     if (!page)
         return TRUE;
+
     if (!GNC_IS_PLUGIN_PAGE(page))
         return TRUE;
 
     if (!GNC_PLUGIN_PAGE_GET_CLASS(page)->finish_pending)
         return TRUE;
+
     return (GNC_PLUGIN_PAGE_GET_CLASS(page)->finish_pending)(page);
 }
 
diff --git a/gnucash/gnome-utils/gnc-plugin-page.h b/gnucash/gnome-utils/gnc-plugin-page.h
index 4501b6c85..a10e72881 100644
--- a/gnucash/gnome-utils/gnc-plugin-page.h
+++ b/gnucash/gnome-utils/gnc-plugin-page.h
@@ -1,6 +1,6 @@
 /*
  * gnc-plugin-page.h -- A page, which can be added to the
- *	GnuCash main window.
+ *  GnuCash main window.
  *
  * Copyright (C) 2003 Jan Arne Petersen <jpetersen at uni-bonn.de>
  * Copyright (C) 2003,2005 David Hampton <hampton at employees.org>
@@ -57,22 +57,22 @@ G_BEGIN_DECLS
 /** The instance data structure for a content plugin. */
 typedef struct GncPluginPage
 {
-    GObject gobject;		/**< The parent object data. */
-
-    GtkWidget *window;		/**< The window that contains the
-					 *   display widget for this plugin.
-					 *   This field is private to the
-					 *   gnucash window management
-					 *   code.  */
-    GtkWidget *notebook_page;	/**< The display widget for this
-					 *   plugin.  This field is private to
-					 *   the gnucash window management
-					 *   code.  */
-    GtkWidget *summarybar;		/**< The summary bar widget (if any)
-					 *   that is associated with this
-					 *   plugin.  This field is private to
-					 *   the gnucash window management
-					 *   code.  */
+    GObject gobject;            /**< The parent object data. */
+
+    GtkWidget *window;          /**< The window that contains the
+                                *   display widget for this plugin.
+                                *   This field is private to the
+                                *   gnucash window management
+                                *   code.  */
+    GtkWidget *notebook_page;   /**< The display widget for this
+                                *   plugin.  This field is private to
+                                *   the gnucash window management
+                                *   code.  */
+    GtkWidget *summarybar;      /**< The summary bar widget (if any)
+                                *   that is associated with this
+                                *   plugin.  This field is private to
+                                *   the gnucash window management
+                                *   code.  */
 } GncPluginPage;
 
 
@@ -105,6 +105,7 @@ typedef struct
      *
      *  @return A displayable gtk widget. */
     GtkWidget *(* create_widget) (GncPluginPage *plugin_page);
+
     /** Function called to destroy the display widget for a
      *  particular type of plugin.
      *
@@ -167,7 +168,7 @@ typedef struct
      *  widget.
      *
      *  @param page The page that was added to a window.
-     * 
+     *
      *  @return FALSE to remove idle */
     gboolean (* focus_page_function) (GncPluginPage *plugin_page);
 
@@ -219,7 +220,8 @@ GType gnc_plugin_page_get_type (void);
  *  @param plugin_page A pointer to the plugin for which a display
  *  widget should be created.
  *
- *  @return A displayable gtk widget. */
+ *  @return A displayable gtk widget.
+ */
 GtkWidget *gnc_plugin_page_create_widget (GncPluginPage *plugin_page);
 
 
@@ -228,7 +230,8 @@ GtkWidget *gnc_plugin_page_create_widget (GncPluginPage *plugin_page);
  *  code when a page is closed.
  *
  *  @param plugin_page A pointer to the plugin whose display widget
- *  should be destroyed. */
+ *  should be destroyed.
+ */
 void gnc_plugin_page_destroy_widget (GncPluginPage *plugin_page);
 
 
@@ -251,7 +254,8 @@ void gnc_plugin_page_show_summarybar (GncPluginPage *page, gboolean visible);
  *  @param key_file A pointer to the GKeyFile data structure where the
  *  page information should be written.
  *
- *  @param group_name The group name to use when saving data. */
+ *  @param group_name The group name to use when saving data.
+ */
 void gnc_plugin_page_save_page (GncPluginPage *page,
                                 GKeyFile *key_file,
                                 const gchar *group_name);
@@ -268,11 +272,12 @@ void gnc_plugin_page_save_page (GncPluginPage *page,
  *  @param key_file A pointer to the GKeyFile data structure where the
  *  page information should be read.
  *
- *  @param group_name The group name to use when restoring data. */
+ *  @param group_name The group name to use when restoring data.
+ */
 GncPluginPage *gnc_plugin_page_recreate_page (GtkWidget *window,
-        const gchar *page_type,
-        GKeyFile *key_file,
-        const gchar *group_name);
+                                              const gchar *page_type,
+                                              GKeyFile *key_file,
+                                              const gchar *group_name);
 
 
 /** Add the actions for a content page to the specified window.
@@ -281,7 +286,8 @@ GncPluginPage *gnc_plugin_page_recreate_page (GtkWidget *window,
  *  added to the user interface.
  *
  *  @param merge A pointer to the UI manager data structure for a
- *  window. */
+ *  window.
+ */
 void gnc_plugin_page_merge_actions (GncPluginPage *plugin_page,
                                     GtkUIManager *merge);
 
@@ -292,7 +298,8 @@ void gnc_plugin_page_merge_actions (GncPluginPage *plugin_page,
  *  removed from the user interface.
  *
  *  @param merge A pointer to the UI manager data structure for a
- *  window. */
+ *  window.
+ */
 void gnc_plugin_page_unmerge_actions (GncPluginPage *plugin_page,
                                       GtkUIManager *merge);
 
@@ -303,7 +310,8 @@ void gnc_plugin_page_unmerge_actions (GncPluginPage *plugin_page,
  *  should be retrieved.
  *
  *  @return The name of this plugin.  This string is owned by the
- *  plugin. */
+ *  plugin.
+ */
 const gchar *gnc_plugin_page_get_plugin_name (GncPluginPage *plugin_page);
 
 
@@ -530,7 +538,8 @@ GtkUIManager *gnc_plugin_page_get_ui_merge (GncPluginPage *page);
  *  @param page The page whose menu/toolbar action group should be
  *  retrieved.
  *
- *  @return A pointer to the GtkActionGroup object for this page. */
+ *  @return A pointer to the GtkActionGroup object for this page.
+ */
 GtkActionGroup *gnc_plugin_page_get_action_group (GncPluginPage *page);
 
 
@@ -544,9 +553,10 @@ GtkActionGroup *gnc_plugin_page_get_action_group (GncPluginPage *page);
  *  be consistent across all pages of the same type.
  *
  *  @return A pointer to the newly created GtkActionGroup object for
- *  this page. */
+ *  this page.
+ */
 GtkActionGroup * gnc_plugin_page_create_action_group (GncPluginPage *page,
-        const gchar *group_name);
+                                                      const gchar *group_name);
 
 /** Retrieve a GtkAction object associated with this page.
  *
@@ -555,7 +565,8 @@ GtkActionGroup * gnc_plugin_page_create_action_group (GncPluginPage *page,
  *
  *  @param name The name of the GtkAction to find.
  *
- *  @return A pointer to the retuested GtkAction object or NULL. */
+ *  @return A pointer to the retuested GtkAction object or NULL.
+ */
 GtkAction *gnc_plugin_page_get_action (GncPluginPage *page, const gchar *name);
 
 /* Signals */
@@ -569,7 +580,8 @@ void gnc_plugin_page_unselected (GncPluginPage *plugin_page);
  *  @param plugin_page A page.
  *
  *  @return FALSE if the page could not or would not comply, which
- *  should cancel the pending operation.  TRUE otherwise */
+ *  should cancel the pending operation.  TRUE otherwise
+ */
 gboolean gnc_plugin_page_finish_pending (GncPluginPage *plugin_page);
 
 G_END_DECLS

commit ba1af5504d875bca56f424b25af4df9460446481
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Sun Feb 16 14:38:38 2020 +0000

    Add the 'page_changed' signal to GncEmbeddedWindow
    
    This fixes an error message 'page_changed is invalid for instance of
    type GncEmbeddedWindow' when you double click on the selected schedule
    in the sx editor.

diff --git a/gnucash/gnome-utils/gnc-embedded-window.c b/gnucash/gnome-utils/gnc-embedded-window.c
index cf0072816..7682aeafc 100644
--- a/gnucash/gnome-utils/gnc-embedded-window.c
+++ b/gnucash/gnome-utils/gnc-embedded-window.c
@@ -40,6 +40,13 @@
 #include "gnc-window.h"
 #include "dialog-utils.h"
 
+/** Names of signals generated by the embedded window. */
+enum
+{
+    PAGE_CHANGED,
+    LAST_SIGNAL
+};
+
 /* Static Globals *******************************************************/
 
 /** The debugging module that this .o belongs to.  */
@@ -93,6 +100,10 @@ GNC_DEFINE_TYPE_WITH_CODE(GncEmbeddedWindow, gnc_embedded_window, GTK_TYPE_BOX,
 #define GNC_EMBEDDED_WINDOW_GET_PRIVATE(o)  \
    ((GncEmbeddedWindowPrivate*)g_type_instance_get_private((GTypeInstance*)o, GNC_TYPE_EMBEDDED_WINDOW))
 
+/** A holding place for all the signals generated by the embedded window
+ *  code. */
+static guint embedded_window_signals[LAST_SIGNAL] = { 0 };
+
 /*  Display a data plugin page in a window. */
 void
 gnc_embedded_window_open_page (GncEmbeddedWindow *window,
@@ -179,7 +190,27 @@ gnc_embedded_window_class_init (GncEmbeddedWindowClass *klass)
 
     object_class->finalize = gnc_embedded_window_finalize;
     object_class->dispose = gnc_embedded_window_dispose;
-    
+
+    /**
+     * GncEmbeddedWindow::page_changed:
+     * @param window: the #GncEmbeddedWindow
+     * @param page: the #GncPluginPage
+     *
+     * The "page_changed" signal is emitted when a new page is
+     * selected in the notebook of a GncEmbeddedWindow. This can be
+     * used to to adjust menu actions based upon which page is
+     * currently displayed in a window.
+     */
+     embedded_window_signals[PAGE_CHANGED] =
+        g_signal_new ("page_changed",
+                      G_OBJECT_CLASS_TYPE (object_class),
+                      G_SIGNAL_RUN_FIRST,
+                      G_STRUCT_OFFSET (GncEmbeddedWindowClass, page_changed),
+                      NULL, NULL,
+                      g_cclosure_marshal_VOID__OBJECT,
+                      G_TYPE_NONE, 1,
+                      G_TYPE_OBJECT);
+
     LEAVE(" ");
 }
 
diff --git a/gnucash/gnome-utils/gnc-embedded-window.h b/gnucash/gnome-utils/gnc-embedded-window.h
index 081f6a546..d89398295 100644
--- a/gnucash/gnome-utils/gnc-embedded-window.h
+++ b/gnucash/gnome-utils/gnc-embedded-window.h
@@ -68,6 +68,10 @@ typedef struct
 {
     /** The parent class for an embedded window. */
     GtkBoxClass vbox;
+
+    /* callbacks */
+    void (*page_changed) (GncEmbeddedWindow *window,
+                          GncPluginPage *page);
 } GncEmbeddedWindowClass;
 
 

commit ce0d52e1ef62fc7b2cd2574475fde1e836232d33
Author: Robert Fewell <14uBobIT at gmail.com>
Date:   Sun Feb 16 14:37:43 2020 +0000

    Reports were not being loaded
    
    The reports page uses a g_idle_add against the plugin_page to load the
    report once the container for the report is realized. With the changes
    to the page focus functions, the use of g_idle_remove_by_data removed
    this idle function so no report. Change the page focus functions to
    record the id used and then use this id to remove the page focus idle
    function.

diff --git a/gnucash/gnome-utils/gnc-plugin-page.c b/gnucash/gnome-utils/gnc-plugin-page.c
index 0298d59a0..9e6c70dca 100644
--- a/gnucash/gnome-utils/gnc-plugin-page.c
+++ b/gnucash/gnome-utils/gnc-plugin-page.c
@@ -107,6 +107,7 @@ typedef struct _GncPluginPagePrivate
     gchar *statusbar_text;
 
     gulong page_changed_id;
+    guint  focus_source_id;
 
 } GncPluginPagePrivate;
 
@@ -521,6 +522,7 @@ gnc_plugin_page_init (GncPluginPage *page, void *data)
     priv->page_color  = NULL;
     priv->uri         = NULL;
     priv->page_changed_id = 0;
+    priv->focus_source_id = 0;
 
     page->window      = NULL;
     page->summarybar  = NULL;
@@ -856,6 +858,14 @@ gnc_plugin_page_set_page_color (GncPluginPage *page, const gchar *color)
 }
 
 
+static void
+gnc_plugin_page_focus_idle_destroy (GncPluginPage *plugin_page)
+{
+    GncPluginPagePrivate *priv = GNC_PLUGIN_PAGE_GET_PRIVATE(plugin_page);
+    priv->focus_source_id = 0;
+}
+
+
 static void
 gnc_plugin_page_default_focus (GncPluginPage *plugin_page,
                                gboolean on_current_page)
@@ -873,9 +883,14 @@ gnc_plugin_page_default_focus (GncPluginPage *plugin_page,
     {
         // The page changed signal is emitted multiple times so we need
         // to use an idle_add to change the focus
-        g_idle_remove_by_data (GNC_PLUGIN_PAGE(plugin_page));
-        g_idle_add ((GSourceFunc)(GNC_PLUGIN_PAGE_GET_CLASS(plugin_page)->focus_page_function),
-                     GNC_PLUGIN_PAGE(plugin_page));
+
+        if (priv->focus_source_id > 0)
+            g_source_remove (priv->focus_source_id);
+
+        priv->focus_source_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+                                    (GSourceFunc)(GNC_PLUGIN_PAGE_GET_CLASS(plugin_page)->focus_page_function),
+                                    GNC_PLUGIN_PAGE(plugin_page),
+                                    (GDestroyNotify)gnc_plugin_page_focus_idle_destroy);
     }
 }
 
@@ -907,6 +922,7 @@ gnc_plugin_page_main_window_changed (GtkWindow *window,
     (GNC_PLUGIN_PAGE_GET_CLASS(plugin_page)->focus_page)(plugin_page, on_current_page);
 }
 
+
 /* this is the callback for the plugin "inserted" signal which will setup
  * the callback for the "page_changed" signal and save a pointer to the
  * page focus function. */
diff --git a/gnucash/gnome-utils/gnc-plugin-page.h b/gnucash/gnome-utils/gnc-plugin-page.h
index 82416acfe..4501b6c85 100644
--- a/gnucash/gnome-utils/gnc-plugin-page.h
+++ b/gnucash/gnome-utils/gnc-plugin-page.h
@@ -167,8 +167,8 @@ typedef struct
      *  widget.
      *
      *  @param page The page that was added to a window.
-     *
-     *  @param on_current_pgae Whether this page is the currentone. */
+     * 
+     *  @return FALSE to remove idle */
     gboolean (* focus_page_function) (GncPluginPage *plugin_page);
 
     /** This function vector allows page specific actions to occur
diff --git a/gnucash/gnome/gnc-plugin-budget.c b/gnucash/gnome/gnc-plugin-budget.c
index ff50121e2..ab7364f9a 100644
--- a/gnucash/gnome/gnc-plugin-budget.c
+++ b/gnucash/gnome/gnc-plugin-budget.c
@@ -156,7 +156,7 @@ gnc_plugin_budget_cmd_new_budget (GtkAction *action,
     budget = gnc_budget_new (gnc_get_current_book());
     page = gnc_plugin_page_budget_new (budget);
 
-    date = qof_print_date (gnc_time (NULL));
+    date = gnc_print_time64 (gnc_time (NULL), qof_date_format_get_string (QOF_DATE_FORMAT_LOCALE));
     description = g_strdup_printf ("%s: %s",  _("Created"), date);
     gnc_budget_set_description (budget, description);
     g_free (description);

commit c60555e9c53e09b1b2a0a55a0d71d4bb54d0c0b3
Author: Christopher Lam <christopher.lck at gmail.com>
Date:   Sun Feb 16 22:28:55 2020 +0800

    [stylesheet-css] reflect recent changes to default CSS
    
    default css contains changes:
    * td.highlight
    * dark color schemes

diff --git a/gnucash/report/report-system/html-fonts.scm b/gnucash/report/report-system/html-fonts.scm
index 930419375..945fa027e 100644
--- a/gnucash/report/report-system/html-fonts.scm
+++ b/gnucash/report/report-system/html-fonts.scm
@@ -132,6 +132,8 @@
     (gnc:html-document-set-style-text!
      ssdoc
      (string-append
+      ;; Note: any changes in the default CSS *should* be duplicated in
+      ;; stylesheet-css.scm
       "@media (prefers-color-scheme: dark) {body {color: #000; background-color: #fff;}}\n"
       "h3 { " title-info " }\n"
       "a { " account-link-info " }\n"
diff --git a/gnucash/report/stylesheets/stylesheet-css.scm b/gnucash/report/stylesheets/stylesheet-css.scm
index 69215358b..f5f6e0097 100644
--- a/gnucash/report/stylesheets/stylesheet-css.scm
+++ b/gnucash/report/stylesheets/stylesheet-css.scm
@@ -29,6 +29,12 @@
 (gnc:module-load "gnucash/report/report-system" 0)
 
 (define default-css "/* default style */
+ at media (prefers-color-scheme: dark) {
+    body {
+        color: #000; background-color: #fff;
+    }
+}
+
 html, body {
     height: 100vh;
     margin: 0;
@@ -90,6 +96,10 @@ td.neg {
 td.number-cell, td.total-number-cell, td.anchor-cell, td.date-cell {
     white-space: nowrap;
 }
+
+td.highlight {
+    background-color: #e1e1e1
+}
 ")
 
 (define (css-options)



Summary of changes:
 cmake/insert-vcs-data.cmake               |   5 +
 gnucash/gnome-utils/gnc-embedded-window.c |  33 ++++-
 gnucash/gnome-utils/gnc-embedded-window.h |   4 +
 gnucash/gnome-utils/gnc-plugin-page.c     | 234 ++++++++++++++++--------------
 gnucash/gnome-utils/gnc-plugin-page.h     |  78 +++++-----
 gnucash/gnome/CMakeLists.txt              |   1 +
 gnucash/gnome/gnc-plugin-budget.c         |   2 +-
 gnucash/report/html-fonts.scm             |   2 +
 gnucash/report/stylesheets/css.scm        |  10 ++
 9 files changed, 229 insertions(+), 140 deletions(-)



More information about the gnucash-changes mailing list