summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/caja-window-manage-views.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/caja-window-manage-views.c b/src/caja-window-manage-views.c
index 86c50ab8..cf06f8d1 100644
--- a/src/caja-window-manage-views.c
+++ b/src/caja-window-manage-views.c
@@ -271,6 +271,37 @@ handle_go_forward (CajaNavigationWindowSlot *navigation_slot,
g_list_free_1 (link);
}
+static void
+handle_go_elsewhere (CajaWindowSlot *slot, GFile *location)
+{
+ CajaNavigationWindowSlot *navigation_slot;
+
+ if (CAJA_IS_NAVIGATION_WINDOW_SLOT (slot))
+ {
+ navigation_slot = CAJA_NAVIGATION_WINDOW_SLOT (slot);
+
+ /* Clobber the entire forward list, and move displayed location to back list */
+ caja_navigation_window_slot_clear_forward_list (navigation_slot);
+
+ if (slot->location != NULL)
+ {
+ /* If we're returning to the same uri somehow, don't put this uri on back list.
+ * This also avoids a problem where set_displayed_location
+ * didn't update last_location_bookmark since the uri didn't change.
+ */
+ if (!g_file_equal (slot->location, location))
+ {
+ /* Store bookmark for current location in back list, unless there is no current location */
+ check_last_bookmark_location_matches_slot (slot);
+ /* Use the first bookmark in the history list rather than creating a new one. */
+ navigation_slot->back_list = g_list_prepend (navigation_slot->back_list,
+ slot->last_location_bookmark);
+ g_object_ref (navigation_slot->back_list->data);
+ }
+ }
+ }
+}
+
void
caja_window_update_up_button (CajaWindow *window)
{
@@ -422,6 +453,7 @@ update_history (CajaWindowSlot *slot,
case CAJA_LOCATION_CHANGE_STANDARD:
case CAJA_LOCATION_CHANGE_FALLBACK:
caja_window_slot_add_current_location_to_history_list (slot);
+ handle_go_elsewhere (slot, new_location);
return;
case CAJA_LOCATION_CHANGE_RELOAD:
/* for reload there is no work to do */