icon-theme-spec: Inherits=

James Richard Tyrer tyrerj at acm.org
Sun Oct 16 17:26:11 BST 2005


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"?

> 
>> My experimental icon theme:
>> 
>> http://www.kde-look.org/content/show.php?content=27410
>> 
>> has:
>> 
>> Inherits=kdeclassic,hicolor_1,crystalsvg
>> 
>> where "hicolor_1" is a link:
>> 
>> hicolor_1 -> hicolor
>> 
>> to avoid another problem.
> 
> 
> You shouldn't need to create a symlink to hicolor, nor should you
> need to provide hicolor in the Inherits= list for your theme, as it
> must be the absolute last theme in the theme tree, according to the
> spec.

Yes, but ... (tm).  In this case, I need for it to search: "hicolor" and
then if no HiColor icon is available to then search "crystalsvg".  This
is necessary on KDE because we do not have HiColor for all icons.

> I /think/ there might be a bug with this in the KDE icon theme code.
> In trying to get Tango working across both current GNOME and KDE
> naming, several things have come up that lead me to believe there are
> a number of bugs in KDE's handling of icon themes with regards to the
> specification.
> 
> 
>> The KDEClassic theme has:
>> 
>> Inherits=default
>> 
>> and this does not work as expected so it is necessary to modify 
>> KDEClassic as stated on KDE-Look for it to work as expected.
> 
> 
> What is the expected behavior here? Do you have a theme installed 
> called "default"?
> 
On KDE, default: "default" is a link that currently points to:
"crystalsvg".
> 
>> Specifically, what I expect is that the icon loader will search:
>> 
>> 1.	usr_hicolor 
 >> 2.	kdeclassic
 >> 3.	hicolor_1 -> hicolor
 >> 4.	crystalsvg
>> 
>> And then see what "kdeclassic" inherits.
> 
> It should behave like dependencies in the packaging system. For
> example, when you have a program being packaged, libraries which are
> linked to by libraries that the program links to, become implicit
> dependencies of the program in question. Likewise, themes which are
> inherited from themes that your theme inherits from, become implicit
> inheritances of your theme. The structure is in fact a tree, and not
> a flat list, as you expect, because of this. When a theme gets
> parsed, all of it is parsed, including Inherits, before the next
> theme in the sibling list is parsed. It would be a bit of a hack to
> do otherwise, I think.
> 
Unfortunately, as I found out, when it works this way, there is no way 
for a theme to have explicit control of the order of inheritance.  The 
KDEClassic theme contains: "Inherits=default" and: "default" is a link 
to: "crystalsvg" so it searches: "crystalsvg" before it searches: 
"hicolor" which is clearly not what I want or need.

OTOH, it is possible that this is a KDE error in having KDEClassic 
inherit: "default" (which is currently a link to: "crystalsvg"). 
Perhaps that should be in the HiColor theme so that CrystalSVG is used 
if there is no HiColor icon for fall back.
> 
>> However, it does not work this way.  It appears that unless
>> KDEClassic is modified that #3 is crystalsvg and this is not the
>> expected behavior.
> 
> 
> I think that you mean unless you create the hicolor_1 -> hicolor, or
> in turn insert "hicolor" in your list before crystalsvg, that this is
> the case, or that you are expecting "default" to be an internal alias
> for "hicolor". 

No, on KDE, it ("default") is an explicit alias for "crystalsvg".

> The example in the specification mentions "default",
> however, the specification itself does not mention "default" being an
> alias to "hicolor" in any other section. I believe this is causing a
> bit of confusion, as it defines the base theme to be "hicolor", which
> in turn people seem to assume means that the "default" theme is
> "hicolor", which is false.

Yes, this is a source of confusion, but in this case: "default" points 
to "crystalsvg".

-- 
JRT



More information about the kde-core-devel mailing list