diff --git a/ChangeLog b/ChangeLog
index 64aadc77552d847f905617b0d5c47ef76faf23c7..6a46379c16f290f2275b74225129ae57d690fc63 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2016-01-21  Benno Schulenberg  <bensberg@justemail.net>
+	* src/prompt.c (get_prompt_string): Preserve the cursor position on
+	the statusbar when just toggling a setting or making an excursion to
+	the file browser.  This fixes Savannah bug #46945.
+
 2016-01-20  Benno Schulenberg  <bensberg@justemail.net>
 	* src/files.c (open_buffer): Readjust the indentation and a comment.
 	* src/files.c (has_valid_path): Get rid of a global variable.
diff --git a/src/prompt.c b/src/prompt.c
index 7cce2869e06dbd15f0cd4c9e19c37de6b17eebe1..72a713caee3f2195d6f6c75546eb872e674690b6 100644
--- a/src/prompt.c
+++ b/src/prompt.c
@@ -922,22 +922,11 @@ functionptrtype get_prompt_string(int *actual, bool allow_tabs,
     }
 #endif
 
-    /* We've finished putting in an answer or run a normal shortcut's
-     * associated function, so reset statusbar_x and statusbar_pww.  If
-     * we've finished putting in an answer, reset the statusbar cursor
-     * position too. */
-    if (func) {
-	if (func == do_cancel || func == do_enter || ran_func) {
-	    statusbar_x = old_statusbar_x;
-	    statusbar_pww = old_pww;
-
-	    if (!ran_func)
-		reset_statusbar_x = TRUE;
-    /* Otherwise, we're still putting in an answer or a shortcut with
-     * an associated function, so leave the statusbar cursor position
-     * alone. */
-	} else
-	    reset_statusbar_x = FALSE;
+    /* If we're done with this prompt, restore the cursor position
+     * to what it was at the /previous/ prompt, in case there was. */
+    if (func == do_cancel || func == do_enter) {
+	statusbar_x = old_statusbar_x;
+	statusbar_pww = old_pww;
     }
 
     *actual = kbinput;