dwlb

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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:
Msystray/snitem.c | 31++++++++++++++++++-------------
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;