]> git.eshelyaron.com Git - emacs.git/commitdiff
(display_mode_line): Support nested calls to redisplay
authorKim F. Storm <storm@cua.dk>
Tue, 31 May 2005 22:46:22 +0000 (22:46 +0000)
committerKim F. Storm <storm@cua.dk>
Tue, 31 May 2005 22:46:22 +0000 (22:46 +0000)
and format-mode-line.  Set mode_line_target to MODE_LINE_DISPLAY.

src/xdisp.c

index fcfc8090277b9818d3c70c4fc456125d9b77d6ea..29fdbab5d78cf11a0c84d59e2b7509144c51f9af 100644 (file)
@@ -8352,8 +8352,8 @@ x_consider_frame_title (frame)
       multiple_frames = CONSP (tail);
 
       /* Switch to the buffer of selected window of the frame.  Set up
-        mode_line_noprop_ptr so that display_mode_element will output into it;
-        then display the title.  */
+        mode_line_target so that display_mode_element will output into
+        mode_line_noprop_buf; then display the title.  */
       record_unwind_protect (unwind_format_mode_line,
                             format_mode_line_unwind_data (current_buffer));
 
@@ -15672,6 +15672,7 @@ display_mode_line (w, face_id, format)
 {
   struct it it;
   struct face *face;
+  int count = SPECPDL_INDEX ();
 
   init_iterator (&it, w, -1, -1, NULL, face_id);
   prepare_desired_row (it.glyph_row);
@@ -15682,6 +15683,11 @@ display_mode_line (w, face_id, format)
     /* Force the mode-line to be displayed in the default face.  */
     it.base_face_id = it.face_id = DEFAULT_FACE_ID;
 
+  record_unwind_protect (unwind_format_mode_line,
+                        format_mode_line_unwind_data (NULL));
+
+  mode_line_target = MODE_LINE_DISPLAY;
+
   /* Temporarily make frame's keyboard the current kboard so that
      kboard-local variables in the mode_line_format will get the right
      values.  */
@@ -15689,6 +15695,8 @@ display_mode_line (w, face_id, format)
   display_mode_element (&it, 0, 0, 0, format, Qnil, 0);
   pop_frame_kboard ();
 
+  unbind_to (count, Qnil);
+
   /* Fill up with spaces.  */
   display_string (" ", Qnil, Qnil, 0, 0, &it, 10000, -1, -1, 0);