From dad03a43ceaf2a8788208ae0f127aaee4e2a69b3 Mon Sep 17 00:00:00 2001 From: Aaron Seigo Date: Sun, 21 Apr 2013 18:04:29 +0200 Subject: [PATCH 1/4] first draft of the platform status kded module --- src/CMakeLists.txt | 1 + src/platformstatus/CMakeLists.txt | 10 +++ .../kded-platformstatus.desktop | 9 +++ src/platformstatus/org.kde.platformstatus.xml | 19 +++++ src/platformstatus/platformstatus.cpp | 76 +++++++++++++++++++ src/platformstatus/platformstatus.h | 38 ++++++++++ 6 files changed, 153 insertions(+) create mode 100644 src/platformstatus/CMakeLists.txt create mode 100644 src/platformstatus/kded-platformstatus.desktop create mode 100644 src/platformstatus/org.kde.platformstatus.xml create mode 100644 src/platformstatus/platformstatus.cpp create mode 100644 src/platformstatus/platformstatus.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9e87656a5..281d146af 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,5 +2,6 @@ add_subdirectory(plasma) add_subdirectory(declarativeimports) #add_subdirectory(kpart) add_subdirectory(plasmapkg) +add_subdirectory(platformstatus) add_subdirectory(scriptengines) add_subdirectory(shell) diff --git a/src/platformstatus/CMakeLists.txt b/src/platformstatus/CMakeLists.txt new file mode 100644 index 000000000..30e46c614 --- /dev/null +++ b/src/platformstatus/CMakeLists.txt @@ -0,0 +1,10 @@ +set(kded_platformstatus_SRCS platformstatus.cpp ) + +kde4_add_plugin(kded_platformstatus ${kded_platformstatus_SRCS}) + +target_link_libraries(kded_platformstatus ${KDE4_KDECORE_LIBS} ${KCoreAddons_LIBRARIES} Qt5::DBus) + +install(TARGETS kded_platformstatus DESTINATION ${PLUGIN_INSTALL_DIR} ) +install( FILES kded-platformstatus.desktop DESTINATION ${SERVICES_INSTALL_DIR}/kded ) +install( FILES org.kde.platformstatus.xml DESTINATION ${DBUS_INTERFACES_INSTALL_DIR} ) + diff --git a/src/platformstatus/kded-platformstatus.desktop b/src/platformstatus/kded-platformstatus.desktop new file mode 100644 index 000000000..ea456977b --- /dev/null +++ b/src/platformstatus/kded-platformstatus.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Service +X-KDE-ServiceTypes=KDEDModule +X-KDE-Library=kded_platformstatus +X-KDE-DBus-ModuleName=plaformstatus +X-KDE-Kded-autoload=true +X-KDE-Kded-load-on-demand=false +Name=Platform Status +Comment=Tracks the current shell package and the platform definition strings. diff --git a/src/platformstatus/org.kde.platformstatus.xml b/src/platformstatus/org.kde.platformstatus.xml new file mode 100644 index 000000000..fc77a8e55 --- /dev/null +++ b/src/platformstatus/org.kde.platformstatus.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/platformstatus/platformstatus.cpp b/src/platformstatus/platformstatus.cpp new file mode 100644 index 000000000..31cc1f4db --- /dev/null +++ b/src/platformstatus/platformstatus.cpp @@ -0,0 +1,76 @@ +#include + +#include +#include + +#include +#include +#include + +const char *defaultPackage = "org.kde.desktop"; + +K_PLUGIN_FACTORY(PlatformStatusFactory, registerPlugin();) +K_EXPORT_PLUGIN(PlatformStatusFactory("platformstatus")) + +PlatformStatus::PlatformStatus(QObject *parent, const QVariantList &) + : KDEDModule(parent) +{ + QDBusConnection::sessionBus().registerObject("/PlatformStatus", this, + QDBusConnection::ExportAllProperties | + QDBusConnection::ExportAllSignals); + findShellPackage(false); + const QString globalrcPath = QStandardPaths::locate(QStandardPaths::ConfigLocation, "kdeglobals"); + connect(KDirWatch::self(), SIGNAL(dirty(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::DataLocation, "plasma/shells/" + package + "/"); + 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, "DesktopShell"); + 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); + } +} + +QString PlatformStatus::shellPackage() const +{ + return m_shellPackage; +} + +QStringList PlatformStatus::runtimePlatform() const +{ + return m_runtimePlatform; +} + +void PlatformStatus::fileDirtied(const QString &path) +{ + if (path.endsWith("kdeglobals")) { + findShellPackage(true); + } +} + +#include "platformstatus.moc" diff --git a/src/platformstatus/platformstatus.h b/src/platformstatus/platformstatus.h new file mode 100644 index 000000000..dd4804d4e --- /dev/null +++ b/src/platformstatus/platformstatus.h @@ -0,0 +1,38 @@ +#ifndef PLATFORMSTATUS_H +#define PLATFORMSTATUS_H + +#include + +#include + +class PlatformStatus : public KDEDModule +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "org.kde.PlatformStatus") + Q_PROPERTY(QString shellPackage READ shellPackage NOTIFY shellPackageChanged) + Q_PROPERTY(QStringList runtimePlatform READ runtimePlatform NOTIFY runtimePlatformChanged) + +public: + PlatformStatus(QObject *parent, const QVariantList &); + +public Q_SLOTS: + QString shellPackage() const; + QStringList runtimePlatform() const; + +Q_SIGNALS: + void shellPackageChanged(const QString &package); + void runtimePlatformChanged(const QStringList &runtimePlatform); + +private: + void findShellPackage(bool sendSignal); + +private Q_SLOTS: + void fileDirtied(const QString &path); + +private: + QString m_shellPackage; + QStringList m_runtimePlatform; +}; + +#endif + From 114de64ed48dc97f0f16ee681b52b23c55d3ac49 Mon Sep 17 00:00:00 2001 From: Aaron Seigo Date: Sun, 21 Apr 2013 18:16:50 +0200 Subject: [PATCH 2/4] correct the .desktop file --- src/platformstatus/kded-platformstatus.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platformstatus/kded-platformstatus.desktop b/src/platformstatus/kded-platformstatus.desktop index ea456977b..5c9bc5d96 100644 --- a/src/platformstatus/kded-platformstatus.desktop +++ b/src/platformstatus/kded-platformstatus.desktop @@ -1,7 +1,7 @@ [Desktop Entry] Type=Service X-KDE-ServiceTypes=KDEDModule -X-KDE-Library=kded_platformstatus +X-KDE-Library=platformstatus X-KDE-DBus-ModuleName=plaformstatus X-KDE-Kded-autoload=true X-KDE-Kded-load-on-demand=false From f1316f0ce2455d865d1771f75580ce8f3269777d Mon Sep 17 00:00:00 2001 From: Aaron Seigo Date: Sun, 21 Apr 2013 18:35:52 +0200 Subject: [PATCH 3/4] add the runtime platform entry --- src/shell/qmlpackages/desktop/contents/defaults | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/shell/qmlpackages/desktop/contents/defaults b/src/shell/qmlpackages/desktop/contents/defaults index 147d0ec4e..ada9419db 100644 --- a/src/shell/qmlpackages/desktop/contents/defaults +++ b/src/shell/qmlpackages/desktop/contents/defaults @@ -1,6 +1,8 @@ [Desktop] Containment=org.kde.desktop ToolBox=org.kde.toolbox +RuntimePlatform= + [Desktop][ContainmentActions] Ctrl;LeftButton=org.kde.standardmenu MiddleButton=org.kde.paste @@ -12,4 +14,4 @@ ToolBox=org.kde.toolbox Ctrl;LeftButton=org.kde.standardmenu [Theme] -Theme=default \ No newline at end of file +Theme=default From 5806fa8077082cc4dd01176c5278c1c355250658 Mon Sep 17 00:00:00 2001 From: Aaron Seigo Date: Sun, 21 Apr 2013 18:36:00 +0200 Subject: [PATCH 4/4] make it all work for reals --- src/platformstatus/platformstatus.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/platformstatus/platformstatus.cpp b/src/platformstatus/platformstatus.cpp index 31cc1f4db..fa466a781 100644 --- a/src/platformstatus/platformstatus.cpp +++ b/src/platformstatus/platformstatus.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -29,7 +30,9 @@ void PlatformStatus::findShellPackage(bool sendSignal) KConfigGroup group(KSharedConfig::openConfig("kdeglobals"), "DesktopShell"); const QString package = group.readEntry("shellPackage", defaultPackage); - const QString path = QStandardPaths::locate(QStandardPaths::DataLocation, "plasma/shells/" + package + "/"); + const QString path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, + "plasma/shells/" + package + '/', + QStandardPaths::LocateDirectory); if (path.isEmpty()) { if (package != defaultPackage) { group.deleteEntry("ShellPackage"); @@ -41,10 +44,10 @@ void PlatformStatus::findShellPackage(bool sendSignal) m_shellPackage = package; - QString runtimePlatform = group.readEntry("runtimePlatform", QString()); + QString runtimePlatform = group.readEntry("RuntimePlatform", QString()); KConfig packageDefaults(path + "contents/defaults", KConfig::SimpleConfig); - group = KConfigGroup(&packageDefaults, "DesktopShell"); - runtimePlatform = group.readEntry("runtimePlatform", runtimePlatform); + group = KConfigGroup(&packageDefaults, "Desktop"); + runtimePlatform = group.readEntry("RuntimePlatform", runtimePlatform); const bool runtimeChanged = runtimePlatform != m_runtimePlatform.join(','); if (runtimeChanged) { m_runtimePlatform = runtimePlatform.split(',');