diff options
| author | Richard M. Stallman | 1998-04-08 07:15:02 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1998-04-08 07:15:02 +0000 |
| commit | 5ba50c519e52df945ef7c4063f15ac9c73b99208 (patch) | |
| tree | 0e5bcba567554213fc62d1c78a37af172d0e8e3a | |
| parent | d8afad26de00051491b9dcad7a2c73b45063733f (diff) | |
| download | emacs-5ba50c519e52df945ef7c4063f15ac9c73b99208.tar.gz emacs-5ba50c519e52df945ef7c4063f15ac9c73b99208.zip | |
(redisplay_window): If updating mode line,
temporarily change selected_frame
| -rw-r--r-- | src/xdisp.c | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/src/xdisp.c b/src/xdisp.c index dfc64cb1ff7..3983d26134e 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -1739,6 +1739,7 @@ redisplay_window (window, just_this_one, preserve_echo_area) | |||
| 1739 | int tem; | 1739 | int tem; |
| 1740 | int update_mode_line; | 1740 | int update_mode_line; |
| 1741 | struct Lisp_Char_Table *dp = window_display_table (w); | 1741 | struct Lisp_Char_Table *dp = window_display_table (w); |
| 1742 | int really_switched_buffer = 0; | ||
| 1742 | 1743 | ||
| 1743 | if (Z == Z_BYTE && lpoint != lpoint_byte) | 1744 | if (Z == Z_BYTE && lpoint != lpoint_byte) |
| 1744 | abort (); | 1745 | abort (); |
| @@ -1794,7 +1795,11 @@ redisplay_window (window, just_this_one, preserve_echo_area) | |||
| 1794 | /* Otherwise set up data on this window; select its buffer and point value */ | 1795 | /* Otherwise set up data on this window; select its buffer and point value */ |
| 1795 | 1796 | ||
| 1796 | if (update_mode_line) | 1797 | if (update_mode_line) |
| 1797 | set_buffer_internal_1 (XBUFFER (w->buffer)); | 1798 | /* Really select the buffer, for the sake of buffer-local variables. */ |
| 1799 | { | ||
| 1800 | set_buffer_internal_1 (XBUFFER (w->buffer)); | ||
| 1801 | really_switched_buffer = 1; | ||
| 1802 | } | ||
| 1798 | else | 1803 | else |
| 1799 | set_buffer_temp (XBUFFER (w->buffer)); | 1804 | set_buffer_temp (XBUFFER (w->buffer)); |
| 1800 | 1805 | ||
| @@ -1925,8 +1930,12 @@ redisplay_window (window, just_this_one, preserve_echo_area) | |||
| 1925 | { | 1930 | { |
| 1926 | Lisp_Object temp[3]; | 1931 | Lisp_Object temp[3]; |
| 1927 | 1932 | ||
| 1928 | set_buffer_temp (old); | 1933 | if (!really_switched_buffer) |
| 1929 | set_buffer_internal_1 (XBUFFER (w->buffer)); | 1934 | { |
| 1935 | set_buffer_temp (old); | ||
| 1936 | set_buffer_internal_1 (XBUFFER (w->buffer)); | ||
| 1937 | } | ||
| 1938 | really_switched_buffer = 1; | ||
| 1930 | update_mode_line = 1; | 1939 | update_mode_line = 1; |
| 1931 | w->update_mode_line = Qt; | 1940 | w->update_mode_line = Qt; |
| 1932 | if (! NILP (Vwindow_scroll_functions)) | 1941 | if (! NILP (Vwindow_scroll_functions)) |
| @@ -2170,8 +2179,11 @@ redisplay_window (window, just_this_one, preserve_echo_area) | |||
| 2170 | /* Redisplay the mode line. Select the buffer properly for that. */ | 2179 | /* Redisplay the mode line. Select the buffer properly for that. */ |
| 2171 | if (!update_mode_line) | 2180 | if (!update_mode_line) |
| 2172 | { | 2181 | { |
| 2173 | set_buffer_temp (old); | 2182 | if (!really_switched_buffer) |
| 2174 | set_buffer_internal_1 (XBUFFER (w->buffer)); | 2183 | { |
| 2184 | set_buffer_temp (old); | ||
| 2185 | set_buffer_internal_1 (XBUFFER (w->buffer)); | ||
| 2186 | } | ||
| 2175 | update_mode_line = 1; | 2187 | update_mode_line = 1; |
| 2176 | w->update_mode_line = Qt; | 2188 | w->update_mode_line = Qt; |
| 2177 | } | 2189 | } |
| @@ -2357,7 +2369,18 @@ done: | |||
| 2357 | || (!NILP (w->column_number_displayed) | 2369 | || (!NILP (w->column_number_displayed) |
| 2358 | && XFASTINT (w->column_number_displayed) != current_column ())) | 2370 | && XFASTINT (w->column_number_displayed) != current_column ())) |
| 2359 | && height != XFASTINT (w->height)) | 2371 | && height != XFASTINT (w->height)) |
| 2360 | display_mode_line (w); | 2372 | { |
| 2373 | FRAME_PTR oframe = selected_frame; | ||
| 2374 | if (!really_switched_buffer) | ||
| 2375 | { | ||
| 2376 | set_buffer_temp (old); | ||
| 2377 | set_buffer_internal_1 (XBUFFER (w->buffer)); | ||
| 2378 | really_switched_buffer = 1; | ||
| 2379 | } | ||
| 2380 | selected_frame = f; | ||
| 2381 | display_mode_line (w); | ||
| 2382 | selected_frame = oframe; | ||
| 2383 | } | ||
| 2361 | if (! line_number_displayed | 2384 | if (! line_number_displayed |
| 2362 | && ! BUFFERP (w->base_line_pos)) | 2385 | && ! BUFFERP (w->base_line_pos)) |
| 2363 | { | 2386 | { |
| @@ -2414,7 +2437,7 @@ done: | |||
| 2414 | } | 2437 | } |
| 2415 | 2438 | ||
| 2416 | TEMP_SET_PT_BOTH (opoint, opoint_byte); | 2439 | TEMP_SET_PT_BOTH (opoint, opoint_byte); |
| 2417 | if (update_mode_line) | 2440 | if (really_switched_buffer) |
| 2418 | set_buffer_internal_1 (old); | 2441 | set_buffer_internal_1 (old); |
| 2419 | else | 2442 | else |
| 2420 | set_buffer_temp (old); | 2443 | set_buffer_temp (old); |