diff options
| author | Eli Zaretskii | 2013-04-14 20:27:45 +0300 |
|---|---|---|
| committer | Eli Zaretskii | 2013-04-14 20:27:45 +0300 |
| commit | eb7a410c147507ffdf0e84d163a014acb82b19a2 (patch) | |
| tree | 2274bf05e320123c234afbe38dc97932b943c0ea /src/window.c | |
| parent | 64544985029d58bada3486a3eba7f11ce690c526 (diff) | |
| parent | ddd6b68524ba1f957e2f8ddd76eb23e641429b58 (diff) | |
| download | emacs-eb7a410c147507ffdf0e84d163a014acb82b19a2.tar.gz emacs-eb7a410c147507ffdf0e84d163a014acb82b19a2.zip | |
Merge from trunk, resolve conflicts.
Diffstat (limited to 'src/window.c')
| -rw-r--r-- | src/window.c | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/src/window.c b/src/window.c index feb5f7b5cc7..7cf35a480f7 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -485,17 +485,14 @@ select_window (Lisp_Object window, Lisp_Object norecord, int inhibit_point_swap) | |||
| 485 | w = XWINDOW (window); | 485 | w = XWINDOW (window); |
| 486 | w->frozen_window_start_p = 0; | 486 | w->frozen_window_start_p = 0; |
| 487 | 487 | ||
| 488 | if (NILP (norecord)) | ||
| 489 | { | ||
| 490 | w->use_time = ++window_select_count; | ||
| 491 | record_buffer (w->contents); | ||
| 492 | } | ||
| 493 | |||
| 494 | /* Make the selected window's buffer current. */ | 488 | /* Make the selected window's buffer current. */ |
| 495 | Fset_buffer (w->contents); | 489 | Fset_buffer (w->contents); |
| 496 | 490 | ||
| 497 | if (EQ (window, selected_window) && !inhibit_point_swap) | 491 | if (EQ (window, selected_window) && !inhibit_point_swap) |
| 498 | 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; | ||
| 499 | 496 | ||
| 500 | sf = SELECTED_FRAME (); | 497 | sf = SELECTED_FRAME (); |
| 501 | if (XFRAME (WINDOW_FRAME (w)) != sf) | 498 | if (XFRAME (WINDOW_FRAME (w)) != sf) |
| @@ -514,9 +511,19 @@ select_window (Lisp_Object window, Lisp_Object norecord, int inhibit_point_swap) | |||
| 514 | fset_selected_window (sf, window); | 511 | fset_selected_window (sf, window); |
| 515 | 512 | ||
| 516 | select_window_1 (window, inhibit_point_swap); | 513 | select_window_1 (window, inhibit_point_swap); |
| 517 | |||
| 518 | bset_last_selected_window (XBUFFER (w->contents), window); | 514 | bset_last_selected_window (XBUFFER (w->contents), window); |
| 519 | windows_or_buffers_changed++; | 515 | windows_or_buffers_changed++; |
| 516 | |||
| 517 | record_and_return: | ||
| 518 | /* record_buffer can run QUIT, so make sure it is run only after we have | ||
| 519 | re-established the invariant between selected_window and selected_frame, | ||
| 520 | otherwise the temporary broken invariant might "escape" (bug#14161). */ | ||
| 521 | if (NILP (norecord)) | ||
| 522 | { | ||
| 523 | w->use_time = ++window_select_count; | ||
| 524 | record_buffer (w->contents); | ||
| 525 | } | ||
| 526 | |||
| 520 | return window; | 527 | return window; |
| 521 | } | 528 | } |
| 522 | 529 | ||
| @@ -1490,7 +1497,12 @@ if it isn't already recorded. */) | |||
| 1490 | b = XBUFFER (buf); | 1497 | b = XBUFFER (buf); |
| 1491 | 1498 | ||
| 1492 | if (! NILP (update) | 1499 | if (! NILP (update) |
| 1493 | && (windows_or_buffers_changed || !w->window_end_valid) | 1500 | && (windows_or_buffers_changed |
| 1501 | || !w->window_end_valid | ||
| 1502 | || b->clip_changed | ||
| 1503 | || b->prevent_redisplay_optimizations_p | ||
| 1504 | || w->last_modified < BUF_MODIFF (b) | ||
| 1505 | || w->last_overlay_modified < BUF_OVERLAY_MODIFF (b)) | ||
| 1494 | && !noninteractive) | 1506 | && !noninteractive) |
| 1495 | { | 1507 | { |
| 1496 | struct text_pos startp; | 1508 | struct text_pos startp; |
| @@ -1699,8 +1711,9 @@ Return nil if window display is not up-to-date. In that case, use | |||
| 1699 | 1711 | ||
| 1700 | /* Fail if current matrix is not up-to-date. */ | 1712 | /* Fail if current matrix is not up-to-date. */ |
| 1701 | if (!w->window_end_valid | 1713 | if (!w->window_end_valid |
| 1702 | || current_buffer->clip_changed | 1714 | || windows_or_buffers_changed |
| 1703 | || current_buffer->prevent_redisplay_optimizations_p | 1715 | || b->clip_changed |
| 1716 | || b->prevent_redisplay_optimizations_p | ||
| 1704 | || w->last_modified < BUF_MODIFF (b) | 1717 | || w->last_modified < BUF_MODIFF (b) |
| 1705 | || w->last_overlay_modified < BUF_OVERLAY_MODIFF (b)) | 1718 | || w->last_overlay_modified < BUF_OVERLAY_MODIFF (b)) |
| 1706 | return Qnil; | 1719 | return Qnil; |
| @@ -2929,7 +2942,7 @@ window-start value is reasonable when this function is called. */) | |||
| 2929 | 2942 | ||
| 2930 | replace_window (root, window, 1); | 2943 | replace_window (root, window, 1); |
| 2931 | 2944 | ||
| 2932 | /* This must become SWINDOW anyway ....... */ | 2945 | /* This must become SWINDOW anyway ....... */ |
| 2933 | if (BUFFERP (w->contents) && !resize_failed) | 2946 | if (BUFFERP (w->contents) && !resize_failed) |
| 2934 | { | 2947 | { |
| 2935 | /* Try to minimize scrolling, by setting the window start to the | 2948 | /* Try to minimize scrolling, by setting the window start to the |