From fe991ac7c0e257e19d34aa3b9800323aa828970a Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Tue, 9 Jul 2013 16:46:35 +0100 Subject: clutter-text: prevent text buffer creation if not needed When allocating or asking for preferred width/height on a ClutterText, it can notify a change on buffer/text/max-length if no text has been set. https://bugzilla.gnome.org/show_bug.cgi?id=703882 (cherry picked from commit eed94960562693e489354afb2a78a355301515fa) Signed-off-by: Emmanuele Bassi --- clutter/clutter-text.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/clutter/clutter-text.c b/clutter/clutter-text.c index 0cfb63f69..b5d1198d7 100644 --- a/clutter/clutter-text.c +++ b/clutter/clutter-text.c @@ -341,6 +341,18 @@ clutter_text_clear_selection (ClutterText *self) } } +static gboolean +clutter_text_is_empty (ClutterText *self) +{ + if (self->priv->buffer == NULL) + return TRUE; + + if (clutter_text_buffer_get_length (self->priv->buffer) == 0) + return TRUE; + + return FALSE; +} + static gchar * clutter_text_get_display_text (ClutterText *self) { @@ -348,6 +360,13 @@ clutter_text_get_display_text (ClutterText *self) ClutterTextBuffer *buffer; const gchar *text; + /* short-circuit the case where the buffer is unset or it's empty, + * to avoid creating a pointless TextBuffer and emitting + * notifications with it + */ + if (clutter_text_is_empty (self)) + return g_strdup (""); + buffer = get_buffer (self); text = clutter_text_buffer_get_text (buffer); -- cgit v1.2.1