diff options
| author | Stefan Monnier | 2013-04-12 13:32:52 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2013-04-12 13:32:52 -0400 |
| commit | 562c6ee9450073547ae45e88116cfc213c2254e0 (patch) | |
| tree | 39a80f3fc5dc0b59fa068ea2d44c7028c53c328c /src/window.c | |
| parent | 320742098b941833731b20d4bd2de7cc4c93ec76 (diff) | |
| download | emacs-562c6ee9450073547ae45e88116cfc213c2254e0.tar.gz emacs-562c6ee9450073547ae45e88116cfc213c2254e0.zip | |
* src/window.c (select_window): `record_buffer' even if window is
already selected.
Fixes: debbugs:14191
Diffstat (limited to 'src/window.c')
| -rw-r--r-- | src/window.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/window.c b/src/window.c index fe5b5ec1e6e..7cf35a480f7 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -489,7 +489,10 @@ select_window (Lisp_Object window, Lisp_Object norecord, int inhibit_point_swap) | |||
| 489 | Fset_buffer (w->contents); | 489 | Fset_buffer (w->contents); |
| 490 | 490 | ||
| 491 | if (EQ (window, selected_window) && !inhibit_point_swap) | 491 | if (EQ (window, selected_window) && !inhibit_point_swap) |
| 492 | return window; | 492 | /* `switch-to-buffer' uses (select-window (selected-window)) as a "clever" |
| 493 | way to call record_buffer from Elisp, so it's important that we call | ||
| 494 | record_buffer before returning here. */ | ||
| 495 | goto record_and_return; | ||
| 493 | 496 | ||
| 494 | sf = SELECTED_FRAME (); | 497 | sf = SELECTED_FRAME (); |
| 495 | if (XFRAME (WINDOW_FRAME (w)) != sf) | 498 | if (XFRAME (WINDOW_FRAME (w)) != sf) |
| @@ -508,7 +511,10 @@ select_window (Lisp_Object window, Lisp_Object norecord, int inhibit_point_swap) | |||
| 508 | fset_selected_window (sf, window); | 511 | fset_selected_window (sf, window); |
| 509 | 512 | ||
| 510 | select_window_1 (window, inhibit_point_swap); | 513 | select_window_1 (window, inhibit_point_swap); |
| 514 | bset_last_selected_window (XBUFFER (w->contents), window); | ||
| 515 | windows_or_buffers_changed++; | ||
| 511 | 516 | ||
| 517 | record_and_return: | ||
| 512 | /* record_buffer can run QUIT, so make sure it is run only after we have | 518 | /* record_buffer can run QUIT, so make sure it is run only after we have |
| 513 | re-established the invariant between selected_window and selected_frame, | 519 | re-established the invariant between selected_window and selected_frame, |
| 514 | otherwise the temporary broken invariant might "escape" (bug#14161). */ | 520 | otherwise the temporary broken invariant might "escape" (bug#14161). */ |
| @@ -518,8 +524,6 @@ select_window (Lisp_Object window, Lisp_Object norecord, int inhibit_point_swap) | |||
| 518 | record_buffer (w->contents); | 524 | record_buffer (w->contents); |
| 519 | } | 525 | } |
| 520 | 526 | ||
| 521 | bset_last_selected_window (XBUFFER (w->contents), window); | ||
| 522 | windows_or_buffers_changed++; | ||
| 523 | return window; | 527 | return window; |
| 524 | } | 528 | } |
| 525 | 529 | ||