Entry—Fix inverted movements by arrow keys in RTL

Using Ctrl + left/right to skip between words, or left/right to cancel a
selection, were causing movement on the screen in the opposite direction
of the glyph on the key. This was surprising and awful UX for RTL users.

This is based on a patch covering the former case by:
Author:    Ori Avtalion <ori@avtalion.name>
Date:      Tue Apr 20 08:06:23 2010 +0000

https://bugzilla.gnome.org/show_bug.cgi?id=136059
This commit is contained in:
Daniel Boles 2017-02-18 22:50:00 +00:00
parent 3e28b1fc64
commit 4bea7b0ae8

View File

@ -5177,8 +5177,11 @@ gtk_entry_move_cursor (GtkEntry *entry,
new_pos = current_x > bound_x ? priv->current_pos : priv->selection_bound;
break;
}
case GTK_MOVEMENT_LOGICAL_POSITIONS:
case GTK_MOVEMENT_WORDS:
if (priv->resolved_dir == PANGO_DIRECTION_RTL)
count *= -1;
/* Fall through */
case GTK_MOVEMENT_LOGICAL_POSITIONS:
if (count < 0)
new_pos = MIN (priv->current_pos, priv->selection_bound);
else
@ -5228,6 +5231,8 @@ gtk_entry_move_cursor (GtkEntry *entry,
}
break;
case GTK_MOVEMENT_WORDS:
if (priv->resolved_dir == PANGO_DIRECTION_RTL)
count *= -1;
while (count > 0)
{
new_pos = gtk_entry_move_forward_word (entry, new_pos, FALSE);