[gnome-shell] st_label_set_text: no-op if the text is unchanged



commit a56bc9d933c4e863854059f92346bf307ff18c6d
Author: Dan Winship <danw gnome org>
Date:   Tue Apr 5 16:17:52 2011 -0400

    st_label_set_text: no-op if the text is unchanged
    
    If a caller sets an StLabel's text to what it already is (as, eg, the
    clock menu does), do nothing. Unless the label is editable, in which
    case, setting the text has a visible side effect (dropping the
    selection), so we don't optimize that out.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=645648

 src/st/st-label.c |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)
---
diff --git a/src/st/st-label.c b/src/st/st-label.c
index 1d9b13d..ce11304 100644
--- a/src/st/st-label.c
+++ b/src/st/st-label.c
@@ -376,21 +376,27 @@ st_label_set_text (StLabel     *label,
                    const gchar *text)
 {
   StLabelPrivate *priv;
+  ClutterText *ctext;
 
   g_return_if_fail (ST_IS_LABEL (label));
   g_return_if_fail (text != NULL);
 
   priv = label->priv;
+  ctext = CLUTTER_TEXT (priv->label);
 
-  if (priv->text_shadow_material != COGL_INVALID_HANDLE)
+  if (clutter_text_get_editable (ctext) ||
+      g_strcmp0 (clutter_text_get_text (ctext), text) != 0)
     {
-      cogl_handle_unref (priv->text_shadow_material);
-      priv->text_shadow_material = COGL_INVALID_HANDLE;
-    }
+      if (priv->text_shadow_material != COGL_INVALID_HANDLE)
+        {
+          cogl_handle_unref (priv->text_shadow_material);
+          priv->text_shadow_material = COGL_INVALID_HANDLE;
+        }
 
-  clutter_text_set_text (CLUTTER_TEXT (priv->label), text);
+      clutter_text_set_text (ctext, text);
 
-  g_object_notify (G_OBJECT (label), "text");
+      g_object_notify (G_OBJECT (label), "text");
+    }
 }
 
 /**



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