summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/xcb/qxcbintegration.cpp
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-07-23 11:18:11 +0200
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2013-07-23 11:18:11 +0200
commit084c5b3db794af1ce86b2b17455d9be5e64baebe (patch)
tree46d29a7b89ff251c07b6fdd59c57e30f14baa64a /src/plugins/platforms/xcb/qxcbintegration.cpp
parentf4a0d6d2494d1dd41cd5b854a48b435120714d32 (diff)
parent54987c6bf55b159d3ddb79461439700f6e0111f9 (diff)
Merge remote-tracking branch 'origin/stable' into dev
Conflicts: tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp Change-Id: I18a9d83fc14f4a9afdb1e40523ec51e3fa1d7754
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbintegration.cpp')
-rw-r--r--src/plugins/platforms/xcb/qxcbintegration.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp
index 1c170d44e6..46077e2c3f 100644
--- a/src/plugins/platforms/xcb/qxcbintegration.cpp
+++ b/src/plugins/platforms/xcb/qxcbintegration.cpp
@@ -389,4 +389,48 @@ QVariant QXcbIntegration::styleHint(QPlatformIntegration::StyleHint hint) const
return QPlatformIntegration::styleHint(hint);
}
+static QString argv0BaseName()
+{
+ QString result;
+ const QStringList arguments = QCoreApplication::arguments();
+ if (!arguments.isEmpty() && !arguments.front().isEmpty()) {
+ result = arguments.front();
+ const int lastSlashPos = result.lastIndexOf(QLatin1Char('/'));
+ if (lastSlashPos != -1)
+ result.remove(0, lastSlashPos + 1);
+ }
+ return result;
+}
+
+static const char resourceNameVar[] = "RESOURCE_NAME";
+
+QByteArray QXcbIntegration::wmClass() const
+{
+ if (m_wmClass.isEmpty()) {
+ // Instance name according to ICCCM 4.1.2.5
+ QString name;
+ if (name.isEmpty() && qEnvironmentVariableIsSet(resourceNameVar))
+ name = QString::fromLocal8Bit(qgetenv(resourceNameVar));
+ if (name.isEmpty())
+ name = argv0BaseName();
+
+ // Note: QCoreApplication::applicationName() cannot be called from the QGuiApplication constructor,
+ // hence this delayed initialization.
+ QString className = QCoreApplication::applicationName();
+ if (className.isEmpty()) {
+ className = argv0BaseName();
+ if (!className.isEmpty() && className.at(0).isLower())
+ className[0] = className.at(0).toUpper();
+ }
+
+ if (!name.isEmpty() && !className.isEmpty()) {
+ m_wmClass = name.toLocal8Bit();
+ m_wmClass.append('\0');
+ m_wmClass.append(className.toLocal8Bit());
+ m_wmClass.append('\0');
+ }
+ }
+ return m_wmClass;
+}
+
QT_END_NAMESPACE