b931c00031
The mechanism should have deleted the old key from the config if it was invalid and then try again in order to get the default. As we were deleting the wrong key (actually the value of the shell package key), this was turning into a recursive loop. Deleting the correct key obviously fixes this. Thanks Bille for reporting! Reviewed-by: Marco Martin BUG:343510
131 lines
4.1 KiB
C++
131 lines
4.1 KiB
C++
#include <platformstatus.h>
|
|
|
|
#include <QDBusConnection>
|
|
#include <QStandardPaths>
|
|
|
|
#include <kconfiggroup.h>
|
|
#include <ksharedconfig.h>
|
|
#include <QDebug>
|
|
#include <kdirwatch.h>
|
|
#include <kpluginfactory.h>
|
|
#include <qstandardpaths.h>
|
|
|
|
#include "platformstatusadaptor.h"
|
|
#include "../plasma/config-plasma.h"
|
|
|
|
const char defaultPackage[] = "org.kde.plasma.desktop";
|
|
const char defaultLnFPackage[] = "org.kde.breeze.desktop";
|
|
|
|
K_PLUGIN_FACTORY(PlatformStatusFactory, registerPlugin<PlatformStatus>();)
|
|
|
|
PlatformStatus::PlatformStatus(QObject *parent, const QVariantList &)
|
|
: KDEDModule(parent)
|
|
{
|
|
new PlatformStatusAdaptor(this);
|
|
QDBusConnection::sessionBus().registerObject("/PlatformStatus", this);
|
|
|
|
findShellPackage(false);
|
|
findLookAndFeelPackage(false);
|
|
|
|
const QString globalrcPath = QStandardPaths::locate(QStandardPaths::GenericConfigLocation, "kdeglobals");
|
|
connect(KDirWatch::self(), SIGNAL(dirty(QString)), this, SLOT(fileDirtied(QString)));
|
|
connect(KDirWatch::self(), SIGNAL(created(QString)), this, SLOT(fileDirtied(QString)));
|
|
KDirWatch::self()->addFile(globalrcPath);
|
|
}
|
|
|
|
void PlatformStatus::findShellPackage(bool sendSignal)
|
|
{
|
|
KConfigGroup group(KSharedConfig::openConfig("kdeglobals"), "DesktopShell");
|
|
const QString package = group.readEntry("shellPackage", defaultPackage);
|
|
|
|
const QString path = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
|
|
PLASMA_RELATIVE_DATA_INSTALL_DIR "/shells/" + package + '/',
|
|
QStandardPaths::LocateDirectory);
|
|
if (path.isEmpty()) {
|
|
if (package != defaultPackage) {
|
|
group.deleteEntry("ShellPackage");
|
|
findShellPackage(sendSignal);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
m_shellPackage = package;
|
|
|
|
QString runtimePlatform = group.readEntry("RuntimePlatform", QString());
|
|
KConfig packageDefaults(path + "contents/defaults", KConfig::SimpleConfig);
|
|
group = KConfigGroup(&packageDefaults, "Desktop");
|
|
runtimePlatform = group.readEntry("RuntimePlatform", runtimePlatform);
|
|
const bool runtimeChanged = runtimePlatform != m_runtimePlatform.join(',');
|
|
if (runtimeChanged) {
|
|
m_runtimePlatform = runtimePlatform.split(',');
|
|
}
|
|
|
|
if (sendSignal) {
|
|
emit shellPackageChanged(m_shellPackage);
|
|
emit runtimePlatformChanged(m_runtimePlatform);
|
|
}
|
|
}
|
|
|
|
void PlatformStatus::findLookAndFeelPackage(bool sendSignal)
|
|
{
|
|
|
|
KConfigGroup group(KSharedConfig::openConfig("kdeglobals"), "KDE");
|
|
QString package = group.readEntry("LookAndFeelPackage", QString());
|
|
|
|
if (package.isEmpty()) {
|
|
const QString shellPath = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
|
|
PLASMA_RELATIVE_DATA_INSTALL_DIR "/shells/" + m_shellPackage + '/',
|
|
QStandardPaths::LocateDirectory);
|
|
KConfig packageDefaults(shellPath + "contents/defaults", KConfig::SimpleConfig);
|
|
group = KConfigGroup(&packageDefaults, "Desktop");
|
|
package = group.readEntry("LookAndFeel", defaultLnFPackage);
|
|
|
|
} else {
|
|
const QString path = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
|
|
PLASMA_RELATIVE_DATA_INSTALL_DIR "/look-and-feel/" + package + '/',
|
|
QStandardPaths::LocateDirectory);
|
|
if (path.isEmpty()) {
|
|
if (package != defaultPackage) {
|
|
group.deleteEntry("LookAndFeel");
|
|
findLookAndFeelPackage(sendSignal);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
}
|
|
|
|
const bool lnfChanged = (m_lookAndFeelPackage != package);
|
|
m_lookAndFeelPackage = package;
|
|
|
|
if (sendSignal && lnfChanged) {
|
|
emit lookAndFeelPackageChanged(m_lookAndFeelPackage);
|
|
}
|
|
}
|
|
|
|
QString PlatformStatus::shellPackage() const
|
|
{
|
|
return m_shellPackage;
|
|
}
|
|
|
|
QString PlatformStatus::lookAndFeelPackage() const
|
|
{
|
|
return m_lookAndFeelPackage;
|
|
}
|
|
|
|
QStringList PlatformStatus::runtimePlatform() const
|
|
{
|
|
return m_runtimePlatform;
|
|
}
|
|
|
|
void PlatformStatus::fileDirtied(const QString &path)
|
|
{
|
|
if (path.endsWith("kdeglobals")) {
|
|
findShellPackage(true);
|
|
findLookAndFeelPackage(true);
|
|
}
|
|
}
|
|
|
|
#include "platformstatus.moc"
|