From 170aedb97ebee3edb81d2c447e6baa465978b03f Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 13 Aug 2012 13:11:19 +0800 Subject: [PATCH] Backport fix for Bug#11677 from trunk --- src/ChangeLog | 6 ++++++ src/window.c | 40 +++++++++++++++++++++++----------------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 3a0ea19c1b1..96c6d244bd1 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-08-13 Eli Zaretskii + + * 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 * nsterm.m (ns_read_socket): Return early if there is a modal diff --git a/src/window.c b/src/window.c index ae8d209df74..f05bba8aedf 100644 --- a/src/window.c +++ b/src/window.c @@ -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; -- 2.11.4.GIT