From c4fb3cd55df35aeaf6d81ddc7478f9d95dc5bb15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Mon, 5 Jan 2015 14:30:42 +0100 Subject: [PATCH] [kdecoration] Try falling back to default plugin and Aurorae If the configured decoration plugin fails to load, we try to load the default decoration plugin. If that also fails to load, we try to load Aurorae, which is shipped with KWin, so the chances are higher that it is available. Also the checks in Aurorae are improved to fall back to the Plastik theme if the selected SVG theme is not available. BUG: 341014 FIXED-IN: 5.2.0 REVIEW: 121859 --- clients/aurorae/src/aurorae.cpp | 5 ++++- decorations/decorationbridge.cpp | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/clients/aurorae/src/aurorae.cpp b/clients/aurorae/src/aurorae.cpp index 428063ddee..2acc1f44ca 100644 --- a/clients/aurorae/src/aurorae.cpp +++ b/clients/aurorae/src/aurorae.cpp @@ -139,7 +139,10 @@ QQmlComponent *Helper::component(const QString &themeName) m_svgComponent.reset(new QQmlComponent(m_engine.data())); m_svgComponent->loadUrl(QUrl(QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kwin/aurorae/aurorae.qml")))); } - return m_svgComponent.data(); + // verify that the theme exists + if (!QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("aurorae/themes/%1/%1rc").arg(themeName.mid(16))).isEmpty()) { + return m_svgComponent.data(); + } } // try finding the QML package auto it = m_components.constFind(themeName); diff --git a/decorations/decorationbridge.cpp b/decorations/decorationbridge.cpp index ba41d6a6c7..240c284b24 100644 --- a/decorations/decorationbridge.cpp +++ b/decorations/decorationbridge.cpp @@ -47,6 +47,7 @@ namespace Decoration { static const QString s_pluginName = QStringLiteral("org.kde.kdecoration2"); +static const QString s_defaultPlugin = QStringLiteral("org.kde.breeze"); KWIN_SINGLETON_FACTORY(DecorationBridge) @@ -65,7 +66,7 @@ DecorationBridge::~DecorationBridge() static QString readPlugin() { - return KSharedConfig::openConfig(KWIN_CONFIG)->group(s_pluginName).readEntry("library", QStringLiteral("org.kde.breeze")); + return KSharedConfig::openConfig(KWIN_CONFIG)->group(s_pluginName).readEntry("library", s_defaultPlugin); } QString DecorationBridge::readTheme() const @@ -78,6 +79,18 @@ void DecorationBridge::init() m_plugin = readPlugin(); m_settings = QSharedPointer::create(this); initPlugin(); + if (!m_factory) { + if (m_plugin != s_defaultPlugin) { + // try loading default plugin + m_plugin = s_defaultPlugin; + initPlugin(); + } + // default plugin failed to load, try fallback + if (!m_factory) { + m_plugin = QStringLiteral("org.kde.kwin.aurorae"); + initPlugin(); + } + } } void DecorationBridge::initPlugin()