diff options
Diffstat (limited to 'vcl/unx')
-rw-r--r-- | vcl/unx/gtk/gtksalframe.cxx | 10 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkframe.cxx | 10 |
2 files changed, 16 insertions, 4 deletions
diff --git a/vcl/unx/gtk/gtksalframe.cxx b/vcl/unx/gtk/gtksalframe.cxx index ff540dc8fd1d..d57ec7162d69 100644 --- a/vcl/unx/gtk/gtksalframe.cxx +++ b/vcl/unx/gtk/gtksalframe.cxx @@ -3650,8 +3650,14 @@ void GtkSalFrame::IMHandler::signalIMPreeditChanged( GtkIMContext*, gpointer im_ ExtTextInputAttr sal_attr = ExtTextInputAttr::NONE; pango_attr_iterator_range (iter, &start, &end); - if (end == G_MAXINT) - end = pText ? strlen (pText) : 0; + if (start == G_MAXINT || end == G_MAXINT) + { + auto len = pText ? g_utf8_strlen(pText, -1) : 0; + if (end == G_MAXINT) + end = len; + if (start == G_MAXINT) + start = len; + } if (end == start) continue; diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx index c8c98f5c5255..40e1d1412d6a 100644 --- a/vcl/unx/gtk3/gtk3gtkframe.cxx +++ b/vcl/unx/gtk3/gtk3gtkframe.cxx @@ -4006,8 +4006,14 @@ void GtkSalFrame::IMHandler::signalIMPreeditChanged( GtkIMContext*, gpointer im_ ExtTextInputAttr sal_attr = ExtTextInputAttr::NONE; pango_attr_iterator_range (iter, &start, &end); - if (end == G_MAXINT) - end = pText ? strlen (pText) : 0; + if (start == G_MAXINT || end == G_MAXINT) + { + auto len = pText ? g_utf8_strlen(pText, -1) : 0; + if (end == G_MAXINT) + end = len; + if (start == G_MAXINT) + start = len; + } if (end == start) continue; |