entry: Remove text direction complications

Instead of trying to derive a direction from content and
keyboard layout, just let the widgets direction prevail.
This avoids irritating jumping text on focus in, in situations
where the directions are mixed.

See discussion in !7971

This is a backport of d0bfed5195be99c21e.
This commit is contained in:
Matthias Clasen 2025-01-24 10:09:21 -05:00
parent 755c314465
commit fd6eb60478

View File

@ -6330,6 +6330,17 @@ show_placeholder_text (GtkEntry *entry)
return FALSE;
}
static void
update_resolved_dir (GtkEntry *self)
{
GtkEntryPrivate *priv = self->priv;
if (gtk_widget_get_direction (GTK_WIDGET (self)) == GTK_TEXT_DIR_RTL)
priv->resolved_dir = PANGO_DIRECTION_RTL;
else
priv->resolved_dir = PANGO_DIRECTION_LTR;
}
static PangoLayout *
gtk_entry_create_layout (GtkEntry *entry,
gboolean include_preedit)
@ -6398,40 +6409,11 @@ gtk_entry_create_layout (GtkEntry *entry,
}
else
{
PangoDirection pango_dir;
if (gtk_entry_get_display_mode (entry) == DISPLAY_NORMAL)
pango_dir = _gtk_pango_find_base_dir (display_text, n_bytes);
else
pango_dir = PANGO_DIRECTION_NEUTRAL;
if (pango_dir == PANGO_DIRECTION_NEUTRAL)
{
if (gtk_widget_has_focus (widget))
{
GdkDisplay *display = gtk_widget_get_display (widget);
GdkKeymap *keymap = gdk_keymap_get_for_display (display);
if (gdk_keymap_get_direction (keymap) == PANGO_DIRECTION_RTL)
pango_dir = PANGO_DIRECTION_RTL;
else
pango_dir = PANGO_DIRECTION_LTR;
}
else
{
if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
pango_dir = PANGO_DIRECTION_RTL;
else
pango_dir = PANGO_DIRECTION_LTR;
}
}
pango_context_set_base_dir (gtk_widget_get_pango_context (widget), pango_dir);
priv->resolved_dir = pango_dir;
pango_layout_set_text (layout, display_text, n_bytes);
}
update_resolved_dir (entry);
pango_layout_set_attributes (layout, tmp_attrs);
if (priv->tabs)