[gnome-shell/wip/carlosg/update-hint-on-preedit] St: Ensure to update entry hint visibility with IM preedit



commit b18469427e5c19402111de5fe9888bceec0eaacd
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Mar 11 12:32:07 2020 +0100

    St: Ensure to update entry hint visibility with IM preedit
    
    Commit 88ac339774 changed StEntry behavior so the text hint would
    stay visible while focused, as long as the text buffer is empty.
    However, IMs that use preedit still should count as "started typing",
    while the text buffer is still officially empty.
    
    To fix this, check on st_entry_update_hint_visibility() that there's
    indeed no preedit buffer before showing the hint. We can't directly
    listen to internal preedit buffer changes in ClutterText, so handle
    preedit buffer updates through the ::cursor-changed signal that will
    be indirectly emitted.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1084

 src/st/st-entry.c | 11 +++++++++++
 1 file changed, 11 insertions(+)
---
diff --git a/src/st/st-entry.c b/src/st/st-entry.c
index 24fe7434c7..28dddc0537 100644
--- a/src/st/st-entry.c
+++ b/src/st/st-entry.c
@@ -232,6 +232,7 @@ st_entry_update_hint_visibility (StEntry *self)
   StEntryPrivate *priv = ST_ENTRY_PRIV (self);
   gboolean hint_visible =
     priv->hint_actor != NULL &&
+    !clutter_text_has_preedit (CLUTTER_TEXT (priv->entry)) &&
     strcmp (clutter_text_get_text (CLUTTER_TEXT (priv->entry)), "") == 0;
 
   if (priv->hint_actor)
@@ -530,6 +531,13 @@ clutter_text_focus_out_cb (ClutterText  *text,
   clutter_text_set_cursor_visible (text, FALSE);
 }
 
+static void
+clutter_text_cursor_changed (ClutterText *text,
+                             StEntry     *entry)
+{
+  st_entry_update_hint_visibility (entry);
+}
+
 static void
 clutter_text_changed_cb (GObject    *object,
                          GParamSpec *pspec,
@@ -980,6 +988,9 @@ st_entry_init (StEntry *entry)
   g_signal_connect (priv->entry, "button-press-event",
                     G_CALLBACK (clutter_text_button_press_event), entry);
 
+  g_signal_connect (priv->entry, "cursor-changed",
+                    G_CALLBACK (clutter_text_cursor_changed), entry);
+
   g_signal_connect (priv->entry, "notify::text",
                     G_CALLBACK (clutter_text_changed_cb), entry);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]