icon-theme-spec: Inherits=
James Richard Tyrer
tyrerj at acm.org
Wed Oct 19 03:52:07 BST 2005
Antonio Larrosa wrote:
> On Sunday 16 October 2005 18:26, James Richard Tyrer wrote:
>
>>Rodney Dawes wrote:
>>
>>>On Sun, 2005-10-16 at 02:00 -0700, James Richard Tyrer wrote:
>>>
>>>>The spec states:
>>>>
>>>>The name of the theme that this theme inherits from. If an icon
>>>>name is not found in the current theme, it is searched for in the
>>>>inherited theme (and recursively in all the inherited themes).
>>>>
>>>>But exactly how should the inheritance tree be parsed?
>>>
>>>Let's say for example the "Foo" theme has Inherits=gnome,kdeclassic.
>>>And, the kdeclassic theme has Inherits=default.
>>>
>>>The way this *should* work, is that an icon is checked for in Foo,
>>>gnome, kdeclassic, default, and then hicolor. If "default" does not
>>>exist as a theme (it is NOT an internal alias for hicolor), then the
>>>order would be Foo, gnome, kdeclassic, hicolor. I am pretty sure that
>>> this is the behavior.
>>
>>But, my question is what happens if: "Inherits=kdeclassic,gnome". Which
>>should be checked first: "default" or "gnome"?
>>
>
>
> From the comments in the (KDE iconloader) code:
>
> Multiple inheritance is a broken concept on icon themes, so
> the next code doesn't support it on purpose because in fact, it was
> never supported at all.
I'm not certain exactly what that means.
The spec defines: "Inherits" as a list of "strings" so the spec requires
multiple inheritance, and recursive inheritance is required:
<<
The name of the theme that this theme inherits from. If an icon name is
not found in the current theme, it is searched for in the inherited
theme (and recursively in all the inherited themes).
>>
I accept this as correct, but the rest of it has issues:
<<
If no theme is specified implementations are required to add the
"hicolor" theme to the inheritance tree.
>>
IIUC, the "hicolor" theme should always be added to the end of the
search list
And this:
<<
An implementation may optionally add other default themes in between the
last specified theme and the hicolor theme.
>>
appears to be an issue. Adding other default themes doesn't look like a
good idea.
IAC, it appears that "hicolor" should always be added to the end of the
icons search list: d->mThemesInTree. AFAICT, KDE does not do this. :-(
After further testing, I have come to the conclusion that Rodney is
correct and the KDE code is broken -- it works correctly in some cases
but does very strange things in other cases. IMHO (as an engineer) code
that acts that way was not correctly designed. It needs to be fixed
(probably first designed and then recoded).
So I have to totally disagree with Antonio, the problem is not the
concept, it is the execution that is broken in KDE.
I suggest that it is possible that recursion is not a good idea, but
that is the current standard. So, what the KDE code needs to do is
prepare a search list by recursion eliminating duplicates, but no
special treatment of "hicolor", as it appears the current code is
supposed to do. Then, "hicolor" and then the theme pointed to by the:
"default.kde" link should be added on to the end of this list unless
they are duplicates. Then some of the: "index.theme" files will need to
have "hicolor" or "default" removed.
I note that having a fall back for the fall back is possibly something
that should be addressed in the standard. There is a problem in KDE
where there is better support for CrystalSVG (as the current
default.kde) than there is for KDEClassic and almost nonexistent support
for HiColor. As a result, falling back to HiColor doesn't really work.
I think that we should fully support the HiColor theme, but I seem to
be out voted. So, when looking for an icon for a KDE app, falling back
to HiColor doesn't do much good. It would be better if there was an app
specific second fall back icon theme based on the desktop that the app
belonged to. This is mostly an issue for menu icons.
--
JRT
More information about the kde-core-devel
mailing list