Bug 364693 - When upgrading from Qt5.4 to Qt5.6, the color and theme handling ignores local settings
Summary: When upgrading from Qt5.4 to Qt5.6, the color and theme handling ignores loca...
Status: RESOLVED FIXED
Alias: None
Product: Oxygen
Classification: Plasma
Component: gtk2-engine (other bugs)
Version First Reported In: 1.4.5
Platform: openSUSE Linux
: NOR normal
Target Milestone: ---
Assignee: Hugo Pereira Da Costa
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-06-24 08:08 UTC by Hans-Peter Jansen
Modified: 2016-10-27 11:35 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Hans-Peter Jansen 2016-06-24 08:08:09 UTC
First of all: I LOVE OXYGEN-GTK! Thank you very much.

I'm in loving relationship to your project for a long time (even before I was able to spell oxygen-gtk ;) Coming a long way up, when started with KDE 1.0, I'm using a special color theme for most of the time, because I don't like all those cold colored DEs. Needless to say, that I'm very sensitive about changes in this area. Especially, when defaults come into play..

Using openSUSE 13.2/x86_64 with KDE 4.14 nowadays (for one reason, because Plasma5 adds another color settings layer on top, due to Qt5). With Qt5.4, that comes with openSUSE, all is well, Qt5 inherits the KDE4 color settings just fine, and oxygen-gtk spreads that to the essential Gtk based apps as well (Firefox, Gimp, LO).

Now I started to prepare for a Qt5.6 based project here: 
https://build.opensuse.org/project/monitor/home:frispete:PyQt5

That's a Qt 5.6.1 build, that should work fine as a Qt 5.4.2 replacement. Unfortunately, immediately after upgrading the packages, Gtk changed its appearance to oxygens default color map including the background gradient, that I've disabled. (Firefox menus turned gray).
Some further investigation revealed, that I could either choose Adwaita as GTK2 theme and have it respecting my color map, or oxygen-gtk and have the oxygen default color map. Both is visually disappealing..

My humble guess is that Qt5.6 changed the configuration representation for color settings, resulting in oxygen-gtk using some default values. After reverting to 5.4.2, all is well again. I've tried a lot to cope with it, though. Removed ~/.config/Trolltech.conf, fiddled with ~/.gtkrc, GTK2_RC_FILES and friends, checked the generated color map in ~/.gtkrc, which is fine, etc.. Here's something, that might be useful for others: convert GTK color values to something, that the rest of the world understands: 
$> python3 -c "print([int(255.0*v) for v in (1.000, 0.980, 0.902)])"
Replace the three numbers with some values from ~/.gtkrc, and check the result in some color choosing widget..

I'm ready and prepared to build some oxygen-gtk packages out of git.

Reproducible: Always




BTW: Hugo, Ruslan, I found some hostility for your project coming from the GTK camp. Given their unfair behaviour, they deserve, that everybody and their aunts is using gtk2 still. I assure you, that your code will keep executing on a lot of systems, since this is one of the rare ways to make this ugly GTK stuff looking fine. This experience reminded me, how UGLY things could be.

Version: gtk2-{engine,theme}-oxygen-1.4.6, Qt 5.4.2, KDE 4.14 all from openSUSE 13.2.
Qt changed to 5.6.1, built in home:frispete:PyQt5 (based on KDE:Qt on Build Service).
Comment 1 Hugo Pereira Da Costa 2016-06-24 08:35:01 UTC
Dear Hans-Peter,
First of all, thanks a lot for the kind words !
Concerning the issue at hand I am confused. In principle the way oxygen-gtk retrieves its configuration from qt should not depend on the qt version (and even less on qt5, because it is all kde4 stuff).
In more details, it looks for kde4 configuration files in the directory list returned by "kde4-config --path config", and loads whatever is found in kdeglobals and in oxygenrc. 
None of this should depend on qt5 version
(in fact, to Ruslan, we should probably update it to also use the output of "kf5-config --path config")

Can you check the output of kde4-config for the two versions of qt5 you are testing, see if kdeglobals and oxygenrc are there in both cases, and see whether its content is consistent (colors, gradient) with what you see on screen, and what you want to have for your gtk apps ? 

On my side I will try compile qt-5.6 (I'm on 5.5 here), to see if there is something fishy, but no guarantee.

Best regards,

Hugo
Comment 2 Hans-Peter Jansen 2016-06-24 09:12:38 UTC
Dear Hugo,
thanks for the immediate reply. Much appreciated. 
kde4-config --path config results in:
/home/hp/.kde/share/config/:/usr/share/kde4/config/:/etc/kde4/share/config/
Both config files look consistent and didn't change in my home (checked with backups, the one of yesterday was produced with the newer Qt installed).
I'm setting up a VM now, where I expect to reproduce the problem at hand, and been able to try fixes quickly without disturbing my day to day work.
Comment 3 Ruslan Kabatsayev 2016-06-24 09:18:11 UTC
You can compile oxygen-gtk passing -DOXYGEN_DEBUG=1 to cmake. Then you'll get tons of debug output when you start GTK2 apps - including info about config it loads.
Comment 4 Ruslan Kabatsayev 2016-06-24 09:20:19 UTC
@Hugo
Is kde4-config optional in KF5? It seems to be there with the default install.
Comment 5 Hugo Pereira Da Costa 2016-06-24 10:16:13 UTC
(In reply to Ruslan Kabatsayev from comment #4)
> @Hugo
> Is kde4-config optional in KF5? It seems to be there with the default
> install.

No clue to be honest. I'm still running kde4 (with bits and pieces of kf5)
I guess you must have it as long as you have qt4/kde4 apps installed ...
Comment 6 Hans-Peter Jansen 2016-06-24 13:43:49 UTC
Okay, here are some news: the package, that changes behaviour is called libqt5-qttools. If installed, the erroneous effects take place, and vanish, if removed. Confirmed on my desktop and in a VM. 

Here's the package content:
Name        : libqt5-qttools
Version     : 5.6.1
Release     : 102.1
Architecture: x86_64
Install Date: Fr 24 Jun 2016 15:41:18 CEST
Group       : Development/Libraries/X11
Size        : 2497346
License     : SUSE-LGPL-2.1-with-digia-exception-1.1 or GPL-3.0
Signature   : RSA/SHA256, Do 23 Jun 2016 03:47:19 CEST, Key ID 6d65170129e3735a
Source RPM  : libqt5-qttools-5.6.1-102.1.src.rpm
Build Date  : Do 23 Jun 2016 03:43:27 CEST
Build Host  : lamb07
Relocations : (not relocatable)
Vendor      : obs://build.opensuse.org/home:frispete
URL         : http://qt.digia.com
Summary     : Qt 5 QtTools Module
Description :
Qt is a set of libraries for developing applications.

This package contains base tools, like string, xml, and network handling.
Distribution: home:frispete:PyQt5 / openSUSE_13.2
-rwxr-xr-x    1 root    root                  1138488 Jun 23 03:43 /usr/bin/assistant-qt5
-rwxr-xr-x    1 root    root                   451384 Jun 23 03:43 /usr/bin/designer-qt5
-rwxr-xr-x    1 root    root                    57112 Jun 23 03:43 /usr/bin/pixeltool-qt5
-rwxr-xr-x    1 root    root                    69008 Jun 23 03:43 /usr/bin/qcollectiongenerator-qt5
-rwxr-xr-x    1 root    root                    64800 Jun 23 03:43 /usr/bin/qdbus-qt5
-rwxr-xr-x    1 root    root                   132744 Jun 23 03:43 /usr/bin/qdbusviewer-qt5
-rwxr-xr-x    1 root    root                   164560 Jun 23 03:43 /usr/bin/qhelpconverter-qt5
-rwxr-xr-x    1 root    root                    23192 Jun 23 03:43 /usr/bin/qhelpgenerator-qt5
-rwxr-xr-x    1 root    root                    61024 Jun 23 03:43 /usr/bin/qtdiag
-rwxr-xr-x    1 root    root                    23016 Jun 23 03:43 /usr/bin/qtpaths
-rwxr-xr-x    1 root    root                    23168 Jun 23 03:43 /usr/bin/qtplugininfo
lrwxrwxrwx    1 root    root                       26 Jun 23 03:43 /usr/lib64/qt5/bin/assistant -> ../../../bin/assistant-qt5
lrwxrwxrwx    1 root    root                       26 Jun 23 03:43 /usr/lib64/qt5/bin/assistant-qt5 -> ../../../bin/assistant-qt5
lrwxrwxrwx    1 root    root                       25 Jun 23 03:43 /usr/lib64/qt5/bin/designer -> ../../../bin/designer-qt5
lrwxrwxrwx    1 root    root                       25 Jun 23 03:43 /usr/lib64/qt5/bin/designer-qt5 -> ../../../bin/designer-qt5
lrwxrwxrwx    1 root    root                       26 Jun 23 03:43 /usr/lib64/qt5/bin/pixeltool -> ../../../bin/pixeltool-qt5
lrwxrwxrwx    1 root    root                       26 Jun 23 03:43 /usr/lib64/qt5/bin/pixeltool-qt5 -> ../../../bin/pixeltool-qt5
lrwxrwxrwx    1 root    root                       37 Jun 23 03:43 /usr/lib64/qt5/bin/qcollectiongenerator -> ../../../bin/qcollectiongenerator-qt5
lrwxrwxrwx    1 root    root                       37 Jun 23 03:43 /usr/lib64/qt5/bin/qcollectiongenerator-qt5 -> ../../../bin/qcollectiongenerator-qt5
lrwxrwxrwx    1 root    root                       22 Jun 23 03:43 /usr/lib64/qt5/bin/qdbus -> ../../../bin/qdbus-qt5
lrwxrwxrwx    1 root    root                       22 Jun 23 03:43 /usr/lib64/qt5/bin/qdbus-qt5 -> ../../../bin/qdbus-qt5
lrwxrwxrwx    1 root    root                       28 Jun 23 03:43 /usr/lib64/qt5/bin/qdbusviewer -> ../../../bin/qdbusviewer-qt5
lrwxrwxrwx    1 root    root                       28 Jun 23 03:43 /usr/lib64/qt5/bin/qdbusviewer-qt5 -> ../../../bin/qdbusviewer-qt5
lrwxrwxrwx    1 root    root                       31 Jun 23 03:43 /usr/lib64/qt5/bin/qhelpconverter -> ../../../bin/qhelpconverter-qt5
lrwxrwxrwx    1 root    root                       31 Jun 23 03:43 /usr/lib64/qt5/bin/qhelpconverter-qt5 -> ../../../bin/qhelpconverter-qt5
lrwxrwxrwx    1 root    root                       31 Jun 23 03:43 /usr/lib64/qt5/bin/qhelpgenerator -> ../../../bin/qhelpgenerator-qt5
lrwxrwxrwx    1 root    root                       31 Jun 23 03:43 /usr/lib64/qt5/bin/qhelpgenerator-qt5 -> ../../../bin/qhelpgenerator-qt5
lrwxrwxrwx    1 root    root                       19 Jun 23 03:43 /usr/lib64/qt5/bin/qtdiag -> ../../../bin/qtdiag
lrwxrwxrwx    1 root    root                       20 Jun 23 03:43 /usr/lib64/qt5/bin/qtpaths -> ../../../bin/qtpaths
lrwxrwxrwx    1 root    root                       25 Jun 23 03:43 /usr/lib64/qt5/bin/qtplugininfo -> ../../../bin/qtplugininfo
drwxr-xr-x    2 root    root                        0 Jun 23 03:43 /usr/lib64/qt5/plugins/designer
-rwxr-xr-x    1 root    root                    43776 Jun 23 03:43 /usr/lib64/qt5/plugins/designer/libcontainerextension.so
-rwxr-xr-x    1 root    root                    31344 Jun 23 03:43 /usr/lib64/qt5/plugins/designer/libcustomwidgetplugin.so
-rwxr-xr-x    1 root    root                    23008 Jun 23 03:43 /usr/lib64/qt5/plugins/designer/libqquickwidget.so
-rwxr-xr-x    1 root    root                    47864 Jun 23 03:43 /usr/lib64/qt5/plugins/designer/libtaskmenuextension.so
-rwxr-xr-x    1 root    root                    31392 Jun 23 03:43 /usr/lib64/qt5/plugins/designer/libworldtimeclockplugin.so
-rw-r--r--    1 root    root                      258 Jun 23 03:43 /usr/share/applications/assistant5.desktop
-rw-r--r--    1 root    root                      254 Jun 23 03:43 /usr/share/applications/designer5.desktop
-rw-r--r--    1 root    root                      270 Jun 23 03:43 /usr/share/applications/qdbusviewer5.desktop
drwxr-xr-x    2 root    root                        0 Jun 23 03:43 /usr/share/doc/packages/libqt5-qttools
-rw-r--r--    1 root    root                     1196 Mai 31 12:46 /usr/share/doc/packages/libqt5-qttools/LGPL_EXCEPTION.txt
-rw-r--r--    1 root    root                    22961 Mai 31 12:46 /usr/share/doc/packages/libqt5-qttools/LICENSE.FDL
-rw-r--r--    1 root    root                    35645 Mai 31 12:46 /usr/share/doc/packages/libqt5-qttools/LICENSE.GPLv3
-rw-r--r--    1 root    root                    26832 Mai 31 12:46 /usr/share/doc/packages/libqt5-qttools/LICENSE.LGPLv21
-rw-r--r--    1 root    root                     8178 Mai 31 12:46 /usr/share/doc/packages/libqt5-qttools/LICENSE.LGPLv3
drwxr-xr-x    2 root    root                        0 Jun 23 03:43 /usr/share/icons/hicolor
drwxr-xr-x    2 root    root                        0 Jun 23 03:43 /usr/share/icons/hicolor/128x128
drwxr-xr-x    2 root    root                        0 Jun 23 03:43 /usr/share/icons/hicolor/128x128/apps
-rw-r--r--    1 root    root                     6176 Jun 23 03:43 /usr/share/icons/hicolor/128x128/apps/assistant5.png
-rw-r--r--    1 root    root                     3889 Jun 23 03:43 /usr/share/icons/hicolor/128x128/apps/designer5.png
-rw-r--r--    1 root    root                     3353 Jun 23 03:43 /usr/share/icons/hicolor/128x128/apps/qdbusviewer5.png
drwxr-xr-x    2 root    root                        0 Jun 23 03:43 /usr/share/icons/hicolor/32x32
drwxr-xr-x    2 root    root                        0 Jun 23 03:43 /usr/share/icons/hicolor/32x32/apps
-rw-r--r--    1 root    root                     1378 Jun 23 03:43 /usr/share/icons/hicolor/32x32/apps/assistant5.png
-rw-r--r--    1 root    root                     1076 Jun 23 03:43 /usr/share/icons/hicolor/32x32/apps/qdbusviewer5.png

Any idea, what could be the culprit here?
Comment 7 Hans-Peter Jansen 2016-06-24 13:47:18 UTC
BTW, the best way to test this is simply running oxygen-gtk-demo.
Comment 8 Hans-Peter Jansen 2016-10-27 11:34:30 UTC
Okay, I was able to resolve this issue today..

The whole mess was due to a patch, that was applied on the package, preferring 
"qtpaths --paths ConfigLocation" over kde4-config --path config.

Sure for bothering you, Hugo and Ruslan, and thank you for your support.

Highly appreciated.
Comment 9 Hans-Peter Jansen 2016-10-27 11:35:22 UTC
Just for reference:

https://build.opensuse.org/package/show/home:frispete:PyQt5/oxygen-gtk2