imwayland: Be careful about cursor positions

We don't want to hand out cursor positions based on
the original preedit text and then tweak the text to
be different.
This commit is contained in:
Matthias Clasen 2021-02-18 15:44:21 -05:00
parent 784b236964
commit 1282cac99d

View File

@ -523,7 +523,7 @@ gtk_im_context_wayland_get_preedit_string (GtkIMContext *context,
gint *cursor_pos) gint *cursor_pos)
{ {
GtkIMContextWayland *context_wayland = GTK_IM_CONTEXT_WAYLAND (context); GtkIMContextWayland *context_wayland = GTK_IM_CONTEXT_WAYLAND (context);
gchar *preedit_str; char *preedit_str;
if (attrs) if (attrs)
*attrs = NULL; *attrs = NULL;
@ -542,10 +542,8 @@ gtk_im_context_wayland_get_preedit_string (GtkIMContext *context,
} }
preedit_str = preedit_str =
context_wayland->current_preedit.text ? context_wayland->current_preedit.text : ""; tweak_preedit (context_wayland->current_preedit.text ? context_wayland->current_preedit.text : "");
if (str)
*str = tweak_preedit (preedit_str);
if (cursor_pos) if (cursor_pos)
*cursor_pos = g_utf8_strlen (preedit_str, *cursor_pos = g_utf8_strlen (preedit_str,
context_wayland->current_preedit.cursor_begin); context_wayland->current_preedit.cursor_begin);
@ -566,6 +564,11 @@ gtk_im_context_wayland_get_preedit_string (GtkIMContext *context,
pango_attr_list_insert (*attrs, cursor); pango_attr_list_insert (*attrs, cursor);
} }
} }
if (str)
*str = preedit_str;
else
g_free (preedit_str);
} }
static gboolean static gboolean