diff options
| author | ZenWalker <[email protected]> | 2017-05-07 05:01:45 +0200 | 
|---|---|---|
| committer | ZenWalker <[email protected]> | 2017-05-07 05:01:45 +0200 | 
| commit | 46ee32585998ff2860e3d48d188efba2d6872b12 (patch) | |
| tree | 5818a508b9cfba6a1d775cfa19fa2f0df2c0c0b8 | |
| parent | 988b01c1492930741f2a61eb89781df495fbf0f6 (diff) | |
| download | engrampa-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
| -rw-r--r-- | src/fr-window.c | 41 | 
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; +		} +	}  }  | 
