textview: Send anchor with surrounding

We have the api to do it now.
This commit is contained in:
Matthias Clasen
2021-03-04 14:46:46 -05:00
parent ccae0e1732
commit d1fbfb9c4e

View File

@@ -8259,19 +8259,54 @@ gtk_text_view_retrieve_surrounding_handler (GtkIMContext *context,
{
GtkTextIter start;
GtkTextIter end;
int pos;
GtkTextIter start1;
GtkTextIter end1;
int cursor_pos;
int anchor_pos;
char *text;
char *pre;
char *sel;
char *post;
gboolean flip;
gtk_text_buffer_get_iter_at_mark (text_view->priv->buffer, &start,
gtk_text_buffer_get_insert (text_view->priv->buffer));
end = start;
gtk_text_buffer_get_insert (text_view->priv->buffer));
gtk_text_buffer_get_iter_at_mark (text_view->priv->buffer, &end,
gtk_text_buffer_get_selection_bound (text_view->priv->buffer));
flip = gtk_text_iter_compare (&start, &end) < 0;
gtk_text_iter_order (&start, &end);
start1 = start;
end1 = end;
pos = gtk_text_iter_get_line_index (&start);
gtk_text_iter_set_line_offset (&start, 0);
gtk_text_iter_forward_to_line_end (&end);
gtk_text_iter_forward_to_line_end (&end1);
pre = gtk_text_iter_get_slice (&start1, &start);
sel = gtk_text_iter_get_slice (&start, &end);
post = gtk_text_iter_get_slice (&end, &end1);
if (flip)
{
anchor_pos = strlen (pre);
cursor_pos = anchor_pos + strlen (sel);
}
else
{
cursor_pos = strlen (pre);
anchor_pos = cursor_pos + strlen (sel);
}
text = g_strconcat (pre, sel, post, NULL);
g_free (pre);
g_free (sel);
g_free (post);
gtk_im_context_set_surrounding_with_selection (context, text, -1, cursor_pos, anchor_pos);
text = gtk_text_iter_get_slice (&start, &end);
gtk_im_context_set_surrounding (context, text, -1, pos);
g_free (text);
return TRUE;