diff --git a/app/actions/windows-commands.c b/app/actions/windows-commands.c index 2f73b1ca10..dd37e74933 100644 --- a/app/actions/windows-commands.c +++ b/app/actions/windows-commands.c @@ -99,10 +99,14 @@ windows_open_recent_cmd_callback (GtkAction *action, GimpSessionInfo *info = g_object_get_data (G_OBJECT (action), "info"); g_object_ref (info); + gimp_container_remove (global_recent_docks, GIMP_OBJECT (info)); - gimp_dialog_factory_add_session_info (gimp_dialog_factory_get_singleton (), info); + gimp_dialog_factory_add_session_info (gimp_dialog_factory_get_singleton (), + info); gimp_session_info_restore (info, gimp_dialog_factory_get_singleton ()); gimp_session_info_clear_info (info); + + g_object_unref (info); } diff --git a/app/gui/session.c b/app/gui/session.c index e4574481da..0f6fc22b1d 100644 --- a/app/gui/session.c +++ b/app/gui/session.c @@ -205,9 +205,9 @@ session_init (Gimp *gimp) GIMP_LOG (DIALOG_FACTORY, "failed to parse session info %p, not adding", info); - - g_object_unref (info); } + + g_object_unref (info); } else { diff --git a/app/widgets/gimpdialogfactory.c b/app/widgets/gimpdialogfactory.c index cb108843e7..b0a731201e 100644 --- a/app/widgets/gimpdialogfactory.c +++ b/app/widgets/gimpdialogfactory.c @@ -682,11 +682,13 @@ gimp_dialog_factory_add_session_info (GimpDialogFactory *factory, GimpSessionInfo *info) { g_return_if_fail (GIMP_IS_DIALOG_FACTORY (factory)); + g_return_if_fail (GIMP_IS_SESSION_INFO (info)); /* We want to append rather than prepend so that the serialized * order in sessionrc remains the same */ - factory->p->session_infos = g_list_append (factory->p->session_infos, info); + factory->p->session_infos = g_list_append (factory->p->session_infos, + g_object_ref (info)); } /** @@ -911,7 +913,8 @@ gimp_dialog_factory_add_dialog (GimpDialogFactory *factory, NULL); } - factory->p->session_infos = g_list_append (factory->p->session_infos, info); + gimp_dialog_factory_add_session_info (factory, info); + g_object_unref (info); } }