]> git.eshelyaron.com Git - emacs.git/commitdiff
(set_window_cursor_after_update): Correct cursor
authorGerd Moellmann <gerd@gnu.org>
Fri, 6 Aug 1999 15:05:27 +0000 (15:05 +0000)
committerGerd Moellmann <gerd@gnu.org>
Fri, 6 Aug 1999 15:05:27 +0000 (15:05 +0000)
position if cursor_in_echo_area:

src/dispnew.c

index cac7a051767c0d2cbce7afef0b971d1cc95190b0..4875f736b995ac3780fad21dd7044c12993d6bc5 100644 (file)
@@ -4028,28 +4028,37 @@ set_window_cursor_after_update (w)
             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;
+         struct glyph_row *row, *last_row;
+         struct glyph *glyph;
+         int yb = window_text_bottom_y (w);
 
-         vpos = 0;
-         while (vpos < w->current_matrix->nrows)
+         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);
            }
        }
     }