Backport fix for Bug#11677 from trunk
authorChong Yidong <cyd@gnu.org>
Mon, 13 Aug 2012 05:11:19 +0000 (13:11 +0800)
committerChong Yidong <cyd@gnu.org>
Mon, 13 Aug 2012 05:11:19 +0000 (13:11 +0800)
src/ChangeLog
src/window.c

index 3a0ea19..96c6d24 100644 (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
index ae8d209..f05bba8 100644 (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;