]> git.eshelyaron.com Git - emacs.git/commitdiff
*** empty log message ***
authorKim F. Storm <storm@cua.dk>
Mon, 24 Jan 2005 20:44:39 +0000 (20:44 +0000)
committerKim F. Storm <storm@cua.dk>
Mon, 24 Jan 2005 20:44:39 +0000 (20:44 +0000)
src/ChangeLog
src/xdisp.c

index de7978371b5bac33310396be6018debe95c2841f..4fa9eb8adab3a4683cbf5fbe66d37198f572c448 100644 (file)
@@ -1,8 +1,13 @@
+2005-01-24  Kim F. Storm  <storm@cua.dk>
+
+       * xdisp.c (move_it_by_lines): If we move forward after going too
+       far back, cancel move if end position is same as start position.
+
 2005-01-24  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
 
        * dispextern.h (struct glyph_string): New members clip_head and
        clip_tail.
-       
+
        * xdisp.c (get_glyph_string_clip_rect): Restrict horizontal clip
        region to the area between clip_head and clip_tail.
        (draw_glyphs): Record the area that need to be actually redrawn to
        overhangs.  Set values of these variables to the corresponding
        members in struct glyph_string.  Refine x coordinates for
        notice_overwritten_cursor using clip_head and clip_tail.
-       
+
        * macgui.h (STORE_XCHARSETSTRUCT): New macro.
 
        * macterm.c (mac_compute_glyph_string_overhangs): Implement with
        QDTextBounds.
        (x_draw_glyph_string): Don't fill the background of the successor
-       of a glyph with a right overhang if the successor will draw a
-       cursor.
+       of a glyph with a right overhang if the successor will draw a cursor.
        (XLoadQueryFont): Obtain font metrics using QDTextBounds.
-       (x_redisplay_interface): Add entry for
-       compute_glyph_string_overhangs.
+       (x_redisplay_interface): Add entry for compute_glyph_string_overhangs.
 
 2005-01-24  Kim F. Storm  <storm@cua.dk>
 
index 5f09fcc68b6d25ff8fd559119b631f695106c17b..d7c32be09ea5878b25174fdae84cff9289d479ae 100644 (file)
@@ -6413,11 +6413,15 @@ move_it_by_lines (it, dvpos, need_y_p)
       it->current_y -= it2.current_y;
       it->current_x = it->hpos = 0;
 
-      /* If we moved too far, move IT some lines forward.  */
+      /* If we moved too far back, move IT some lines forward.  */
       if (it2.vpos > -dvpos)
        {
          int delta = it2.vpos + dvpos;
+         it2 = *it;
          move_it_to (it, -1, -1, -1, it->vpos + delta, MOVE_TO_VPOS);
+         /* Move back again if we got too far ahead.  */
+         if (IT_CHARPOS (*it) >= start_charpos)
+           *it = it2;
        }
     }
 }