mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Bug 799334 - GnuCash re-opens to incorrect page
If there are transient pages open on close, like search result pages, they are not restored which results in the wrong page being selected on restore. To fix this, remember the pages that are not restored so the position of pages in the saved order can be adjusted.
This commit is contained in:
parent
963117624a
commit
422bfdf052
@ -435,13 +435,16 @@ gnc_main_window_foreach_page (GncMainWindowPageFunc fn, gpointer user_data)
|
|||||||
* installed.
|
* installed.
|
||||||
*
|
*
|
||||||
* @param data A data structure containing state about the
|
* @param data A data structure containing state about the
|
||||||
* window/page restoration process. */
|
* window/page restoration process.
|
||||||
static void
|
*
|
||||||
|
* @return true if page was added else false.
|
||||||
|
* */
|
||||||
|
static gboolean
|
||||||
gnc_main_window_restore_page (GncMainWindow *window,
|
gnc_main_window_restore_page (GncMainWindow *window,
|
||||||
GncMainWindowSaveData *data)
|
GncMainWindowSaveData *data)
|
||||||
{
|
{
|
||||||
GncMainWindowPrivate *priv;
|
GncMainWindowPrivate *priv;
|
||||||
GncPluginPage *page;
|
GncPluginPage *page = nullptr;
|
||||||
gchar *page_group, *page_type = nullptr, *name = nullptr;
|
gchar *page_group, *page_type = nullptr, *name = nullptr;
|
||||||
const gchar *class_type;
|
const gchar *class_type;
|
||||||
GError *error = nullptr;
|
GError *error = nullptr;
|
||||||
@ -514,6 +517,8 @@ cleanup:
|
|||||||
if (page_type)
|
if (page_type)
|
||||||
g_free(page_type);
|
g_free(page_type);
|
||||||
g_free(page_group);
|
g_free(page_group);
|
||||||
|
|
||||||
|
return (page ? true : false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
@ -634,6 +639,8 @@ gnc_main_window_restore_window (GncMainWindow *window, GncMainWindowSaveData *da
|
|||||||
gsize length;
|
gsize length;
|
||||||
gsize page_start, page_count, i;
|
gsize page_start, page_count, i;
|
||||||
GError *error = nullptr;
|
GError *error = nullptr;
|
||||||
|
GSList *added_page_offsets = nullptr;
|
||||||
|
gint offset = 0;
|
||||||
|
|
||||||
/* Setup */
|
/* Setup */
|
||||||
ENTER("window %p, data %p (key file %p, window %d)",
|
ENTER("window %p, data %p (key file %p, window %d)",
|
||||||
@ -777,7 +784,12 @@ gnc_main_window_restore_window (GncMainWindow *window, GncMainWindowSaveData *da
|
|||||||
{
|
{
|
||||||
data->page_offset = page_start;
|
data->page_offset = page_start;
|
||||||
data->page_num = i;
|
data->page_num = i;
|
||||||
gnc_main_window_restore_page(window, data);
|
gboolean page_added = gnc_main_window_restore_page (window, data);
|
||||||
|
|
||||||
|
added_page_offsets = g_slist_append (added_page_offsets, GINT_TO_POINTER(offset));
|
||||||
|
|
||||||
|
if (!page_added) // if page not added, increase offset to compensate
|
||||||
|
offset ++;
|
||||||
|
|
||||||
/* give the page a chance to display */
|
/* give the page a chance to display */
|
||||||
while (gtk_events_pending ())
|
while (gtk_events_pending ())
|
||||||
@ -809,14 +821,15 @@ gnc_main_window_restore_window (GncMainWindow *window, GncMainWindowSaveData *da
|
|||||||
/* Now rebuild the list from the key file. */
|
/* Now rebuild the list from the key file. */
|
||||||
for (i = 0; i < length; i++)
|
for (i = 0; i < length; i++)
|
||||||
{
|
{
|
||||||
gpointer page = g_list_nth_data(priv->installed_pages, order[i] - 1);
|
gint offset = GPOINTER_TO_INT(g_slist_nth_data (added_page_offsets, order[i] - 1));
|
||||||
|
gpointer page = g_list_nth_data (priv->installed_pages, order[i] - 1 - offset);
|
||||||
if (page)
|
if (page)
|
||||||
{
|
{
|
||||||
priv->usage_order = g_list_append(priv->usage_order, page);
|
priv->usage_order = g_list_append(priv->usage_order, page);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
gtk_notebook_set_current_page (GTK_NOTEBOOK(priv->notebook),
|
gtk_notebook_set_current_page (GTK_NOTEBOOK(priv->notebook),
|
||||||
order[0] - 1);
|
order[0] - 1 - offset);
|
||||||
|
|
||||||
g_signal_emit_by_name (window, "page_changed",
|
g_signal_emit_by_name (window, "page_changed",
|
||||||
g_list_nth_data (priv->usage_order, 0));
|
g_list_nth_data (priv->usage_order, 0));
|
||||||
@ -828,6 +841,7 @@ gnc_main_window_restore_window (GncMainWindow *window, GncMainWindowSaveData *da
|
|||||||
|
|
||||||
LEAVE("window %p", window);
|
LEAVE("window %p", window);
|
||||||
cleanup:
|
cleanup:
|
||||||
|
g_slist_free (added_page_offsets);
|
||||||
if (error)
|
if (error)
|
||||||
g_error_free(error);
|
g_error_free(error);
|
||||||
g_free(window_group);
|
g_free(window_group);
|
||||||
|
Loading…
Reference in New Issue
Block a user