changeset 25190:a14edd4a5f4a

(set_window_cursor_after_update): Correct cursor position if cursor_in_echo_area:
author Gerd Moellmann <gerd@gnu.org>
date Fri, 06 Aug 1999 15:05:27 +0000
parents 710445260df6
children 3a5376feb9aa
files src/dispnew.c
diffstat 1 files changed, 26 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/dispnew.c	Fri Aug 06 13:59:59 1999 +0000
+++ b/src/dispnew.c	Fri Aug 06 15:05:27 1999 +0000
@@ -4028,28 +4028,37 @@
 	     line that has any text on it.  Note: either all lines
 	     are enabled or none.  Otherwise we wouldn't be able to
 	     determine Y.  */
-	  struct glyph_row *row = MATRIX_ROW (w->current_matrix, 0);
-	  int vpos, last_row_vpos;
-	  struct glyph_row *last_row = NULL;
-
-	  vpos = 0;
-	  while (vpos < w->current_matrix->nrows)
+	  struct glyph_row *row, *last_row;
+	  struct glyph *glyph;
+	  int yb = window_text_bottom_y (w);
+
+	  last_row = NULL;
+	  for (row = MATRIX_ROW (w->current_matrix, 0);; ++row)
 	    {
-	      if (row->enabled_p && row->used[TEXT_AREA])
-		{
-		  last_row = row;
-		  last_row_vpos = vpos;
-		}
-	      ++row;
-	      ++vpos;
+	      if (row->used[TEXT_AREA]
+		  && row->glyphs[TEXT_AREA][0].charpos >= 0)
+		last_row = row;
+
+	      if (MATRIX_ROW_BOTTOM_Y (row) >= yb)
+		break;
 	    }
-
+	  
 	  if (last_row)
 	    {
-	      cx = last_row->pixel_width;
-	      hpos = last_row->used[TEXT_AREA];
+	      struct glyph *start = row->glyphs[TEXT_AREA];
+	      struct glyph *last = start + row->used[TEXT_AREA];
+
+	      while (last > start && (last - 1)->charpos < 0)
+		--last;
+	      
+	      for (glyph = start; glyph < last; ++glyph)
+		{
+		  cx += glyph->pixel_width;
+		  ++hpos;
+		}
+
 	      cy = last_row->y;
-	      vpos = last_row_vpos;
+	      vpos = MATRIX_ROW_VPOS (last_row, w->current_matrix);
 	    }
 	}
     }