Hi friends,

Current Qt's implementation of QIcon::fromTheme violates xdg icon naming 
specification ( 
http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html 
).
By specification if icon "drive-removable-media-usb" is not found 
implementation should fallback to "drive-removable-media" and so on until the 
icon is not found. If icon is not found at this theme is should make lookup at 
parents' themes.

> The dash “-” character is used to separate levels of specificity
> in icon names, for all contexts other than MimeTypes. For instance,
> we use “input-mouse” as the generic item for all mouse devices,
> and we use “input-mouse-usb” for a USB mouse device. However,
> if the more specific item does not exist in the current theme, and
> does exist in a parent theme, the generic icon from the current
> theme is preferred, in order to keep consistent style. 

For example this makes possible to use most of icons provided by Oxygen theme 
(which has really specific icons like network-wireless-connected-50) with more 
generic fallbacks under with other themes (like network-wireless).

In C++ the possible workaround is to use something like 
QIcon::fromTheme("network-wireless-connected-50", 
QIcon::fromTheme("network-wireless-connected". 
QIcon::fromTheme("network-wireless", QIcon::fromTheme("network")))) but it's 
not the most efficient and elegant solution. And it still violates the 
specification in the case if:
1. Current theme contains icons "network-wireless-connected-50" and 
"network-wireless"
2. Parent's theme contains icons "network-wireless-connected-50"

By specification current theme's "network-wireless" icon should be choosed, but 
not the parent's "network-wireless-connected-50" for better user experience as 
current implementation does.

Also the pain starts if one would decide to change the icons theme at runtime 
(i.e. by changing KDE's settings). Original icon's names are already lost at 
this point (as we iterated by prefixes until the valid icon) so invalid or no 
icon will be chosen after the theme change.

In QML the situation is even worse, it's not possible at all to determine from 
QML if icon is correct one so it's totally impossible to do anything and it 
ruins my life :(

Was this done specially or it should be considered as a bug? If the first 
option what was the main idea?

I would like to implement the correct behavior by the following changes:
1. Never return fallback from QIcon::fromTheme if it is null. So it will be 
possible to show the icon once the correct theme will be shown.
2. Change the logic of QIconLoader::findIconHelper to fit the specification by 
adding check for fallback icons.

If the changes will be done and accepted is there any hope to have them in Qt 
5.2.* (so it will come once to Ubuntu Trusty)?

--
Ruslan Nigmatullin
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to