summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZenWalker <[email protected]>2017-05-07 05:01:45 +0200
committerZenWalker <[email protected]>2017-05-07 05:01:45 +0200
commit46ee32585998ff2860e3d48d188efba2d6872b12 (patch)
tree5818a508b9cfba6a1d775cfa19fa2f0df2c0c0b8 /src
parent988b01c1492930741f2a61eb89781df495fbf0f6 (diff)
downloadengrampa-46ee32585998ff2860e3d48d188efba2d6872b12.tar.bz2
engrampa-46ee32585998ff2860e3d48d188efba2d6872b12.tar.xz
Fix: Browsing history not correct
Fixes #167 based in file-roller commit: https://git.gnome.org/browse/file-roller/commit/?id=bd8807beb9a026be2441aa492815b65a6fc94429
Diffstat (limited to 'src')
-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 e058b3d..0b9a171 100644
--- a/src/fr-window.c
+++ b/src/fr-window.c
@@ -869,23 +869,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;
+ }
+ }
}