Check for bogus window structures (i.e. empty) when reading/writing

the state file.


git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@12905 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
David Hampton
2006-01-20 01:02:57 +00:00
parent fa6adfba4d
commit 1efe4385db
2 changed files with 50 additions and 33 deletions

View File

@@ -1,3 +1,8 @@
2006-01-19 David Hampton <hampton@employees.org>
* src/gnome-utils/gnc-main-window.c: Check for bogus window
structures (i.e. empty) when reading/writing the state file.
2006-01-19 Derek Atkins <derek@ihtfp.com>
* src/business/business-gnome/dialog-invoice.c:

View File

@@ -499,7 +499,6 @@ gnc_main_window_restore_page (GncMainWindow *window, GncMainWindowSaveData *data
static void
gnc_main_window_restore_window (GncMainWindow *window, GncMainWindowSaveData *data)
{
GncMainWindowPrivate *priv;
gint *pos, *geom;
gsize length;
gboolean max;
@@ -510,10 +509,39 @@ gnc_main_window_restore_window (GncMainWindow *window, GncMainWindowSaveData *da
/* Setup */
ENTER("window %p, data %p (key file %p, window %d)",
window, data, data->key_file, data->window_num);
priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
window_group = g_strdup_printf(WINDOW_STRING, data->window_num + 1);
/* Save the window coordinates, etc. */
/* Get this window's notebook info */
page_count = g_key_file_get_integer(data->key_file,
window_group, WINDOW_PAGECOUNT, &error);
if (error) {
g_warning("error reading group %s key %s: %s",
window_group, WINDOW_PAGECOUNT, error->message);
goto cleanup;
}
if (page_count == 0) {
/* Shound never happen, but has during alpha testing. Having this
* check doesn't hurt anything. */
goto cleanup;
}
page_start = g_key_file_get_integer(data->key_file,
window_group, WINDOW_FIRSTPAGE, &error);
if (error) {
g_warning("error reading group %s key %s: %s",
window_group, WINDOW_FIRSTPAGE, error->message);
goto cleanup;
}
/* Build a window if we don't already have one */
if (window == NULL) {
DEBUG("Window %d doesn't exist. Creating new window.", data->window_num);
DEBUG("active_windows %p.", active_windows);
if (active_windows)
DEBUG("first window %p.", active_windows->data);
window = gnc_main_window_new();
}
/* Get the window coordinates, etc. */
pos = g_key_file_get_integer_list(data->key_file, window_group,
WINDOW_POSITION, &length, &error);
if (error) {
@@ -555,22 +583,7 @@ gnc_main_window_restore_window (GncMainWindow *window, GncMainWindowSaveData *da
gtk_window_maximize(GTK_WINDOW(window));
}
/* Get this window's notebook info */
page_start = g_key_file_get_integer(data->key_file,
window_group, WINDOW_FIRSTPAGE, &error);
if (error) {
g_warning("error reading group %s key %s: %s",
window_group, WINDOW_FIRSTPAGE, error->message);
goto cleanup;
}
page_count = g_key_file_get_integer(data->key_file,
window_group, WINDOW_PAGECOUNT, &error);
if (error) {
g_warning("error reading group %s key %s: %s",
window_group, WINDOW_PAGECOUNT, error->message);
goto cleanup;
}
/* Now populate the window with pages. */
for (i = 0; i < page_count; i++) {
data->page_offset = page_start;
data->page_num = i;
@@ -695,13 +708,6 @@ gnc_main_window_restore_all_state (gpointer session, gpointer unused)
for (i = 0; i < window_count; i++) {
data.window_num = i;
window = g_list_nth_data(active_windows, i);
if (window == NULL) {
DEBUG("Window %d doesn't exist. Creating new window.", i);
DEBUG("active_windows %p.", active_windows);
if (active_windows)
DEBUG("first window %p.", active_windows->data);
window = gnc_main_window_new();
}
gnc_main_window_restore_window(window, &data);
}
@@ -765,7 +771,20 @@ gnc_main_window_save_window (GncMainWindow *window, GncMainWindowSaveData *data)
ENTER("window %p, data %p (key file %p, window %d)",
window, data, data->key_file, data->window_num);
priv = GNC_MAIN_WINDOW_GET_PRIVATE(window);
/* Check for bogus window structures. */
num_pages = gtk_notebook_get_n_pages(GTK_NOTEBOOK(priv->notebook));
if (0 == num_pages) {
LEAVE("empty window %p", window);
return;
}
/* Save this window's notebook info */
window_group = g_strdup_printf(WINDOW_STRING, data->window_num++);
g_key_file_set_integer(data->key_file, window_group,
WINDOW_PAGECOUNT, num_pages);
g_key_file_set_integer(data->key_file, window_group,
WINDOW_FIRSTPAGE, data->page_num);
/* Save the window coordinates, etc. */
gtk_window_get_position(GTK_WINDOW(window), &coords[0], &coords[1]);
@@ -782,13 +801,6 @@ gnc_main_window_save_window (GncMainWindow *window, GncMainWindowSaveData *data)
coords[2], coords[3],
maximized ? "maximized" : "not maximized");
/* Save this window's notebook info */
num_pages = gtk_notebook_get_n_pages(GTK_NOTEBOOK(priv->notebook));
g_key_file_set_integer(data->key_file, window_group,
WINDOW_PAGECOUNT, num_pages);
g_key_file_set_integer(data->key_file, window_group,
WINDOW_FIRSTPAGE, data->page_num);
/* Save individual pages in this window */
g_list_foreach(priv->installed_pages, (GFunc)gnc_main_window_save_page, data);