summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZenWalker <[email protected]>2017-05-07 05:01:45 +0200
committerZenWalker <[email protected]>2017-05-17 13:12:45 +0200
commit5fe9876bfc70f8ca88f4ba282c3d782cd4c36794 (patch)
tree614ac06f7764fe325673ad08d97ac898bb86d83c
parent1497fa7b7ca730a3e358f98ca5ba779186ce26e0 (diff)
downloadengrampa-5fe9876bfc70f8ca88f4ba282c3d782cd4c36794.tar.bz2
engrampa-5fe9876bfc70f8ca88f4ba282c3d782cd4c36794.tar.xz
Fix: Browsing history not correct
Fixes #167 based in file-roller commit: https://git.gnome.org/browse/file-roller/commit/?id=bd8807beb9a026be2441aa492815b65a6fc94429
-rw-r--r--src/fr-window.c41
1 files changed, 28 insertions, 13 deletions
diff --git a/src/fr-window.c b/src/fr-window.c
index 9ac4053..cde9bb8 100644
--- a/src/fr-window.c
+++ b/src/fr-window.c
@@ -865,23 +865,38 @@ static void
fr_window_history_add (FrWindow *window,
const char *path)
{
- if ((window->priv->history != NULL) && (window->priv->history_current != NULL)) {
- if (strcmp (window->priv->history_current->data, path) == 0)
- return;
+ if ((window->priv->history_current == NULL) || (g_strcmp0 (path, window->priv->history_current->data) != 0)) {
+ GList *scan;
+ GList *new_current = NULL;
- /* Add locations visited using the back button to the history
- * list. */
- if (window->priv->history != window->priv->history_current) {
- GList *scan = window->priv->history->next;
- while (scan != window->priv->history_current->next) {
- window->priv->history = g_list_prepend (window->priv->history, g_strdup (scan->data));
- scan = scan->next;
+ /* search the path in the history */
+ for (scan = window->priv->history_current; scan; scan = scan->next) {
+ char *path_in_history = scan->data;
+
+ if (g_strcmp0 (path, path_in_history) == 0) {
+ new_current = scan;
+ break;
}
}
- }
- window->priv->history = g_list_prepend (window->priv->history, g_strdup (path));
- window->priv->history_current = window->priv->history;
+ if (new_current != NULL) {
+ window->priv->history_current = new_current;
+ }
+ else {
+ /* remove all the paths after the current position */
+ for (scan = window->priv->history; scan && (scan != window->priv->history_current); /* void */) {
+ GList *next = scan->next;
+
+ window->priv->history = g_list_remove_link (window->priv->history, scan);
+ path_list_free (scan);
+
+ scan = next;
+ }
+
+ window->priv->history = g_list_prepend (window->priv->history, g_strdup (path));
+ window->priv->history_current = window->priv->history;
+ }
+ }
}