changeset 61511:db63a29e7669

(Fset_window_configuration): Be careful when you choose among several possible points for the new_current_buffer.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Tue, 12 Apr 2005 22:52:52 +0000
parents 1a65ed49d918
children 46263849dcce
files src/ChangeLog src/window.c
diffstat 2 files changed, 30 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Tue Apr 12 22:52:19 2005 +0000
+++ b/src/ChangeLog	Tue Apr 12 22:52:52 2005 +0000
@@ -1,22 +1,25 @@
+2005-04-12  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* window.c (Fset_window_configuration): Be careful when you choose
+	among several possible points for the new_current_buffer.
+
 2005-04-12  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
 
 	* keyboard.c (poll_for_input) [SYNC_INPUT]: Don't call
 	poll_for_input_1.  Set interrupt_input_pending to 1 instead.
 	(Qlanguage_change) [MAC_OS]: New variable.
 	(syms_of_keyboard) [MAC_OS]: Intern and staticpro it.
-	(kbd_buffer_get_event) [MAC_OS]: Make event for
-	LANGUAGE_CHANGE_EVENT.
+	(kbd_buffer_get_event) [MAC_OS]: Make event for LANGUAGE_CHANGE_EVENT.
 
 	* macterm.c (mac_keyboard_text_encoding)
 	(current_mac_keyboard_text_encoding): Remove variables.
 	(XTread_socket): Store language-change event if keyboard script
 	change is detected.  Don't convert input to
 	`mac_keyboard_text_encoding'.
-	(syms_of_macterm): Delete DEFVAR_INT for
-	mac-keyboard-text-encoding.
-
-	* termhooks.h (enum event_kind) [MAC_OS]: Add
-	LANGUAGE_CHANGE_EVENT.
+	(syms_of_macterm): Delete DEFVAR_INT for mac-keyboard-text-encoding.
+
+	* termhooks.h (enum event_kind) [MAC_OS]:
+	Add LANGUAGE_CHANGE_EVENT.
 
 2005-04-10  Richard M. Stallman  <rms@gnu.org>
 
@@ -68,8 +71,8 @@
 	* mac.c (cfdate_to_lisp): Add `const' for variable `epoch_gdate'.
 	(Fmac_get_preference): Doc fix.
 
-	* macfns.c (Fx_create_frame, x_create_tip_frame): Add
-	"fontset-mac" to fallback font/fontsets.
+	* macfns.c (Fx_create_frame, x_create_tip_frame):
+	Add "fontset-mac" to fallback font/fontsets.
 
 2005-04-04  Kim F. Storm  <storm@cua.dk>
 
@@ -100,8 +103,8 @@
 	Vascii_downcase_table.
 	(fast_string_match_ignore_case): Likewise.
 	(search_buffer): Fix checking of boyer-moore usability.
-	(boyer_moore): Calculate translate_prev_byte1/2/3 in advance.  No
-	need of tranlating characters in PAT.  Fix calculation of
+	(boyer_moore): Calculate translate_prev_byte1/2/3 in advance.
+	No need of tranlating characters in PAT.  Fix calculation of
 	simple_translate.
 
 2005-03-31  Stefan Monnier  <monnier@iro.umontreal.ca>
--- a/src/window.c	Tue Apr 12 22:52:19 2005 +0000
+++ b/src/window.c	Tue Apr 12 22:52:52 2005 +0000
@@ -1,7 +1,7 @@
 /* Window creation, deletion and examination for GNU Emacs.
    Does not include redisplay.
-   Copyright (C) 1985,86,87, 1993,94,95,96,97,98, 2000,01,02,03,04
-   Free Software Foundation, Inc.
+   Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1996, 1997, 1998, 2000,
+     2001, 2002, 2003, 2004, 2005  Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
@@ -5594,7 +5594,20 @@
       if (XBUFFER (new_current_buffer) == current_buffer)
 	old_point = PT;
       else
-	old_point = BUF_PT (XBUFFER (new_current_buffer));
+	/* BUF_PT (XBUFFER (new_current_buffer)) gives us the position of
+	   point in new_current_buffer as of the last time this buffer was
+	   used.  This can be non-deterministic since it can be changed by
+	   things like jit-lock by mere temporary selection of some random
+	   window that happens to show this buffer.
+	   So if possible we want this arbitrary choice of "which point" to
+	   be the one from the to-be-selected-window so as to prevent this
+	   window's cursor from being copied from another window.  */
+	if (EQ (XWINDOW (data->current_window)->buffer, new_current_buffer)
+	    /* If current_window = selected_window, its point is in BUF_PT.  */
+	    && !EQ (selected_window, data->current_window))
+	  old_point = XMARKER (XWINDOW (data->current_window)->pointm)->charpos;
+	else
+	  old_point = BUF_PT (XBUFFER (new_current_buffer));
     }
 
   frame = XWINDOW (SAVED_WINDOW_N (saved_windows, 0)->window)->frame;