From 9b7b69abb4041565de1fb86dd3b5ae896278c336 Mon Sep 17 00:00:00 2001 From: Sherlock <119709043+agwekixj@users.noreply.github.com> Date: Wed, 8 Oct 2025 14:10:14 -0700 Subject: [PATCH] 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. --- 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(+) 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();