summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-03-04 14:49:14 -0500
committerMatthias Clasen <mclasen@redhat.com>2021-03-04 15:18:30 -0500
commit447203ce525ff95e916c6106818df2836c7d9b1f (patch)
tree135e8d2477dc27e2d6b1f466946488d1c25c6f0c
parentfeccdad9d2afcda75d87153c48d3bc0324fa4bd8 (diff)
downloadgtk+-447203ce525ff95e916c6106818df2836c7d9b1f.tar.gz
text: Delete selection when preedit starts
This prevents confusing misrendering when the preedit text pushes the selection text out of the rendered selection. Fixes: #1123
-rw-r--r--gtk/gtktext.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gtk/gtktext.c b/gtk/gtktext.c
index f2f1f854b0..7791029e52 100644
--- a/gtk/gtktext.c
+++ b/gtk/gtktext.c
@@ -418,6 +418,8 @@ static void direction_changed (GdkDevice *keyboard,
static void gtk_text_commit_cb (GtkIMContext *context,
const char *str,
GtkText *self);
+static void gtk_text_preedit_start_cb (GtkIMContext *context,
+ GtkText *self);
static void gtk_text_preedit_changed_cb (GtkIMContext *context,
GtkText *self);
static gboolean gtk_text_retrieve_surrounding_cb (GtkIMContext *context,
@@ -1843,6 +1845,8 @@ gtk_text_init (GtkText *self)
*/
priv->im_context = gtk_im_multicontext_new ();
+ g_signal_connect (priv->im_context, "preedit-start",
+ G_CALLBACK (gtk_text_preedit_start_cb), self);
g_signal_connect (priv->im_context, "commit",
G_CALLBACK (gtk_text_commit_cb), self);
g_signal_connect (priv->im_context, "preedit-changed",
@@ -4151,6 +4155,13 @@ direction_changed (GdkDevice *device,
*/
static void
+gtk_text_preedit_start_cb (GtkIMContext *context,
+ GtkText *self)
+{
+ gtk_text_delete_selection (self);
+}
+
+static void
gtk_text_commit_cb (GtkIMContext *context,
const char *str,
GtkText *self)