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()