For the list's benefit, here's a log of a technical discussion
we had in #kde-devel as an extension of this thread that went
over various aspects of the problem and possible solutions (I've
removed some unrelated parts):
[23:33] <tosky> uhm, I have no idea of how it works in details, but I
understood it's about missing icon if you use a normal KF5 application
outside Plasma
[23:35] <hein> tosky: and solving that by adding an API to KF5 that
overrides the spec fallback with a random other icon theme that isn't a
dependency of KF5 seems like a layering violation to me
[23:35] <hein> tosky: it also means KF5 apps would behave differently
from Qt apps, which wasn't the goal
[23:36] <tosky> hein: are you saying that setting those icons as part of
the hicolor theme should solve the problem?
[23:37] <hein> tosky: no, that's what the fd.o spec says
[23:37] <hein> tosky: which is what KF5 targets
[23:38] <hein> tosky: having a
fetchIconFromWellKnownThemeThatMayOrMayNotBeInstalled() API doesn't seem
like a solution to me
[23:40] <hein> tosky: if an app really really wants some sort of private
overlay they could also use QIcon::setThemeSearchPaths and
QIcon::setThemeName
[23:40] <tsdgeos> better than fetchIconFromThemeThatIsNotATheme
[23:40] <tsdgeos> at least if you're lucky you'll get an icon :D
[23:43] <tsdgeos> hein: apachelogger actually said that yes, he is ok
with the regression, and i actually am not sure i disagree with it
[...]
[23:46] <apachelogger> FWIW as I noted, I think windows and osx is the
bigger question mark
[23:46] <hein> apachelogger: I think I vaguely vaguely vaguely remember
Pov talking about this re KF5 on Windows
[23:46] <apachelogger> in particular since the docs say terrible things
about fromTheme -> Note: By default, only X11 will support themed icons.
In order to use themed icons on Mac and Windows, you will have to bundle
a compliant theme in one of your themeSearchPaths() and set the
appropriate themeName().
[23:46] <hein> apachelogger: I think their copy of Qt hardcodes the KDE
platform plugin
[23:46] <hein> or something like that
[23:47] <apachelogger> sounds scary xD
[23:47] <hein> but I still think that this stuff needs to happen on the
Qt level instead of saying "KF5 apps should use a different API and
behave differently from Qt apps again" is the right fix
[23:50] <apachelogger> *nod*
[23:51] <jpwhiting> hein: that may be, but what should such an api at
the Qt level look like ?
[23:51] <hein> it could be as easy as adding a QIcon::setFallbackThemeName
[23:51] <jpwhiting> which probably wont work on win/osx, right ?
[23:51] <hein> or a list of fallback theme names
[23:51] <jpwhiting> since they don't use icon themes, etc.
[23:51] <jpwhiting> or do they
[23:51] <hein> this sounds horrible, but is effectively what tsdgeos
wants if i understand him right
[23:51] <jpwhiting> but QIcon::fromTheme doesn't recognize/work with those
[23:51] <hein> tsdgeos' stance comes down to "I'm the app dev and i know
these icons i want are only in oxygen"
[23:51] <hein> which is implicitly a per-app thing
[23:52] <jpwhiting> yep
[23:52] <jpwhiting> hein: the porting guide for porting applications to
android/etc. suggests including all assets like that inside a qrc, I
wonder if we should adopt that practice on desktop also
[23:53] <jpwhiting> the drawback to that approach is that the assets
can't be shared between different applications
[23:53] <jpwhiting> i.e. the flags kgeography uses/ships can't be used
in other places that also want to display flags, etc.
[23:53] <hein> jpwhiting: that's what i meant with the "private overlay
thing" earlier and setThemeSearchPaths/setThemeName
[23:54] <hein> jpwhiting: the problem with using setThemeName is that
then you override the QPA mechanism
[23:54] <frinring> also means that one needs to know all icons/resources
that the used (framework) libs use
[23:54] <hein> jpwhiting: so semantically it would need to be a
setFallbackThemeName that just adds one more thing between QPA + hicolor
or sth
[23:54] <tsdgeos> note i'm not speaking about any app specific icon
[23:54] <tsdgeos> have a look at the strace
[23:54] <tsdgeos> it's document-open
[23:54] <hein> jpwhiting: which is effectively what KIcon does
[23:54] <tsdgeos> and those things
[23:54] <tsdgeos> hicolor is not a theme and is not supposed to be
[23:54] <tsdgeos> i guess it's just that linux sucks
[23:54] <hein> tsdgeos: in what DE?
[23:54] <tsdgeos> and what i want can't be solved
[23:55] <hein> unity? why does unity not install a QPA plugin if it's
using Qt anyway?
[23:55] <apachelogger> hein: an intermediate fallback might be cheating
[23:55] <tsdgeos> hein: what does it matter which DE it is?
[23:55] <tsdgeos> hein: unity is not using Qt yet
[23:55] <hein> tsdgeos: because Qt's platform abstraction mechanism cares
[23:55] <hein> what DE it is
[23:55] <jpwhiting> yeah, it shouldn't matter which DE we are using to
run our application
[23:55] <hein> jpwhiting: then convince Qt of that
[23:55] <hein> QPA plugins is the integration mechanism it provides to ISVs
[23:55] <jpwhiting> well, Qt wants to "look right" on every platform
[23:56] <jpwhiting> look native, etc.
[23:56] <hein> jpwhiting: platforms also want Qt to look right on them
[23:56] <jpwhiting> yep
[23:56] <tsdgeos> hein: probably that's the culprit, does linux has not
a DE abstract way of setting the default icon theme?
[23:56] <jpwhiting> so the "correct" solution is install an icon for
every theme/qpa possible ?
[23:56] <hein> i'm not going to say "platforms who don't care lose", of
course, i realize that's not a solution
[23:56] <hein> but it's basically how Qt works right now
[23:57] <jpwhiting> i.e. ship gtk/assuan whatever they call it icons
with kde applications so they will look native when running there, etc.
[23:57] <hein> if we want Qt to work differently we need to change Qt
[23:57] <jpwhiting> and windows icons and mac icons on those platforms
[23:57] <hein> tsdgeos: i guess we indeed don't @ de-abstract way to set
a fallback theme
[23:57] <hein> tsdgeos: maybe we need one indeed
[23:58] <apachelogger> mhmh
[23:58] <hein> tsdgeos: i don't know if icon theme inheritance solves this
[23:58] <tsdgeos> so basically if i run an app in plain X
[23:58] <hein> can hicolor inherit from something else?
[23:58] <apachelogger> hein: qt doesn't load frameworksplugin in !plasma
envrionments?
[23:58] <tsdgeos> I won't ever have icons
[23:58] <apachelogger> hein: no
[23:58] <tsdgeos> hein: no, hicolor is defined to be the base theme
[23:58] <apachelogger> would do lookup looping
[23:59] <hein> apachelogger: i'm not 100% sure how it works, I'm
*guessing* it's something like "hey plugin ... do you want to do shit
here?" and the plugin looks and says "KDE_FULL_SESSION ain't true, nop
nop nop"
[23:59] <apachelogger> a spec implementation may add inherit fallbacks
before hicolor (which is what we do in teh platform plugin essentially)
[23:59] <hein> apachelogger: it's environment driven but i don't know
the details of the negotiation
[23:59] <apachelogger> hein: well if the plugin doesn't want to do
things then I think the problem is on our end
[23:59] <hein> i thought maybe "make hicolor inherit" was the "system
config" hack
[23:59] <hein> apachelogger: no
[00:00] <hein> apachelogger: loading our plugin outside plasma would be
broken
[00:00] <hein> apachelogger: our plugin does things like load kde
settings and make qt use kde dialogs
[00:00] <hein> apachelogger: which you don't want in gnome
[00:00] <apachelogger> ah yes
[00:00] <apachelogger> well
[00:00] <apachelogger> this is a shit problem
[00:00] <jpwhiting> indeed
[00:00] <apachelogger> perhaps intermediate fallback setting is indeed
the way to go
[00:01] <hein> i can see two things, either there's a
QIcon::setFallbackThemeName which makes it a per-app issue, or the icon
spec gets a way to set a system default overriding hicolor
[00:01] <frinring> what about other qt-based DEs? is the
framework-platform adapter really plasma workspace only? why exactly
perhaps?
[00:01] <apachelogger> of course having every app set the fallback
manually is crap as well
[00:01] <hein> the problem with the latter is that distros don't pick
oxygen then
[00:01] <hein> apachelogger: but it's in some sense what it comes down to
[00:01] <apachelogger> in particular consider one may set breeze and the
other may set oxygen and the other may set some other thing
[00:01] <frinring> (and why is it part of frameworks actually, and not
plasma workspaces then?
[00:01] <hein> apachelogger: the app dev knows "these icons i want ...
they're mostly in oxygen", which may not be true for any other app
[00:02] <hein> apachelogger: it's in some sense coincidental that kde
has a lot of app devs coming up with the same answer to that
[00:02] <apachelogger> hein: yes, I agree
[00:02] <apachelogger> I do not agree with having each app set it
manually though
[00:02] <apachelogger> maybe have kaboutdata do it or something
[00:02] <hein> apachelogger: and qt has no other mechanism to share
behavior across apps in an extensible way other than the platform plugin
[00:02] * frinring learns to better address people
[00:02] <apachelogger> otherwise you can probably kiss platform
continuity goodbye xD
[00:03] <apachelogger> actually that's also rubbish.... the manually set
fallback would have to be before the QPA, so we then have no means to
enforce a platform wide theme anymore I guess
[00:03] <hein> apachelogger: but would every user of kaboutdata be happy
with kaboutdata splicing in oxygen? etc. ...
[00:03] <frinring> hein: you said "loading our plugin outside plasma
would be broken". what about other qt-based DEs? is the
framework-platform adapter really plasma workspace only? why exactly
perhaps?
[00:03] <hein> frinring: other qt-based DEs would provide their own plugin
[00:03] <hein> frinring: that they're also qt-based doesn't mean they
share anything with plasma
[00:03] <frinring> hein: so why is it part of frameworks actually, and
not plasma workspaces then?
[00:04] <apachelogger> hein: they can simply override whatever aboutdata
set?
[00:04] <hein> frinring: that's a good question i don't know the answer to
[00:04] <hein> apachelogger: right
[00:04] <apachelogger> frinring: we've been wondering that a while ago
[00:04] <apachelogger> no one knew really :P
[00:04] <hein> apachelogger: but that's sorta like turning KAboutData
into KApplication :)
[00:04] <apachelogger> yeah
[00:04] <hein> you still have a "KF5 is no longer a Qt app now" then
[00:04] <hein> in some sense
[00:04] <apachelogger> except that is kind of what is needed ;)
[00:05] <apachelogger> hein: maybe the QPA lookup could be made smarter
though
[00:05] <hein> apachelogger: i was thinking about QPA inheritance a
while back ;)
[00:05] <hein> yay complexity
[00:06] <apachelogger> it possibly could be as simple as having plugins
go "I might have to offer something in this envrionment, unless
something else knows they do"
Cheers,
Eike
_______________________________________________
Kde-frameworks-devel mailing list
Kde-frameworks-devel@kde.org
https://mail.kde.org/mailman/listinfo/kde-frameworks-devel