Bug 509053 - Ghidra icon using .ico file is low-res in Kickoff app launcher but crisp in Task Manager
Summary: Ghidra icon using .ico file is low-res in Kickoff app launcher but crisp in T...
Status: CONFIRMED
Alias: None
Product: plasmashell
Classification: Plasma
Component: Application Launcher (Kickoff) widget (other bugs)
Version First Reported In: 6.4.4
Platform: Arch Linux Linux
: NOR normal
Target Milestone: 1.0
Assignee: Plasma Bugs List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-09-03 06:54 UTC by gudvinr+kde
Modified: 2025-10-02 18:54 UTC (History)
6 users (show)

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


Attachments
ghidra.desktop (276 bytes, application/x-desktop)
2025-09-03 06:54 UTC, gudvinr+kde
Details
task manager (7.08 KB, image/png)
2025-09-19 15:42 UTC, gudvinr+kde
Details
kicker (32.23 KB, image/png)
2025-09-19 15:42 UTC, gudvinr+kde
Details
ghidra icon (157.32 KB, image/x-icon)
2025-10-02 16:39 UTC, Nate Graham
Details

Note You need to log in before you can comment on or make changes to this bug.
Description gudvinr+kde 2025-09-03 06:54:58 UTC
Created attachment 184658 [details]
ghidra.desktop

SUMMARY

https://github.com/NationalSecurityAgency/ghidra/

STEPS TO REPRODUCE
1. Download latest ghidra from https://github.com/NationalSecurityAgency/ghidra/
2. Unpack into /opt/ghidra/
3. Copy .desktop file from attachment to ~/.local/share/applications/
4. Run update-desktop-database ~/.local/share/applications/
5. Search "ghidra" in kicker (or krunner)
6. Pin to task switcher

OBSERVED RESULT

Icon in kicker is pixelated, icon in task switcher looks good.

EXPECTED RESULT

Both icons should look crisp.

SOFTWARE/OS VERSIONS
Operating System: Arch Linux 
KDE Plasma Version: 6.4.4
KDE Frameworks Version: 6.17.0
Qt Version: 6.9.2
Kernel Version: 6.16.4-arch1-1 (64-bit)
Graphics Platform: Wayland
Graphics Processor 1: AMD Radeon RX Vega M GL Graphics
Graphics Processor 2: Mesa Intel® HD Graphics 630

ADDITIONAL INFORMATION
Comment 1 Nate Graham 2025-09-17 18:04:52 UTC
If you open /opt/ghidra/support/ghidra.ico in GIMP, do you see that it has multiple layers, and the top one is a small one rather than a big one?
Comment 2 gudvinr+kde 2025-09-17 18:34:10 UTC
I gon't have GIMP but icotool shows this:

ghidra.ico: x_pels_per_meter field in bitmap should be zero
ghidra.ico: y_pels_per_meter field in bitmap should be zero
--icon --index=1 --width=16 --height=16 --bit-depth=32 --palette-size=0
ghidra.ico: x_pels_per_meter field in bitmap should be zero
ghidra.ico: y_pels_per_meter field in bitmap should be zero
--icon --index=2 --width=24 --height=24 --bit-depth=32 --palette-size=0
ghidra.ico: x_pels_per_meter field in bitmap should be zero
ghidra.ico: y_pels_per_meter field in bitmap should be zero
--icon --index=3 --width=32 --height=32 --bit-depth=32 --palette-size=0
ghidra.ico: x_pels_per_meter field in bitmap should be zero
ghidra.ico: y_pels_per_meter field in bitmap should be zero
--icon --index=4 --width=40 --height=40 --bit-depth=32 --palette-size=0
ghidra.ico: x_pels_per_meter field in bitmap should be zero
ghidra.ico: y_pels_per_meter field in bitmap should be zero
--icon --index=5 --width=48 --height=48 --bit-depth=32 --palette-size=0
ghidra.ico: x_pels_per_meter field in bitmap should be zero
ghidra.ico: y_pels_per_meter field in bitmap should be zero
--icon --index=6 --width=64 --height=64 --bit-depth=32 --palette-size=0
ghidra.ico: x_pels_per_meter field in bitmap should be zero
ghidra.ico: y_pels_per_meter field in bitmap should be zero
--icon --index=7 --width=128 --height=128 --bit-depth=32 --palette-size=0
--icon --index=8 --width=256 --height=256 --bit-depth=32 --palette-size=0
Comment 3 Nate Graham 2025-09-18 19:24:22 UTC
Yep, the smallest one is in the top layer, as I expected to see

I guess this is a bug in the .ico file extractor *somewhere*; it should choose the largest size, or at least the one most appropriate for the requested size, rather than the top layer.

Can you attach a screenshot showing how it looks in both places on your system?
Comment 4 gudvinr+kde 2025-09-19 15:42:19 UTC
Created attachment 185103 [details]
task manager
Comment 5 gudvinr+kde 2025-09-19 15:42:38 UTC
Created attachment 185104 [details]
kicker
Comment 6 Nate Graham 2025-09-23 15:25:50 UTC
Very interesting; that's not what I would have expected. Both use Kirigami.Icon under the hood, so it's possible what's going on here is that one UI happens to have the icon at an exact size that the .ico file has a version for, whereas the other one does not, so it falls back to the top layer, which is small.

That's speculation on my side though.
Comment 7 Albert Astals Cid 2025-09-23 22:58:19 UTC
Why did you assign this to kimageformats?
Comment 8 Nate Graham 2025-09-23 23:01:52 UTC
Speculation that the .ico file format handler returns a non-ideal layer. But it's kind of a guess as I'm not super familiar with this stack. If this is the wrong place for the bug report, feel free to move it to the right place.
Comment 9 Albert Astals Cid 2025-09-23 23:11:25 UTC
There is no ico handler in kimageformats, it's part of qtbase.
Comment 10 Nate Graham 2025-09-25 13:55:22 UTC Comment hidden (spam)
Comment 11 Nate Graham 2025-09-25 15:17:40 UTC
Ok, if my speculation is correct, then I guess it's a Qt bug. Do you think my speculation is indeed correct?
Comment 12 Albert Astals Cid 2025-09-26 22:34:51 UTC
With the information of this bug and having done no debugging at all, i don't think this is a Qt bug.

It works in one place and does not work in another.

It seems that if it was a bug in Qt it would not work anywhere.

For me it seems a bug in kickoff (or it's dependency chain) that should be doing the same that the task switcher is doing to get the proper rendering/contents.
Comment 13 Nate Graham 2025-10-02 16:33:13 UTC
Both are using Kirigami.Icon to display the icons.

Here are the the only differences in the implementation:
- Kickoff sets `animated: false` and `selected: [some condition]`
- Task Manager sets `active: [some condition]`

I wonder if it's `animated: false`. I'll look into this further.
Comment 14 Nate Graham 2025-10-02 16:39:21 UTC
Created attachment 185461 [details]
ghidra icon

If I make the Kickoff implementation and size identical to those of Task Manager, I can still reproduce the icon being blurry in Kickoff but crisp in Task Manager. I'm at a loss to explain why at this point.

I'm attaching the icon that exhibits the problem so someone smarter can figure it out.
Comment 15 David Edmundson 2025-10-02 18:42:53 UTC
>Both are using Kirigami.Icon to display the icons.

I doubt it. The task manager would prefer the X provided window icon direct from the application if available
Comment 16 Nate Graham 2025-10-02 18:54:03 UTC
They both are on the QML side.

It's possible the task manager has a more complicated C++ underbelly to get the icon.