Mercurial > emacs
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 { |