comparison src/xdisp.c @ 70199:4a716172f505

(tool_bar_lines_needed): New local `temp_row' for clarity. (tool_bar_lines_needed): Clear it when done, so we don't accidentally draw a second copy of the tool-bar after resetting f->n_tool_bar_rows. (redisplay_tool_bar): Update tool-bar-lines frame parameter whenever we recalculate f->n_tool_bar_rows.
author Kim F. Storm <storm@cua.dk>
date Sun, 23 Apr 2006 22:27:08 +0000
parents 94fddd0892cb
children 8bcff9775482
comparison
equal deleted inserted replaced
70198:29a0b82dbf7a 70199:4a716172f505
9560 struct frame *f; 9560 struct frame *f;
9561 int *n_rows; 9561 int *n_rows;
9562 { 9562 {
9563 struct window *w = XWINDOW (f->tool_bar_window); 9563 struct window *w = XWINDOW (f->tool_bar_window);
9564 struct it it; 9564 struct it it;
9565 struct glyph_row *temp_row = w->desired_matrix->rows;
9565 9566
9566 /* Initialize an iterator for iteration over 9567 /* Initialize an iterator for iteration over
9567 F->desired_tool_bar_string in the tool-bar window of frame F. */ 9568 F->desired_tool_bar_string in the tool-bar window of frame F. */
9568 init_iterator (&it, w, -1, -1, w->desired_matrix->rows, TOOL_BAR_FACE_ID); 9569 init_iterator (&it, w, -1, -1, temp_row, TOOL_BAR_FACE_ID);
9569 it.first_visible_x = 0; 9570 it.first_visible_x = 0;
9570 it.last_visible_x = FRAME_TOTAL_COLS (f) * FRAME_COLUMN_WIDTH (f); 9571 it.last_visible_x = FRAME_TOTAL_COLS (f) * FRAME_COLUMN_WIDTH (f);
9571 reseat_to_string (&it, NULL, f->desired_tool_bar_string, 0, 0, 0, -1); 9572 reseat_to_string (&it, NULL, f->desired_tool_bar_string, 0, 0, 0, -1);
9572 9573
9573 while (!ITERATOR_AT_END_P (&it)) 9574 while (!ITERATOR_AT_END_P (&it))
9574 { 9575 {
9575 it.glyph_row = w->desired_matrix->rows; 9576 clear_glyph_row (temp_row);
9576 clear_glyph_row (it.glyph_row); 9577 it.glyph_row = temp_row;
9577 display_tool_bar_line (&it, -1); 9578 display_tool_bar_line (&it, -1);
9578 } 9579 }
9580 clear_glyph_row (temp_row);
9579 9581
9580 /* f->n_tool_bar_rows == 0 means "unknown"; -1 means no tool-bar. */ 9582 /* f->n_tool_bar_rows == 0 means "unknown"; -1 means no tool-bar. */
9581 if (n_rows) 9583 if (n_rows)
9582 *n_rows = it.vpos > 0 ? it.vpos : -1; 9584 *n_rows = it.vpos > 0 ? it.vpos : -1;
9583 9585
9653 /* Build a string that represents the contents of the tool-bar. */ 9655 /* Build a string that represents the contents of the tool-bar. */
9654 build_desired_tool_bar_string (f); 9656 build_desired_tool_bar_string (f);
9655 reseat_to_string (&it, NULL, f->desired_tool_bar_string, 0, 0, 0, -1); 9657 reseat_to_string (&it, NULL, f->desired_tool_bar_string, 0, 0, 0, -1);
9656 9658
9657 if (f->n_tool_bar_rows == 0) 9659 if (f->n_tool_bar_rows == 0)
9658 (void)tool_bar_lines_needed (f, &f->n_tool_bar_rows); 9660 {
9661 int nlines;
9662
9663 if ((nlines = tool_bar_lines_needed (f, &f->n_tool_bar_rows),
9664 nlines != WINDOW_TOTAL_LINES (w)))
9665 {
9666 extern Lisp_Object Qtool_bar_lines;
9667 Lisp_Object frame;
9668 int old_height = WINDOW_TOTAL_LINES (w);
9669
9670 XSETFRAME (frame, f);
9671 clear_glyph_matrix (w->desired_matrix);
9672 Fmodify_frame_parameters (frame,
9673 Fcons (Fcons (Qtool_bar_lines,
9674 make_number (nlines)),
9675 Qnil));
9676 if (WINDOW_TOTAL_LINES (w) != old_height)
9677 {
9678 fonts_changed_p = 1;
9679 return 1;
9680 }
9681 }
9682 }
9659 9683
9660 /* Display as many lines as needed to display all tool-bar items. */ 9684 /* Display as many lines as needed to display all tool-bar items. */
9661 9685
9662 if (f->n_tool_bar_rows > 0) 9686 if (f->n_tool_bar_rows > 0)
9663 { 9687 {