+2013-04-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.c (select_window): `record_buffer' even if window is
+ already selected (bug#14191).
+
2013-04-11 Eli Zaretskii <eliz@gnu.org>
* window.c (Fwindow_end): Test more flags, including the buffer's
2013-04-10 Eli Zaretskii <eliz@gnu.org>
* frame.c (do_switch_frame): Mark the TTY frame we switch to as
- garbaged only if it is not already the top frame on its TTY. This
- prevents flickering due to constant redrawing of TTY frames when
+ garbaged only if it is not already the top frame on its TTY.
+ This prevents flickering due to constant redrawing of TTY frames when
there are GUI frames open in the same session. (Bug#13864)
2013-04-10 Stefan Monnier <monnier@iro.umontreal.ca>
The following changes is to optimize the code for reading UTF-8
files.
- * coding.c (check_ascii): Renamed from detect_ascii. Return value
+ * coding.c (check_ascii): Rename from detect_ascii. Return value
changed. Check EOL format. Do not call adjust_coding_eol_type
here.
(check_utf_8): New function.
* xdisp.c (with_echo_area_buffer_unwind_data): Save window
start marker...
- (unwind_with_echo_area_buffer): ...to restore it here. This
- is needed to ensure that...
+ (unwind_with_echo_area_buffer): ...to restore it here.
+ This is needed to ensure that...
(redisplay_window): ...both window markers are valid here,
which is verified by eassert.
* editfns.c (save_excursion_save): Do not assume that
* w32term.c (w32fullscreen_hook): Use FRAME_NORMAL_WIDTH,
FRAME_NORMAL_HEIGHT, and FRAME_PREV_FSMODE, instead of static
- variables, to save and restore frame dimensions. Use
- FRAME_NORMAL_LEFT and FRAME_NORMAL_TOP to restore frame position
- after returning from a 'fullscreen' configuration. use
- SendMessage instead of PostMessage to send the SC_RESTORE message,
+ variables, to save and restore frame dimensions.
+ Use FRAME_NORMAL_LEFT and FRAME_NORMAL_TOP to restore frame position
+ after returning from a 'fullscreen' configuration.
+ use SendMessage instead of PostMessage to send the SC_RESTORE message,
to avoid races between the main thread and the input thread.
* w32term.h (struct w32_output): New members normal_width,
* frame.h (struct frame): Drop resx and resy because the same data is
available from window system-specific output context. Adjust users.
- (default_pixels_per_inch_x, default_pixels_per_inch_y): New
- functions to provide defaults when no window system available.
+ (default_pixels_per_inch_x, default_pixels_per_inch_y):
+ New functions to provide defaults when no window system available.
(FRAME_RES_X, FRAME_RES_Y): New macros.
- (NUMVAL): Moved from xdisp.c.
+ (NUMVAL): Move from xdisp.c.
* font.c (font_pixel_size, font_find_for_lface, font_open_for_lface)
(Ffont_face_attributes, Fopen_font):
* image.c (gs_load):
Fset_buffer (w->contents);
if (EQ (window, selected_window) && !inhibit_point_swap)
- return window;
+ /* `switch-to-buffer' uses (select-window (selected-window)) as a "clever"
+ way to call record_buffer from Elisp, so it's important that we call
+ record_buffer before returning here. */
+ goto record_and_return;
sf = SELECTED_FRAME ();
if (XFRAME (WINDOW_FRAME (w)) != sf)
fset_selected_window (sf, window);
select_window_1 (window, inhibit_point_swap);
+ bset_last_selected_window (XBUFFER (w->contents), window);
+ windows_or_buffers_changed++;
+ record_and_return:
/* record_buffer can run QUIT, so make sure it is run only after we have
re-established the invariant between selected_window and selected_frame,
otherwise the temporary broken invariant might "escape" (bug#14161). */
record_buffer (w->contents);
}
- bset_last_selected_window (XBUFFER (w->contents), window);
- windows_or_buffers_changed++;
return window;
}