summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qguiplatformplugin.cpp6
-rw-r--r--src/gui/styles/qgtkstyle_p.cpp22
-rw-r--r--src/gui/styles/qgtkstyle_p.h1
3 files changed, 27 insertions, 2 deletions
diff --git a/src/gui/kernel/qguiplatformplugin.cpp b/src/gui/kernel/qguiplatformplugin.cpp
index 01fe089..7063e62 100644
--- a/src/gui/kernel/qguiplatformplugin.cpp
+++ b/src/gui/kernel/qguiplatformplugin.cpp
@@ -204,10 +204,12 @@ QString QGuiPlatformPlugin::systemIconThemeName()
QString result;
#ifdef Q_WS_X11
if (X11->desktopEnvironment == DE_GNOME) {
- result = QString::fromLatin1("gnome");
#ifndef QT_NO_STYLE_GTK
- result = QGtkStylePrivate::getGConfString(QLatin1String("/desktop/gnome/interface/icon_theme"), result);
+ result = QGtkStylePrivate::getIconThemeName();
#endif
+ if (result.isEmpty()) {
+ result = QString::fromLatin1("gnome");
+ }
} else if (X11->desktopEnvironment == DE_KDE) {
result = X11->desktopVersion >= 4 ? QString::fromLatin1("oxygen") : QString::fromLatin1("crystalsvg");
QSettings settings(QKde::kdeHome() + QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat);
diff --git a/src/gui/styles/qgtkstyle_p.cpp b/src/gui/styles/qgtkstyle_p.cpp
index 302cf09..67b3245 100644
--- a/src/gui/styles/qgtkstyle_p.cpp
+++ b/src/gui/styles/qgtkstyle_p.cpp
@@ -686,6 +686,28 @@ QString QGtkStylePrivate::getThemeName()
return themeName;
}
+QString QGtkStylePrivate::getIconThemeName() {
+ if (!gtk_settings_get_default) {
+ // enforce the "0" suffix, so we'll open libgtk-x11-2.0.so.0
+ QLibrary libgtk(QLS("gtk-x11-2.0"), 0, 0);
+ libgtk.setLoadHints(QLibrary::ImprovedSearchHeuristics);
+ gtk_init = (Ptr_gtk_init)libgtk.resolve("gtk_init");
+ gtk_settings_get_default = (Ptr_gtk_settings_get_default)libgtk.resolve("gtk_settings_get_default");
+ }
+ if (!gtk_settings_get_default) {
+ return QString();
+ }
+ x11ErrorHandler qt_x_errhandler = XSetErrorHandler(0);
+ gtk_init(NULL, NULL);
+ XSetErrorHandler(qt_x_errhandler);
+ GtkSettings *settings = gtk_settings_get_default();
+ gchararray value;
+ g_object_get(settings, "gtk-icon-theme-name", &value, NULL);
+ QString result = QString::fromUtf8(value);
+ g_free(value);
+ return result;
+}
+
// Get size of the arrow controls in a GtkSpinButton
int QGtkStylePrivate::getSpinboxArrowSize() const
{
diff --git a/src/gui/styles/qgtkstyle_p.h b/src/gui/styles/qgtkstyle_p.h
index b4ab589..1be5aa4 100644
--- a/src/gui/styles/qgtkstyle_p.h
+++ b/src/gui/styles/qgtkstyle_p.h
@@ -339,6 +339,7 @@ public:
static QString getGConfString(const QString &key, const QString &fallback = QString());
static QString getThemeName();
+ static QString getIconThemeName();
virtual int getSpinboxArrowSize() const;
static void setupGtkFileChooser(GtkWidget* gtkFileChooser, QWidget *parent,