diff --git a/src/desktoptheme/air/metadata.desktop b/src/desktoptheme/air/metadata.desktop index a297bb922..c12fde31a 100644 --- a/src/desktoptheme/air/metadata.desktop +++ b/src/desktoptheme/air/metadata.desktop @@ -86,6 +86,7 @@ X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true +X-Plasma-API=5.0 [Wallpaper] defaultWallpaperTheme=Elarun diff --git a/src/desktoptheme/breeze-dark/metadata.desktop b/src/desktoptheme/breeze-dark/metadata.desktop index 9b4d61123..52c0041a5 100644 --- a/src/desktoptheme/breeze-dark/metadata.desktop +++ b/src/desktoptheme/breeze-dark/metadata.desktop @@ -41,6 +41,7 @@ X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=LGPL X-KDE-PluginInfo-EnabledByDefault=true +X-Plasma-API=5.0 [Wallpaper] defaultWallpaperTheme=Next diff --git a/src/desktoptheme/breeze/metadata.desktop b/src/desktoptheme/breeze/metadata.desktop index ddff6a52d..cb15ee887 100644 --- a/src/desktoptheme/breeze/metadata.desktop +++ b/src/desktoptheme/breeze/metadata.desktop @@ -43,6 +43,7 @@ X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=LGPL X-KDE-PluginInfo-EnabledByDefault=true +X-Plasma-API=5.0 [Wallpaper] defaultWallpaperTheme=Next diff --git a/src/desktoptheme/oxygen/metadata.desktop b/src/desktoptheme/oxygen/metadata.desktop index a1a0c513f..96592c1bc 100644 --- a/src/desktoptheme/oxygen/metadata.desktop +++ b/src/desktoptheme/oxygen/metadata.desktop @@ -82,6 +82,7 @@ X-KDE-PluginInfo-Category= X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-EnabledByDefault=true +X-Plasma-API=5.0 [Wallpaper] defaultWallpaperTheme=Elarun diff --git a/src/plasma/private/theme_p.cpp b/src/plasma/private/theme_p.cpp index ccd9f918e..b9c2a555e 100644 --- a/src/plasma/private/theme_p.cpp +++ b/src/plasma/private/theme_p.cpp @@ -66,7 +66,10 @@ ThemePrivate::ThemePrivate(QObject *parent) useGlobal(true), hasWallpapers(false), fixedName(false), - backgroundContrastEnabled(true) + backgroundContrastEnabled(true), + apiMajor(1), + apiMinor(0), + apiRevision(0) { ThemeConfig config; cacheTheme = config.cacheTheme(); @@ -532,6 +535,13 @@ QColor ThemePrivate::color(Theme::ColorRole role, Theme::ColorGroup group) const { const KColorScheme *scheme = 0; + //Before 5.0 Plasma theme really only used Normal and Button + //many old themes are built on this assumption and will break + //otherwise + if (apiMajor < 5 && group != Theme::NormalColorGroup) { + group = Theme::ButtonColorGroup; + } + switch (group) { case Theme::ButtonColorGroup: { scheme = &buttonColorScheme; @@ -796,6 +806,26 @@ void ThemePrivate::setThemeName(const QString &tempThemeName, bool writeSettings KConfig metadata(metadataPath); processWallpaperSettings(&metadata); } + + //Check for what Plasma version the theme has been done + //There are some behavioral differences between KDE4 Plasma and Plasma 5 + cg = KConfigGroup(&metadata, "Desktop Entry"); + const QString apiVersion = cg.readEntry("X-Plasma-API", QString()); + apiMajor = 1; + apiMinor = 0; + apiRevision = 0; + if (!apiVersion.isEmpty()) { + QStringList parts = apiVersion.split('.'); + if (!parts.isEmpty()) { + apiMajor = parts.value(0).toInt(); + } + if (parts.count() > 1) { + apiMinor = parts.value(1).toInt(); + } + if (parts.count() > 2) { + apiRevision = parts.value(2).toInt(); + } + } } if (realTheme && isDefault && writeSettings) { diff --git a/src/plasma/private/theme_p.h b/src/plasma/private/theme_p.h index 309b55502..96e98ed26 100644 --- a/src/plasma/private/theme_p.h +++ b/src/plasma/private/theme_p.h @@ -153,6 +153,11 @@ public: qreal backgroundIntensity; qreal backgroundSaturation; bool backgroundContrastEnabled; + + //Version number of Plasma the Theme has been designed for + int apiMajor; + int apiMinor; + int apiRevision; }; }