From a56bc9d933c4e863854059f92346bf307ff18c6d Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Tue, 5 Apr 2011 16:17:52 -0400 Subject: [PATCH] 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 | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/st/st-label.c b/src/st/st-label.c index 1d9b13d0e..ce1130498 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 (ctext, text); + + g_object_notify (G_OBJECT (label), "text"); } - - clutter_text_set_text (CLUTTER_TEXT (priv->label), text); - - g_object_notify (G_OBJECT (label), "text"); } /**