From: Richard M. Stallman <rms@gnu.org>
Date: Mon, 26 Dec 2005 16:33:05 +0000 (+0000)
Subject: Depend on window.h.
X-Git-Tag: emacs-pretest-22.0.90~5062
X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=91e25f5e6f7c70de2e17cd4911bb07869cc9583f;p=emacs.git

Depend on window.h.
(record_point): Save old point from the correct window.
---

diff --git a/src/ChangeLog b/src/ChangeLog
index 1fca3cc1baa..43cfd1e5e15 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,14 @@
+2005-12-26  Richard M. Stallman  <rms@gnu.org>
+
+	* undo.c: Depend on window.h.
+	(record_point): Save old point from the correct window.
+
+	* keyboard.c (last_point_position_window): New variable.
+	(command_loop_1): Set last_point_position_window.
+	(syms_of_keyboard): Init it.
+
+	* Makefile.in (undo.o): Depend on window.h.
+
 2005-12-25  Richard M. Stallman  <rms@gnu.org>
 
 	* eval.c (un_autoload): Expect (0 . OFEATURES) in Vautoload_queue
diff --git a/src/undo.c b/src/undo.c
index ecbb714fddd..bf774affac5 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -24,6 +24,7 @@ Boston, MA 02110-1301, USA.  */
 #include "lisp.h"
 #include "buffer.h"
 #include "commands.h"
+#include "window.h"
 
 /* Limits controlling how much undo information to keep.  */
 
@@ -100,12 +101,19 @@ record_point (pt)
   /* If we are just after an undo boundary, and
      point wasn't at start of deleted range, record where it was.  */
   if (at_boundary
-      && last_point_position != pt
-      /* If we're called from batch mode, this could be nil.  */
       && BUFFERP (last_point_position_buffer)
+      /* If we're called from batch mode, this could be nil.  */
       && current_buffer == XBUFFER (last_point_position_buffer))
-    current_buffer->undo_list
-      = Fcons (make_number (last_point_position), current_buffer->undo_list);
+    {
+      /* If we have switched windows, use the point value
+	 from the window we are in.  */
+      if (! EQ (last_point_position_window, selected_window))
+	last_point_position = marker_position (XWINDOW (selected_window)->pointm);
+
+      if (last_point_position != pt)
+	current_buffer->undo_list
+	  = Fcons (make_number (last_point_position), current_buffer->undo_list);
+    }
 }
 
 /* Record an insertion that just happened or is about to happen,