From 4bea7b0ae841821f13b7a3f2297b0d41342377e2 Mon Sep 17 00:00:00 2001 From: Daniel Boles Date: Sat, 18 Feb 2017 22:50:00 +0000 Subject: [PATCH] =?UTF-8?q?Entry=E2=80=94Fix=20inverted=20movements=20by?= =?UTF-8?q?=20arrow=20keys=20in=20RTL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Date: Tue Apr 20 08:06:23 2010 +0000 https://bugzilla.gnome.org/show_bug.cgi?id=136059 --- gtk/gtkentry.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index ab698ff120..49f8d8f759 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -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);