mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Ensure that opening an existing book never opens an empty main window.
If there's only one window, automatically add an account hierarchy page to it. If it's a subsequent empty window, just ignore it (ie don't restore it from the state file). This commit deals with the secondary issue mentioned in bug 436479 - Gnucash doesn't display the data file name in the title bar git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@23528 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
2f35bd3a91
commit
a09e3d6a35
@ -657,6 +657,29 @@ gnc_main_window_restore_window (GncMainWindow *window, GncMainWindowSaveData *da
|
|||||||
window, data, data->key_file, data->window_num);
|
window, data, data->key_file, data->window_num);
|
||||||
window_group = g_strdup_printf(WINDOW_STRING, data->window_num + 1);
|
window_group = g_strdup_printf(WINDOW_STRING, data->window_num + 1);
|
||||||
|
|
||||||
|
/* Deal with the uncommon case that the state file defines a window
|
||||||
|
* but no pages. An example to get in such a situation can be found
|
||||||
|
* here: https://bugzilla.gnome.org/show_bug.cgi?id=436479#c3
|
||||||
|
* If this happens on the first window, we will open an account hierarchy
|
||||||
|
* to avoid confusing the user by presenting a completely empty window.
|
||||||
|
* If it happens on a later window, we'll just skip restoring that window.
|
||||||
|
*/
|
||||||
|
if (!g_key_file_has_group (data->key_file, window_group) ||
|
||||||
|
!g_key_file_has_key (data->key_file, window_group, WINDOW_PAGECOUNT, &error))
|
||||||
|
{
|
||||||
|
if (window)
|
||||||
|
{
|
||||||
|
gnc_main_window_restore_default_state (window);
|
||||||
|
PINFO ("saved state had an empty first main window\n"
|
||||||
|
"an account hierarchy page was added automatically to avoid confusion");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
PINFO ("saved state had an empty main window, skipping restore");
|
||||||
|
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Get this window's notebook info */
|
/* Get this window's notebook info */
|
||||||
page_count = g_key_file_get_integer(data->key_file,
|
page_count = g_key_file_get_integer(data->key_file,
|
||||||
window_group, WINDOW_PAGECOUNT, &error);
|
window_group, WINDOW_PAGECOUNT, &error);
|
||||||
@ -668,7 +691,7 @@ gnc_main_window_restore_window (GncMainWindow *window, GncMainWindowSaveData *da
|
|||||||
}
|
}
|
||||||
if (page_count == 0)
|
if (page_count == 0)
|
||||||
{
|
{
|
||||||
/* Shound never happen, but has during alpha testing. Having this
|
/* Should never happen, but has during alpha testing. Having this
|
||||||
* check doesn't hurt anything. */
|
* check doesn't hurt anything. */
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
@ -911,15 +934,15 @@ gnc_main_window_restore_all_windows(const GKeyFile *keyfile)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gnc_main_window_restore_default_state(void)
|
gnc_main_window_restore_default_state(GncMainWindow *window)
|
||||||
{
|
{
|
||||||
GtkAction *action;
|
GtkAction *action;
|
||||||
GncMainWindow *window;
|
|
||||||
|
|
||||||
/* The default state should be to have an Account Tree page open
|
/* The default state should be to have an Account Tree page open
|
||||||
* in the window. */
|
* in the window. */
|
||||||
DEBUG("no saved state file");
|
DEBUG("no saved state file");
|
||||||
window = g_list_nth_data(active_windows, 0);
|
if (!window)
|
||||||
|
window = g_list_nth_data(active_windows, 0);
|
||||||
action = gnc_main_window_find_action(window, "ViewAccountTreeAction");
|
action = gnc_main_window_find_action(window, "ViewAccountTreeAction");
|
||||||
gtk_action_activate(action);
|
gtk_action_activate(action);
|
||||||
}
|
}
|
||||||
|
@ -336,7 +336,7 @@ void gnc_main_window_save_all_windows(GKeyFile *keyfile);
|
|||||||
|
|
||||||
/** Restore the persistent state of one window to a sane default.
|
/** Restore the persistent state of one window to a sane default.
|
||||||
*/
|
*/
|
||||||
void gnc_main_window_restore_default_state(void);
|
void gnc_main_window_restore_default_state(GncMainWindow *window);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gnc_gtk_action_group_set_translation_domain:
|
* gnc_gtk_action_group_set_translation_domain:
|
||||||
|
@ -263,7 +263,7 @@ gnc_restore_all_state (gpointer session, gpointer unused)
|
|||||||
STATE_FILE_BOOK_GUID, &error);
|
STATE_FILE_BOOK_GUID, &error);
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
gnc_main_window_restore_default_state();
|
gnc_main_window_restore_default_state(NULL);
|
||||||
g_warning("error reading group %s key %s: %s",
|
g_warning("error reading group %s key %s: %s",
|
||||||
STATE_FILE_TOP, STATE_FILE_BOOK_GUID, error->message);
|
STATE_FILE_TOP, STATE_FILE_BOOK_GUID, error->message);
|
||||||
LEAVE("no guid in state file");
|
LEAVE("no guid in state file");
|
||||||
|
Loading…
Reference in New Issue
Block a user