textview: Send anchor with surrounding
We have the api to do it now.
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user