No working icons for UWP apps on Windows
GLib doesn't really handle icons most of the time, just remembers metadata and passes it along. Therefore, this may be an issue that should be fixed in GTK (and anything that uses GIcon), but the process starts with GLib, so let's start here.
GLib reads the registry and will sometimes find icon descriptions in it. If an icon description has the form of PATHTOFILE,NUMBER
, then later GTK will be able to load this icon by loading the PATHTOFILE
binary as a resource (it's an .exe file or a .dll), and then loading the icon number NUMBER
from that resource. That seems to work.
UWP apps don't store icons that way. Instead we may get a resource reference, like @{Microsoft.Windows.Photos_2020.20110.11001.0_x64__8wekyb3d8bbwe?ms-resource://Microsoft.Windows.Photos/Files/Assets/PhotosAppList.png}
. SHLoadIndirectString()
can be used on this string to turn it into a file path (something like C:\Program Files\WindowsApps\Microsoft.Windows.Photos_2020.20110.11001.0_x64__8wekyb3d8bbwe\Assets\PhotosAppList.png
), pointing to a PNG file.
However, that file does not exist. Instead we have the following files:
PhotosAppList.contrast-black_scale-200.png
PhotosAppList.contrast-black_targetsize-16.png
PhotosAppList.contrast-black_targetsize-20.png
PhotosAppList.contrast-black_targetsize-24.png
PhotosAppList.contrast-black_targetsize-256.png
PhotosAppList.contrast-black_targetsize-30.png
PhotosAppList.contrast-black_targetsize-32.png
PhotosAppList.contrast-black_targetsize-36.png
PhotosAppList.contrast-black_targetsize-40.png
PhotosAppList.contrast-black_targetsize-48.png
PhotosAppList.contrast-black_targetsize-60.png
PhotosAppList.contrast-black_targetsize-64.png
PhotosAppList.contrast-black_targetsize-72.png
PhotosAppList.contrast-black_targetsize-80.png
PhotosAppList.contrast-black_targetsize-96.png
PhotosAppList.contrast-white_scale-200.png
PhotosAppList.contrast-white_targetsize-16.png
PhotosAppList.contrast-white_targetsize-20.png
PhotosAppList.contrast-white_targetsize-24.png
PhotosAppList.contrast-white_targetsize-256.png
PhotosAppList.contrast-white_targetsize-30.png
PhotosAppList.contrast-white_targetsize-32.png
PhotosAppList.contrast-white_targetsize-36.png
PhotosAppList.contrast-white_targetsize-40.png
PhotosAppList.contrast-white_targetsize-48.png
PhotosAppList.contrast-white_targetsize-60.png
PhotosAppList.contrast-white_targetsize-64.png
PhotosAppList.contrast-white_targetsize-72.png
PhotosAppList.contrast-white_targetsize-80.png
PhotosAppList.contrast-white_targetsize-96.png
PhotosAppList.scale-200.png
PhotosAppList.targetsize-16.png
PhotosAppList.targetsize-16_altform-lightunplated.png
PhotosAppList.targetsize-16_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-16_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-16_altform-unplated.png
PhotosAppList.targetsize-16_altform-unplated_contrast-black.png
PhotosAppList.targetsize-16_altform-unplated_contrast-white.png
PhotosAppList.targetsize-20.png
PhotosAppList.targetsize-20_altform-lightunplated.png
PhotosAppList.targetsize-20_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-20_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-20_altform-unplated.png
PhotosAppList.targetsize-20_altform-unplated_contrast-black.png
PhotosAppList.targetsize-20_altform-unplated_contrast-white.png
PhotosAppList.targetsize-24.png
PhotosAppList.targetsize-24_altform-lightunplated.png
PhotosAppList.targetsize-24_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-24_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-24_altform-unplated.png
PhotosAppList.targetsize-24_altform-unplated_contrast-black.png
PhotosAppList.targetsize-24_altform-unplated_contrast-white.png
PhotosAppList.targetsize-256.png
PhotosAppList.targetsize-256_altform-lightunplated.png
PhotosAppList.targetsize-256_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-256_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-256_altform-unplated.png
PhotosAppList.targetsize-256_altform-unplated_contrast-black.png
PhotosAppList.targetsize-256_altform-unplated_contrast-white.png
PhotosAppList.targetsize-30.png
PhotosAppList.targetsize-30_altform-lightunplated.png
PhotosAppList.targetsize-30_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-30_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-30_altform-unplated.png
PhotosAppList.targetsize-30_altform-unplated_contrast-black.png
PhotosAppList.targetsize-30_altform-unplated_contrast-white.png
PhotosAppList.targetsize-32.png
PhotosAppList.targetsize-32_altform-lightunplated.png
PhotosAppList.targetsize-32_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-32_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-32_altform-unplated.png
PhotosAppList.targetsize-32_altform-unplated_contrast-black.png
PhotosAppList.targetsize-32_altform-unplated_contrast-white.png
PhotosAppList.targetsize-36.png
PhotosAppList.targetsize-36_altform-lightunplated.png
PhotosAppList.targetsize-36_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-36_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-36_altform-unplated.png
PhotosAppList.targetsize-36_altform-unplated_contrast-black.png
PhotosAppList.targetsize-36_altform-unplated_contrast-white.png
PhotosAppList.targetsize-40.png
PhotosAppList.targetsize-40_altform-lightunplated.png
PhotosAppList.targetsize-40_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-40_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-40_altform-unplated.png
PhotosAppList.targetsize-40_altform-unplated_contrast-black.png
PhotosAppList.targetsize-40_altform-unplated_contrast-white.png
PhotosAppList.targetsize-48.png
PhotosAppList.targetsize-48_altform-lightunplated.png
PhotosAppList.targetsize-48_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-48_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-48_altform-unplated.png
PhotosAppList.targetsize-48_altform-unplated_contrast-black.png
PhotosAppList.targetsize-48_altform-unplated_contrast-white.png
PhotosAppList.targetsize-60.png
PhotosAppList.targetsize-60_altform-lightunplated.png
PhotosAppList.targetsize-60_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-60_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-60_altform-unplated.png
PhotosAppList.targetsize-60_altform-unplated_contrast-black.png
PhotosAppList.targetsize-60_altform-unplated_contrast-white.png
PhotosAppList.targetsize-64.png
PhotosAppList.targetsize-64_altform-lightunplated.png
PhotosAppList.targetsize-64_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-64_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-64_altform-unplated.png
PhotosAppList.targetsize-64_altform-unplated_contrast-black.png
PhotosAppList.targetsize-64_altform-unplated_contrast-white.png
PhotosAppList.targetsize-72.png
PhotosAppList.targetsize-72_altform-lightunplated.png
PhotosAppList.targetsize-72_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-72_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-72_altform-unplated.png
PhotosAppList.targetsize-72_altform-unplated_contrast-black.png
PhotosAppList.targetsize-72_altform-unplated_contrast-white.png
PhotosAppList.targetsize-80.png
PhotosAppList.targetsize-80_altform-lightunplated.png
PhotosAppList.targetsize-80_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-80_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-80_altform-unplated.png
PhotosAppList.targetsize-80_altform-unplated_contrast-black.png
PhotosAppList.targetsize-80_altform-unplated_contrast-white.png
PhotosAppList.targetsize-96.png
PhotosAppList.targetsize-96_altform-lightunplated.png
PhotosAppList.targetsize-96_altform-lightunplated_contrast-black.png
PhotosAppList.targetsize-96_altform-lightunplated_contrast-white.png
PhotosAppList.targetsize-96_altform-unplated.png
PhotosAppList.targetsize-96_altform-unplated_contrast-black.png
PhotosAppList.targetsize-96_altform-unplated_contrast-white.png
That naming scheme is poorly explained in MSDN:
Some guy with a (weirdly-hosted) blog explains some of the more exotic parts:
https://blog.mzikmund.com/2015/09/en-accent-color-in-windows-10-app-taskbar-icons/
https://blog.mzikmund.com/2018/11/supporting-light-theme-taskbar-icons-in-uwp/
Questions:
- Should GLib do anything with this? Or should we pass that
@{...}
string to GTK and let it deal with it? - If GLib should do something, what would it be? Create a GIcon subclass that is capable of following MS icon spec to load the most appropriate version of an icon (need to map from MS icon spec to Gnome icon spec)? Alternatively GTK can do the same thing instead.