changeset 70695:c91b342afed1

(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.
author Kim F. Storm <storm@cua.dk>
date Wed, 17 May 2006 22:24:13 +0000
parents c7b7ef478a35
children a678a92fb660
files src/xdisp.c
diffstat 1 files changed, 8 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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;
     }