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();