[gtk/preedit-selection-fix: 8/8] textview: Delete selection when preedit starts
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/preedit-selection-fix: 8/8] textview: Delete selection when preedit starts
- Date: Thu, 4 Mar 2021 20:18:56 +0000 (UTC)
commit d28df0b87e1422a0491970c1b0f9c9bcc5e7689c
Author: Matthias Clasen <mclasen redhat com>
Date: Thu Mar 4 14:55:40 2021 -0500
textview: Delete selection when preedit starts
This prevents confusing misrendering when the preedit text
pushes the selection text out of the rendered selection.
Fixes: #1123
gtk/gtktextview.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
---
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index c3289a0ce8..5b8bca680a 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -504,8 +504,10 @@ static void gtk_text_view_commit_handler (GtkIMContext *conte
GtkTextView *text_view);
static void gtk_text_view_commit_text (GtkTextView *text_view,
const char *text);
+static void gtk_text_view_preedit_start_handler (GtkIMContext *context,
+ GtkTextView *text_view);
static void gtk_text_view_preedit_changed_handler (GtkIMContext *context,
- GtkTextView *text_view);
+ GtkTextView *text_view);
static gboolean gtk_text_view_retrieve_surrounding_handler (GtkIMContext *context,
GtkTextView *text_view);
static gboolean gtk_text_view_delete_surrounding_handler (GtkIMContext *context,
@@ -1883,6 +1885,8 @@ gtk_text_view_init (GtkTextView *text_view)
g_signal_connect (priv->im_context, "commit",
G_CALLBACK (gtk_text_view_commit_handler), text_view);
+ g_signal_connect (priv->im_context, "preedit-start",
+ G_CALLBACK (gtk_text_view_preedit_start_handler), text_view);
g_signal_connect (priv->im_context, "preedit-changed",
G_CALLBACK (gtk_text_view_preedit_changed_handler), text_view);
g_signal_connect (priv->im_context, "retrieve-surrounding",
@@ -8212,6 +8216,13 @@ gtk_text_view_commit_text (GtkTextView *text_view,
gtk_text_buffer_get_insert (get_buffer (text_view)));
}
+static void
+gtk_text_view_preedit_start_handler (GtkIMContext *context,
+ GtkTextView *self)
+{
+ gtk_text_buffer_delete_selection (self->priv->buffer, TRUE, self->priv->editable);
+}
+
static void
gtk_text_view_preedit_changed_handler (GtkIMContext *context,
GtkTextView *text_view)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]