aboutsummaryrefslogtreecommitdiffstats
path: root/src/window.c
diff options
context:
space:
mode:
authorStefan Monnier <[email protected]>2005-04-12 22:52:52 +0000
committerStefan Monnier <[email protected]>2005-04-12 22:52:52 +0000
commit203eb0aa1d75155378080885ad4a1123fe355ba8 (patch)
tree599b6e2c1fd13d5eb6e67026942b93c4e9e599a3 /src/window.c
parentdc56fc01ff1ff4950432c445ac0325920a70d6e4 (diff)
(Fset_window_configuration): Be careful when you choose
among several possible points for the new_current_buffer.
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/window.c b/src/window.c
index 988b663cbb..1070f8cf37 100644
--- a/src/window.c
+++ b/src/window.c
@@ -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 @@ the return value is nil. Otherwise the value is t. */)
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;