diff --git a/src/navqueue.c b/src/navqueue.c index 01d74d9990..442c8fc3ea 100644 --- a/src/navqueue.c +++ b/src/navqueue.c @@ -192,6 +192,20 @@ static gboolean goto_file_pos(const gchar *file, gint pos) void navqueue_go_back(void) { filepos *fprev; + GeanyDocument *doc = document_get_current(); + + /* If the navqueue is currently at some position A, but the actual cursor is at some other + * place B, we should add B to the navqueue, so that (1) we go back to A, not to the next + * item in the queue; and (2) we can later restore B by going forward. + * (If A = B, add_new_position will ignore it.) */ + if (doc) + { + if (doc->file_name) + add_new_position(doc->file_name, sci_get_current_position(doc->editor->sci)); + } + else + /* see also https://github.com/geany/geany/pull/1537 */ + g_warning("Attempted navigation when nothing is open"); /* return if theres no place to go back to */ if (g_queue_is_empty(navigation_queue) ||