gnucash stable: Multiple changes pushed

John Ralls jralls at code.gnucash.org
Thu Oct 9 13:35:32 EDT 2025


Updated	 via  https://github.com/Gnucash/gnucash/commit/01f0d252 (commit)
	 via  https://github.com/Gnucash/gnucash/commit/9b7b69ab (commit)
	from  https://github.com/Gnucash/gnucash/commit/1e3027e2 (commit)



commit 01f0d252ec4008243a3efe3d67962015ce5a6119
Merge: 1e3027e2ca 9b7b69abb4
Author: John Ralls <jralls at ceridwen.us>
Date:   Thu Oct 9 10:34:55 2025 -0700

    Merge Sherlock's 'reset-gui-components' into stable


commit 9b7b69abb4041565de1fb86dd3b5ae896278c336
Author: Sherlock <119709043+agwekixj at users.noreply.github.com>
Date:   Wed Oct 8 14:10:14 2025 -0700

    Reset gui component session
    
    When saving a new file, including Save As of an existing book, reset the managed gui
    components to the new session prior to clearing the old session.

diff --git a/gnucash/gnome-utils/gnc-component-manager.c b/gnucash/gnome-utils/gnc-component-manager.c
index b98bcc878b..944a787c29 100644
--- a/gnucash/gnome-utils/gnc-component-manager.c
+++ b/gnucash/gnome-utils/gnc-component-manager.c
@@ -819,6 +819,20 @@ gnc_gui_component_set_session (gint component_id, gpointer session)
     ci->session = session;
 }
 
+void
+gnc_gui_component_reset_session (gpointer old_session, gpointer new_session)
+{
+    GList *node;
+
+    for (node = components; node; node = node->next)
+    {
+        ComponentInfo *ci = node->data;
+
+        if (ci->session == old_session)
+            ci->session = new_session;
+    }
+}
+
 void
 gnc_close_gui_component_by_session (gpointer session)
 {
diff --git a/gnucash/gnome-utils/gnc-component-manager.h b/gnucash/gnome-utils/gnc-component-manager.h
index be25a7eee2..cc7817c295 100644
--- a/gnucash/gnome-utils/gnc-component-manager.h
+++ b/gnucash/gnome-utils/gnc-component-manager.h
@@ -163,6 +163,14 @@ gint gnc_register_gui_component (const char *component_class,
  */
 void gnc_gui_component_set_session (gint component_id, gpointer session);
 
+/* gnc_gui_component_reset_session
+ *   Reset the associated session of all components with the original session
+ *
+ * old_session:      the original session 
+ * new_session:      the new session
+ */
+void gnc_gui_component_reset_session (gpointer old_session, gpointer new_session);
+
 /* gnc_gui_component_watch_entity
  *   Add an entity to the list of those being watched by the component.
  *   Only entities with refresh handlers should add watches.
diff --git a/gnucash/gnome-utils/gnc-file.c b/gnucash/gnome-utils/gnc-file.c
index 489f6bb52a..0c56662e88 100644
--- a/gnucash/gnome-utils/gnc-file.c
+++ b/gnucash/gnome-utils/gnc-file.c
@@ -1714,6 +1714,7 @@ gnc_file_do_save_as (GtkWindow *parent, const char* filename)
     {
         /* Yay! Save was successful, we can dump the old session */
         qof_event_suspend();
+        gnc_gui_component_reset_session (session, new_session);
         gnc_clear_current_session();
         gnc_set_current_session( new_session );
         qof_event_resume();



Summary of changes:
 gnucash/gnome-utils/gnc-component-manager.c | 14 ++++++++++++++
 gnucash/gnome-utils/gnc-component-manager.h |  8 ++++++++
 gnucash/gnome-utils/gnc-file.c              |  1 +
 3 files changed, 23 insertions(+)



More information about the gnucash-changes mailing list