[gnome-shell] fix issues with hint text



commit d593877548cc80db2bb0ed0795b652a37851172c
Author: Thomas Wood <thomas wood intel com>
Date:   Tue Oct 20 14:22:17 2009 +0100

    fix issues with hint text
    
    Add a "hint_visible" private variable to keep track of when the hint text
    is visible. Use this to determine whether to return the text from the
    internal ClutterText or whether to return an empty string.
    
    Fixes: http://bugzilla.moblin.org/show_bug.cgi?id=6837
           http://bugzilla.moblin.org/show_bug.cgi?id=6836
    
    https://bugzilla.gnome.org/show_bug.cgi?id=611095

 src/st/st-entry.c |   22 ++++++++++++++++++----
 1 files changed, 18 insertions(+), 4 deletions(-)
---
diff --git a/src/st/st-entry.c b/src/st/st-entry.c
index 1c3e3ae..77e61ab 100644
--- a/src/st/st-entry.c
+++ b/src/st/st-entry.c
@@ -97,6 +97,8 @@ struct _StEntryPrivate
   ClutterActor *secondary_icon;
 
   gfloat        spacing;
+
+  gboolean      hint_visible;
 };
 
 static guint entry_signals[LAST_SIGNAL] = { 0, };
@@ -375,9 +377,10 @@ clutter_text_focus_in_cb (ClutterText  *text,
   StEntryPrivate *priv = ST_ENTRY_PRIV (actor);
 
   /* remove the hint if visible */
-  if (priv->hint
-      && !strcmp (clutter_text_get_text (text), priv->hint))
+  if (priv->hint && priv->hint_visible)
     {
+      priv->hint_visible = FALSE;
+
       clutter_text_set_text (text, "");
     }
   st_widget_set_style_pseudo_class (ST_WIDGET (actor), "focus");
@@ -393,6 +396,8 @@ clutter_text_focus_out_cb (ClutterText  *text,
   /* add a hint if the entry is empty */
   if (priv->hint && !strcmp (clutter_text_get_text (text), ""))
     {
+      priv->hint_visible = TRUE;
+
       clutter_text_set_text (text, priv->hint);
       st_widget_set_style_pseudo_class (ST_WIDGET (actor), "indeterminate");
     }
@@ -705,7 +710,10 @@ st_entry_get_text (StEntry *entry)
 {
   g_return_val_if_fail (ST_IS_ENTRY (entry), NULL);
 
-  return clutter_text_get_text (CLUTTER_TEXT (entry->priv->entry));
+  if (entry->priv->hint_visible)
+    return "";
+  else
+    return clutter_text_get_text (CLUTTER_TEXT (entry->priv->entry));
 }
 
 /**
@@ -731,6 +739,7 @@ st_entry_set_text (StEntry     *entry,
       && !HAS_FOCUS (priv->entry))
     {
       text = priv->hint;
+      priv->hint_visible = TRUE;
       st_widget_set_style_pseudo_class (ST_WIDGET (entry), "indeterminate");
     }
   else
@@ -739,6 +748,8 @@ st_entry_set_text (StEntry     *entry,
         st_widget_set_style_pseudo_class (ST_WIDGET (entry), "focus");
       else
         st_widget_set_style_pseudo_class (ST_WIDGET (entry), NULL);
+
+      priv->hint_visible = FALSE;
     }
 
   clutter_text_set_text (CLUTTER_TEXT (priv->entry), text);
@@ -786,8 +797,11 @@ st_entry_set_hint_text (StEntry     *entry,
 
   priv->hint = g_strdup (text);
 
-  if (!strcmp (clutter_text_get_text (CLUTTER_TEXT (priv->entry)), ""))
+  if (!strcmp (clutter_text_get_text (CLUTTER_TEXT (priv->entry)), "")
+      && !HAS_FOCUS (priv->entry))
     {
+      priv->hint_visible = TRUE;
+
       clutter_text_set_text (CLUTTER_TEXT (priv->entry), priv->hint);
       st_widget_set_style_pseudo_class (ST_WIDGET (entry), "indeterminate");
     }



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