summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/xcb
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2012-03-14 13:50:14 +0100
committerQt by Nokia <qt-info@nokia.com>2012-03-15 00:50:47 +0100
commitf7957f39937c42aadecc6ad2b73d006559514e00 (patch)
tree05dd38f103090dcc7eb5d5fc9f8f6446ebef1e6f /src/plugins/platforms/xcb
parentd295b9b9cfc8bde021bf07ea997d8cd0d14cffb8 (diff)
Refactor theme plugin loading.
In the old implementation, the QPlatformIntegration was asked for the theme first, so there was no way of overriding that by a custom plugin. Also, there was a memory leak in case the platform theme was actually created by a plugin. QGuiApplication now asks the QPlatformIntegration for a list of potential theme names first, tries to load them using the plugin loader and finally invokes a factory method of QPlatformIntegration in case that fails. The theme is now owned by QGuiApplication. In the XCB plugin, the environment variable DESKTOP_SESSION is queried and appended to the list of themes, making it possible to load plugins for other session types. Change-Id: I1a4b4e061815bca16c65b23e591bb7563a3e44e2 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Diffstat (limited to 'src/plugins/platforms/xcb')
-rw-r--r--src/plugins/platforms/xcb/qxcbintegration.cpp12
-rw-r--r--src/plugins/platforms/xcb/qxcbintegration.h4
2 files changed, 10 insertions, 6 deletions
diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp
index fe33bd7153..0db9ef9e64 100644
--- a/src/plugins/platforms/xcb/qxcbintegration.cpp
+++ b/src/plugins/platforms/xcb/qxcbintegration.cpp
@@ -88,8 +88,7 @@ QT_BEGIN_NAMESPACE
QXcbIntegration::QXcbIntegration(const QStringList &parameters)
: m_eventDispatcher(createUnixEventDispatcher()),
- m_services(new QGenericUnixServices),
- m_theme(QGenericUnixTheme::createUnixTheme())
+ m_services(new QGenericUnixServices)
{
QGuiApplicationPrivate::instance()->setEventDispatcher(m_eventDispatcher);
@@ -277,9 +276,14 @@ QPlatformServices *QXcbIntegration::services() const
return m_services.data();
}
-QPlatformTheme *QXcbIntegration::platformTheme() const
+QStringList QXcbIntegration::themeNames() const
{
- return m_theme.data();
+ return QGenericUnixTheme::themeNames();
+}
+
+QPlatformTheme *QXcbIntegration::createPlatformTheme(const QString &name) const
+{
+ return QGenericUnixTheme::createUnixTheme(name);
}
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/qxcbintegration.h b/src/plugins/platforms/xcb/qxcbintegration.h
index 457f90d6e0..4c335f2f06 100644
--- a/src/plugins/platforms/xcb/qxcbintegration.h
+++ b/src/plugins/platforms/xcb/qxcbintegration.h
@@ -85,7 +85,8 @@ public:
QPlatformServices *services() const;
- QPlatformTheme *platformTheme() const;
+ QStringList themeNames() const;
+ QPlatformTheme *createPlatformTheme(const QString &name) const;
private:
QList<QXcbConnection *> m_connections;
@@ -103,7 +104,6 @@ private:
#endif
QScopedPointer<QPlatformServices> m_services;
- QScopedPointer<QPlatformTheme> m_theme;
};
QT_END_NAMESPACE