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:
parent
755c314465
commit
fd6eb60478
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user