Bug 502273 - KIconLoader prefers PNG icons over SVG icons
Summary: KIconLoader prefers PNG icons over SVG icons
Status: CONFIRMED
Alias: None
Product: frameworks-kiconthemes
Classification: Frameworks and Libraries
Component: general (show other bugs)
Version: 6.12.0
Platform: Other Linux
: NOR normal
Target Milestone: ---
Assignee: Christoph Feck
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-04-01 12:18 UTC by pallaswept
Modified: 2025-04-04 12:26 UTC (History)
4 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description pallaswept 2025-04-01 12:18:23 UTC
SUMMARY
SVG icons are not used, if the theme contains PNG icons for that application.

STEPS TO REPRODUCE
1. Install an application with SVG and PNG icons
2. Change the SVG icon to something visually distinct (eg use another app's icon) so you can tell if it is being used at all
3. Restart plasma to apply the change

OBSERVED RESULT
SVG icon is not being used

EXPECTED RESULT
SVG icon is used

SOFTWARE/OS VERSIONS
Operating System: openSUSE Tumbleweed 20250329
KDE Plasma Version: 6.3.3
KDE Frameworks Version: 6.12.0
Qt Version: 6.8.2
Kernel Version: 6.13.8-1-default (64-bit)
Graphics Platform: Wayland
Processors: 24 × AMD Ryzen 9 5900X 12-Core Processor
Memory: 31.2 GiB of RAM
Graphics Processor: NVIDIA GeForce RTX 3090/PCIe/SSE2

ADDITIONAL INFORMATION
I really can't tell if this is a bug or a design flaw. I'm not even sure if it's a plasma thing, a frameworks thing, a qt thing or an XDG thing... Possibly all of the above.

Reading the XDG icon theme spec, it says that applications should ship with a 48x48 PNG, and also that it will search PNG format first, and that it will stop the search on the first hit.

This suggest that XDG's intention is that DEs ignore scalable SVGs in favour of scaling PNGs. In which case, Plasma appears to be compliant.

But it also says that applications could install SVGs so that nicely scaling icons are available. Which conflicts with all the above. And I feel like Plasma would want to be using SVGs wherever possible.

It also says it scans by directory, before scanning by file extension, which it obviously does (because that allows icons in the home dir to override those in the root) but even an SVG in a prior directory (such as in ~/.local/share/icons) will not be used if a PNG is present even in the later directory (such as /usr/share/icons/). So, that doesn't quite add up, either.

So I don't know. Any advice would be most welcome, I am a bit puzzled as to how this is meant to work, but I'm pretty sure it's not working optimally at the moment. Seems weird to have all these apps shipping SVG icons that don't get used.

I've come across this in attempt to help a dev package an app, and we don't know what icons to package. We'd like to package PNG for compatibility with other DE, but we'd like the SVG icons to be used when they'd look nicer. 

This also effects that app's facility for users to provide a custom icon, since any PNGs in the package, will mean that they now need to generate multiple fixed-size PNGs when it would be nice to just let them drop a single SVG.

Thanks for your advice.
Comment 1 TraceyC 2025-04-01 18:13:38 UTC
So we can more easily reproduce and investigate this, can you give us an example of an application you have seen this with?
Also, can you be more specific about where you're looking at the icon? Is this in the apps menu, on the panel as a shortcut, in the task manager when the app is running, for example?

Thanks.
Comment 2 pallaswept 2025-04-02 00:01:01 UTC
Thank you Tracey!

> So we can more easily reproduce and investigate this, can you give us an
> example of an application you have seen this with?

To be very specific, I am mostly testing with CoolerControl: https://gitlab.com/coolercontrol/coolercontrol

But I did of course test this with other apps and it's the same for everything I tried. It will work with anything that has an SVG and PNG icons.

To select an example from my system, the foot terminal is handy because it only has SVG and a single PNG of 48x48px. I can reproduce by these steps:

- In /usr/share/icons/hicolor/
- Rename scalable/apps/foot.svg to foot.svg.0 
- Make a duplicate of scalable/apps/gimp.svg
- Rename it to foot.svg (now foot should have gimp's icon)
- Restart plasma
- Foot has foot's icon
- Rename 48x48/apps/foot.png to foot.png.0
- Restart plasma
- Foot has gimp's icon

> Also, can you be more specific about where you're looking at the icon? Is
> this in the apps menu, on the panel as a shortcut, in the task manager when
> the app is running, for example?

All of the above. Icons within the application are not effected, but those in Plasma are subject to this behaviour. The panel icon is configured to use a symbolic icon and only an SVG is created, so I don't observe the behaviour there, but earlier when the symbolic icon was not used, it used the normal icon, and the behaviour was the same in all of the above places.
Comment 3 Nate Graham 2025-04-02 15:11:29 UTC
*** This bug has been marked as a duplicate of bug 493034 ***
Comment 4 pallaswept 2025-04-02 15:24:21 UTC
Nate is this a dupe of that? It seems kinda different. I get the same icon everywhere, they get two different ones, they use absolute paths, I don't, they change the desktop file, I don't... Sorry if I'm mistaken about this.
Comment 5 Nate Graham 2025-04-03 15:57:48 UTC
Yeah my bad, not the same thing.
Comment 6 TraceyC 2025-04-03 17:30:38 UTC
I tested on git-master, focusing on firefox and pidgin, which have .svg and .png icons and was able to replicate the bug with the Breeze Dark icon theme

**Test of renaming the png with Firefox**
- Set the bottom panel to 48px, left panel is at 54px
- Icon theme was Tela Dark
- Renamed /u/s/icons/hicolor/48x48/apps/firefox.png to firefox.png.bak
- Copied /u/s/icons/hicolor/48x48/apps/vlc-xmas.png  to firefox.png
- Restarted Plasma

Result: The icon for Firefox showed the Firefox logo correctly - ok

- Set the global theme (which also sets the icon theme) to Breeze Dark
Result: on the 54px panel the VLC icon is shown instead of the svg Firefox icon - not ok

**Test of renaming the svg with pidgin**
- Renamed hicolor/scalable/apps/pidgin.svg to pidgin.svg.bak
- Copy hicolor/scalable/apps/mpv.svg to pidgin.svg
Expect: When pidgin's buddy list is open, the panel icon should be the mpv icon (svg)

Result: The pidgin png icon is shown in both panels - not ok
Comment 7 Nate Graham 2025-04-03 19:54:26 UTC
Icon loading priorities are in KIconLoader which lives in the kiconthemes framework; moving there.
Comment 8 pallaswept 2025-04-03 20:35:29 UTC
(In reply to TraceyC from comment #6)
> I tested on git-master, focusing on firefox and pidgin, which have .svg and
> .png icons and was able to replicate the bug with the Breeze Dark icon theme

Oh nice one Tracey, thank you!

I found it interesting that Tela did not suffer this, at first I thought maybe it was a hint of a workaround. I realised that Tela has a built-in firefox icon.

You showed me part of this I had not tested - It will prefer any icon from the current theme, over any icon from the fallback (hicolor) theme, ie
PNG(this theme)  >  SVG(this theme)  >  PNG(fallback theme)  >  SVG(fallback theme) 

Reading it again I can see that, once again, this matches the spec https://specifications.freedesktop.org/icon-theme-spec/latest/#icon_lookup

More and more, I feel like this is actually a case of KDE (or is it KF or Qt? I couldn't figure it out) being perfectly compliant with XDG's spec and the spec prefers PNG over SVG. As in, intentional, so not really a bug... Though I'm not sure it was actually the intended result, that SVG icons go un-used.

(In reply to Nate Graham from comment #7)
> Icon loading priorities are in KIconLoader which lives in the kiconthemes framework; moving there.

Thanks Nate!
PS sorry to bother you in both issues, I wasn't sure if you would actually get the message from this resolved issue, since I imagine there's a lot of 'noise' in those for you. I hope that wasn't too annoying.
Comment 9 Nate Graham 2025-04-04 12:26:34 UTC
Maybe a tiny bit, but by a freak coincidence I had accidentally deleted the email where you first complained that I did it wrong, so getting a second one in the other bug report actually saved me time since I didn't have to go dig around in the trash. :) 

I need to sit down with the icon spec docs again to confirm what you're saying, but it wouldn't surprise me at all if we're in a state that's "compliant, but not ideal".