Backport fix for Bug#11677 from trunk

This commit is contained in:
Chong Yidong 2012-08-13 13:11:19 +08:00
parent c17d5a38db
commit 170aedb97e
2 changed files with 29 additions and 17 deletions

View file

@ -1,3 +1,9 @@
2012-08-13 Eli Zaretskii <eliz@gnu.org>
* window.c (Fdelete_other_windows_internal)
(Fdelete_window_internal): Don't access frame's mouse highlight
info of the initial frame. (Bug#11677)
2012-08-12 Jan Djärv <jan.h.d@swipnet.se>
* nsterm.m (ns_read_socket): Return early if there is a modal

View file

@ -2565,7 +2565,6 @@ window-start value is reasonable when this function is called. */)
Lisp_Object sibling, pwindow, swindow IF_LINT (= Qnil), delta;
EMACS_INT startpos IF_LINT (= 0);
int top IF_LINT (= 0), new_top, resize_failed;
Mouse_HLInfo *hlinfo;
w = decode_any_window (window);
CHECK_LIVE_FRAME (w->frame);
@ -2648,19 +2647,23 @@ window-start value is reasonable when this function is called. */)
}
BLOCK_INPUT;
hlinfo = MOUSE_HL_INFO (f);
/* We are going to free the glyph matrices of WINDOW, and with that
we might lose any information about glyph rows that have some of
their glyphs highlighted in mouse face. (These rows are marked
with a non-zero mouse_face_p flag.) If WINDOW indeed has some
glyphs highlighted in mouse face, signal to frame's up-to-date
hook that mouse highlight was overwritten, so that it will
arrange for redisplaying the highlight. */
if (EQ (hlinfo->mouse_face_window, window))
if (!FRAME_INITIAL_P (f))
{
hlinfo->mouse_face_beg_row = hlinfo->mouse_face_beg_col = -1;
hlinfo->mouse_face_end_row = hlinfo->mouse_face_end_col = -1;
hlinfo->mouse_face_window = Qnil;
Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
/* We are going to free the glyph matrices of WINDOW, and with
that we might lose any information about glyph rows that have
some of their glyphs highlighted in mouse face. (These rows
are marked with a non-zero mouse_face_p flag.) If WINDOW
indeed has some glyphs highlighted in mouse face, signal to
frame's up-to-date hook that mouse highlight was overwritten,
so that it will arrange for redisplaying the highlight. */
if (EQ (hlinfo->mouse_face_window, window))
{
hlinfo->mouse_face_beg_row = hlinfo->mouse_face_beg_col = -1;
hlinfo->mouse_face_end_row = hlinfo->mouse_face_end_col = -1;
hlinfo->mouse_face_window = Qnil;
}
}
free_window_matrices (r);
@ -3903,7 +3906,6 @@ Signal an error when WINDOW is the only window on its frame. */)
&& EQ (r->new_total, (horflag ? r->total_cols : r->total_lines)))
/* We can delete WINDOW now. */
{
Mouse_HLInfo *hlinfo;
/* Block input. */
BLOCK_INPUT;
@ -3911,9 +3913,13 @@ Signal an error when WINDOW is the only window on its frame. */)
/* If this window is referred to by the dpyinfo's mouse
highlight, invalidate that slot to be safe (Bug#9904). */
hlinfo = MOUSE_HL_INFO (XFRAME (w->frame));
if (EQ (hlinfo->mouse_face_window, window))
hlinfo->mouse_face_window = Qnil;
if (!FRAME_INITIAL_P (f))
{
Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
if (EQ (hlinfo->mouse_face_window, window))
hlinfo->mouse_face_window = Qnil;
}
windows_or_buffers_changed++;
Vwindow_list = Qnil;