# HG changeset patch # User Kim F. Storm # Date 1147904653 0 # Node ID c91b342afed19f0f8f922ddfb1c9d2f8c26f0df6 # Parent c7b7ef478a355a785f73f8b2d622413285e0ec0e (display_tool_bar_line): Restore entire tool-bar geometry when backtracking in case last image doesn't fit on line. (display_tool_bar_line): Don't adjust tool-bar height by more than height of one frame default line. From: MIYOSHI Masanori. diff -r c7b7ef478a35 -r c91b342afed1 src/xdisp.c --- a/src/xdisp.c Wed May 17 22:23:17 2006 +0000 +++ b/src/xdisp.c Wed May 17 22:24:13 2006 +0000 @@ -9492,6 +9492,7 @@ while (it->current_x < max_x) { int x_before, x, n_glyphs_before, i, nglyphs; + struct it it_before; /* Get the next display element. */ if (!get_next_display_element (it)) @@ -9505,9 +9506,10 @@ /* Produce glyphs. */ x_before = it->current_x; n_glyphs_before = it->glyph_row->used[TEXT_AREA]; + it_before = *it; PRODUCE_GLYPHS (it); - nglyphs = it->glyph_row->used[TEXT_AREA] - n_glyphs_before; + nglyphs = row->used[TEXT_AREA] - n_glyphs_before; i = 0; x = x_before; while (i < nglyphs) @@ -9516,9 +9518,9 @@ if (x + glyph->pixel_width > max_x) { - /* Glyph doesn't fit on line. */ - it->glyph_row->used[TEXT_AREA] = n_glyphs_before + i; - it->current_x = x; + /* Glyph doesn't fit on line. Backtrack. */ + row->used[TEXT_AREA] = n_glyphs_before; + *it = it_before; goto out; } @@ -9549,6 +9551,8 @@ /* Make line the desired height and center it vertically. */ if ((height -= it->max_ascent + it->max_descent) > 0) { + /* Don't add more than one line height. */ + height %= FRAME_LINE_HEIGHT (it->f); it->max_ascent += height / 2; it->max_descent += (height + 1) / 2; }