Author: Timo Teräs Fix QT GTK style to use GTK API to get the active theme name. This fixes things for non-GNOME setups, as well as realtime theme change detection. It still tries to detect if GTK-Qt is in use and refuse to run with that as it would cause obvious recursion, however that might be not always possible. --- qt-everywhere-opensource-src-4.8.0/src/gui/styles/qgtkstyle_p.h.orig +++ qt-everywhere-opensource-src-4.8.0/src/gui/styles/qgtkstyle_p.h @@ -338,6 +338,7 @@ static bool getGConfBool(const QString &key, bool fallback = 0); static QString getGConfString(const QString &key, const QString &fallback = QString()); + static QString getThemeNameGuess(); static QString getThemeName(); virtual int getSpinboxArrowSize() const; --- qt-everywhere-opensource-src-4.8.0/src/gui/styles/qgtkstyle_p.cpp.orig +++ qt-everywhere-opensource-src-4.8.0/src/gui/styles/qgtkstyle_p.cpp @@ -504,12 +504,9 @@ static QString themeName; if (!gtkWidgetMap()->contains("GtkWindow") && themeName.isEmpty()) { - themeName = getThemeName(); + themeName = getThemeNameGuess(); - if (themeName.isEmpty()) { - qWarning("QGtkStyle was unable to detect the current GTK+ theme."); - return; - } else if (themeName == QLS("Qt") || themeName == QLS("Qt4")) { + if (themeName == QLS("Qt") || themeName == QLS("Qt4")) { // Due to namespace conflicts with Qt3 and obvious recursion with Qt4, // we cannot support the GTK_Qt Gtk engine qWarning("QGtkStyle cannot be used together with the GTK_Qt engine."); @@ -650,7 +647,7 @@ return retVal; } -QString QGtkStylePrivate::getThemeName() +QString QGtkStylePrivate::getThemeNameGuess() { QString themeName; // We try to parse the gtkrc file first @@ -684,6 +681,19 @@ // Fall back to gconf if (themeName.isEmpty() && resolveGConf()) themeName = getGConfString(QLS("/desktop/gnome/interface/gtk_theme")); + + return themeName; +} + +QString QGtkStylePrivate::getThemeName() +{ + QString themeName; + gchar *theme_name; + + GtkSettings *settings = gtk_settings_get_default(); + g_object_get(settings, "gtk-theme-name", &theme_name, NULL); + themeName = QString::fromUtf8(theme_name); + g_free(theme_name); return themeName; }