++row;
if (!row->enabled_p)
rc = CURSOR_MOVEMENT_MUST_SCROLL;
- /* If rows are bidi-reordered, back up until we find a row
- that does not belong to a continuation line. This is
- because we must consider all rows of a continued line as
- candidates for cursor positioning, since row start and
- end positions change non-linearly with vertical position
- in such rows. */
- /* FIXME: Revisit this when glyph ``spilling'' in
- continuation lines' rows is implemented for
- bidi-reordered rows. */
- if (!NILP (XBUFFER (w->buffer)->bidi_display_reordering))
- {
- while (MATRIX_ROW_CONTINUATION_LINE_P (row))
- {
- xassert (row->enabled_p);
- --row;
- /* If we hit the beginning of the displayed portion
- without finding the first row of a continued
- line, give up. */
- if (row <= w->current_matrix->rows)
- {
- rc = CURSOR_MOVEMENT_MUST_SCROLL;
- break;
- }
-
- }
- }
}
if (rc == CURSOR_MOVEMENT_CANNOT_BE_USED)
rc = CURSOR_MOVEMENT_MUST_SCROLL;
}
else if (rc != CURSOR_MOVEMENT_SUCCESS
- && MATRIX_ROW_PARTIALLY_VISIBLE_P (w, row)
+ && !NILP (XBUFFER (w->buffer)->bidi_display_reordering))
+ {
+ /* If rows are bidi-reordered and point moved, back up
+ until we find a row that does not belong to a
+ continuation line. This is because we must consider
+ all rows of a continued line as candidates for the
+ new cursor positioning, since row start and end
+ positions change non-linearly with vertical position
+ in such rows. */
+ /* FIXME: Revisit this when glyph ``spilling'' in
+ continuation lines' rows is implemented for
+ bidi-reordered rows. */
+ while (MATRIX_ROW_CONTINUATION_LINE_P (row))
+ {
+ xassert (row->enabled_p);
+ --row;
+ /* If we hit the beginning of the displayed portion
+ without finding the first row of a continued
+ line, give up. */
+ if (row <= w->current_matrix->rows)
+ {
+ rc = CURSOR_MOVEMENT_CANNOT_BE_USED;
+ break;
+ }
+
+ }
+ }
+ if (rc == CURSOR_MOVEMENT_SUCCESS
+ || rc == CURSOR_MOVEMENT_CANNOT_BE_USED)
+ ;
+ else if (MATRIX_ROW_PARTIALLY_VISIBLE_P (w, row)
&& make_cursor_line_fully_visible_p)
{
if (PT == MATRIX_ROW_END_CHARPOS (row)