st-icon: Don't cause a redraw by replacing the icon with itself

Check if the two icons match before setting a new icon, if they
do don't do anything.

Based on patch from Owen Taylor <otaylor@fishsoup.net>

https://bugzilla.gnome.org/show_bug.cgi?id=694988
This commit is contained in:
Adel Gadllah 2013-03-02 21:50:47 +01:00
parent 26966b2bf3
commit a6b49fe7d6

View File

@ -534,23 +534,32 @@ void
st_icon_set_icon_name (StIcon *icon, st_icon_set_icon_name (StIcon *icon,
const gchar *icon_name) const gchar *icon_name)
{ {
StIconPrivate *priv; StIconPrivate *priv = icon->priv;
GIcon *gicon = NULL;
g_return_if_fail (ST_IS_ICON (icon)); g_return_if_fail (ST_IS_ICON (icon));
priv = icon->priv; if (icon_name)
gicon = g_themed_icon_new_with_default_fallbacks (icon_name);
if (g_icon_equal (priv->gicon, gicon)) /* do nothing */
{
g_object_unref (gicon);
return;
}
if (priv->gicon) if (priv->gicon)
g_object_unref (priv->gicon); g_object_unref (priv->gicon);
if (icon_name) g_object_freeze_notify (G_OBJECT (icon));
priv->gicon = g_themed_icon_new_with_default_fallbacks (icon_name);
else priv->gicon = gicon;
priv->gicon = NULL;
g_object_notify (G_OBJECT (icon), "gicon"); g_object_notify (G_OBJECT (icon), "gicon");
g_object_notify (G_OBJECT (icon), "icon-name"); g_object_notify (G_OBJECT (icon), "icon-name");
g_object_thaw_notify (G_OBJECT (icon));
st_icon_update (icon); st_icon_update (icon);
} }
@ -579,7 +588,7 @@ st_icon_set_gicon (StIcon *icon, GIcon *gicon)
g_return_if_fail (ST_IS_ICON (icon)); g_return_if_fail (ST_IS_ICON (icon));
g_return_if_fail (gicon == NULL || G_IS_ICON (gicon)); g_return_if_fail (gicon == NULL || G_IS_ICON (gicon));
if (icon->priv->gicon == gicon) /* do nothing */ if (g_icon_equal (icon->priv->gicon, gicon)) /* do nothing */
return; return;
if (icon->priv->gicon) if (icon->priv->gicon)