commit 775a85cfa3034b4c70d8348c2fd882cc765f0c6a
parent a85efa6915950f7dd0415b66380942261fd4a64d
Author: Janne Veteläinen <janne.vetelainen@elisanet.fi>
Date: Thu, 23 May 2024 03:16:08 +0300
Don't traverse cache when icon didn't change
Diffstat:
1 file changed, 18 insertions(+), 13 deletions(-)
diff --git a/systray/snitem.c b/systray/snitem.c
@@ -203,12 +203,6 @@ get_paintable_from_name(const char *iconname, int32_t iconsize)
return paintable;
}
-int
-find_cached_name(CachedIcon *cicon, const char *iconname)
-{
- return strcmp(cicon->iconname, iconname);
-}
-
static void
sn_item_proxy_new_iconname_handler(GObject *obj, GAsyncResult *res, void *data)
{
@@ -236,12 +230,17 @@ sn_item_proxy_new_iconname_handler(GObject *obj, GAsyncResult *res, void *data)
g_variant_get(iconname_v, "&s", &iconname);
g_variant_unref(retvariant);
- GSList *elem = g_slist_find_custom(self->cachedicons, iconname, (GCompareFunc)find_cached_name);
if (strcmp(iconname, self->iconname) == 0) {
// Icon didn't change
- ;
- } else if (elem) {
+ g_variant_unref(iconname_v);
+ g_object_unref(self);
+ return;
+ }
+
+ GSList *elem = g_slist_find_custom(self->cachedicons, iconname, (GCompareFunc)strcmp);
+
+ if (elem) {
// Cache hit
CachedIcon *cicon = (CachedIcon*)elem->data;
self->iconname = cicon->iconname;
@@ -300,12 +299,18 @@ sn_item_proxy_new_pixmaps_handler(GObject *obj, GAsyncResult *res, void *data)
GVariant *pixmap = select_icon_by_size(newpixmaps, self->iconsize);
- GSList *elem = g_slist_find_custom(self->cachedicons, pixmap, (GCompareFunc)find_cached_pixmap);
-
if (g_variant_equal(pixmap, self->iconpixmap)) {
// Icon didn't change
- ;
- } else if (elem) {
+ g_variant_unref(pixmap);
+ g_variant_unref(newpixmaps);
+ g_variant_unref(retvariant);
+ g_object_unref(self);
+ return;
+ }
+
+ GSList *elem = g_slist_find_custom(self->cachedicons, pixmap, (GCompareFunc)find_cached_pixmap);
+
+ if (elem) {
// Cache hit
CachedIcon *cicon = (CachedIcon*)elem->data;
self->iconpixmap = cicon->iconpixmap;