diff --git a/CMakeLists.txt b/CMakeLists.txt index 04ab141fff..f595d64fd0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -634,6 +634,7 @@ ecm_install_icons( add_subdirectory(qml) add_subdirectory(autotests) add_subdirectory(tests) +add_subdirectory(packageplugins) if (KF5DocTools_FOUND) add_subdirectory(doc) diff --git a/kcmkwin/kwintabbox/main.cpp b/kcmkwin/kwintabbox/main.cpp index 5e42cf7ccf..efd52c8308 100644 --- a/kcmkwin/kwintabbox/main.cpp +++ b/kcmkwin/kwintabbox/main.cpp @@ -197,8 +197,7 @@ void KWinTabBoxConfig::initLayoutLists() QString coverswitch = BuiltInEffects::effectData(BuiltInEffect::CoverSwitch).displayName; QString flipswitch = BuiltInEffects::effectData(BuiltInEffect::FlipSwitch).displayName; - KServiceTypeTrader* trader = KServiceTypeTrader::self(); - KService::List offers = trader->query("KWin/WindowSwitcher"); + QList offers = KPackage::PackageLoader::self()->listPackages("KWin/WindowSwitcher"); QStringList layoutNames, layoutPlugins, layoutPaths; const auto lnfPackages = availableLnFPackages(); @@ -209,15 +208,16 @@ void KWinTabBoxConfig::initLayoutLists() layoutPaths << package.filePath("windowswitcher", QStringLiteral("WindowSwitcher.qml")); } - foreach (KService::Ptr service, offers) { - const QString pluginName = service->property("X-KDE-PluginInfo-Name").toString(); - if (service->property("X-Plasma-API").toString() != "declarativeappletscript") { + for (const auto &offer : offers) { + const QString pluginName = offer.pluginId(); + if (offer.value("X-Plasma-API") != "declarativeappletscript") { continue; } - if (service->property("X-KWin-Exclude-Listing").toBool()) { + //we don't have a proper servicetype + if (offer.value("X-KWin-Exclude-Listing") == QStringLiteral("true")) { continue; } - const QString scriptName = service->property("X-Plasma-MainScript").toString(); + const QString scriptName = offer.value("X-Plasma-MainScript"); const QString scriptFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QLatin1String("kwin/tabbox/") + pluginName + QLatin1String("/contents/") + scriptName); @@ -225,7 +225,7 @@ void KWinTabBoxConfig::initLayoutLists() continue; } - layoutNames << service->name(); + layoutNames << offer.name(); layoutPlugins << pluginName; layoutPaths << scriptFile; } diff --git a/packageplugins/CMakeLists.txt b/packageplugins/CMakeLists.txt new file mode 100644 index 0000000000..8c784b3538 --- /dev/null +++ b/packageplugins/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(scripts) +add_subdirectory(windowswitcher) diff --git a/packageplugins/scripts/CMakeLists.txt b/packageplugins/scripts/CMakeLists.txt new file mode 100644 index 0000000000..f0a5636c4d --- /dev/null +++ b/packageplugins/scripts/CMakeLists.txt @@ -0,0 +1,16 @@ +add_definitions(-DTRANSLATION_DOMAIN=\"kwin_package_scripts\") + +set(scripts_SRCS + scripts.cpp +) + +add_library(kwin_packagestructure_scripts MODULE ${scripts_SRCS}) + +target_link_libraries(kwin_packagestructure_scripts + KF5::I18n + KF5::Package +) + +kcoreaddons_desktop_to_json(kwin_packagestructure_scripts kwin-packagestructure-scripts.desktop) + +install(TARGETS kwin_packagestructure_scripts DESTINATION ${KDE_INSTALL_PLUGINDIR}/kpackage/packagestructure) diff --git a/packageplugins/scripts/kwin-packagestructure-scripts.desktop b/packageplugins/scripts/kwin-packagestructure-scripts.desktop new file mode 100644 index 0000000000..81a9401029 --- /dev/null +++ b/packageplugins/scripts/kwin-packagestructure-scripts.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=KWin Script +Type=Service +X-KDE-ServiceTypes=KPackage/PackageStructure +X-KDE-Library=kwin_packagestructure_scripts + +X-KDE-PluginInfo-Author=Marco Martin +X-KDE-PluginInfo-Email=notmart@gmail.com +X-KDE-PluginInfo-Name=KWin/Script +X-KDE-PluginInfo-Version=1 diff --git a/packageplugins/scripts/scripts.cpp b/packageplugins/scripts/scripts.cpp new file mode 100644 index 0000000000..4a415142f0 --- /dev/null +++ b/packageplugins/scripts/scripts.cpp @@ -0,0 +1,62 @@ +/****************************************************************************** +* Copyright 2017 by Marco Martin * +* * +* This library is free software; you can redistribute it and/or * +* modify it under the terms of the GNU Library General Public * +* License as published by the Free Software Foundation; either * +* version 2 of the License, or (at your option) any later version. * +* * +* This library is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +* Library General Public License for more details. * +* * +* You should have received a copy of the GNU Library General Public License * +* along with this library; see the file COPYING.LIB. If not, write to * +* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * +* Boston, MA 02110-1301, USA. * +*******************************************************************************/ + +#include "scripts.h" + +#include + +void ScriptsPackage::initPackage(KPackage::Package *package) +{ + package->setDefaultPackageRoot(QStringLiteral("kwin/scripts/")); + + package->addDirectoryDefinition("config", QStringLiteral("config"), i18n("Configuration Definitions")); + QStringList mimetypes; + mimetypes << QStringLiteral("text/xml"); + package->setMimeTypes("config", mimetypes); + + package->addDirectoryDefinition("ui", QStringLiteral("ui"), i18n("User Interface")); + + package->addDirectoryDefinition("code", QStringLiteral("code"), i18n("Executable Scripts")); + + package->addFileDefinition("mainscript", QStringLiteral("code/main.js"), i18n("Main Script File")); + package->setRequired("mainscript", true); + + mimetypes.clear(); + mimetypes << QStringLiteral("text/plain"); + package->setMimeTypes("scripts", mimetypes); +} + +void ScriptsPackage::pathChanged(KPackage::Package *package) +{ + if (package->path().isEmpty()) { + return; + } + + KPluginMetaData md(package->metadata().metaDataFileName()); + QString mainScript = md.value("X-Plasma-MainScript"); + + if (!mainScript.isEmpty()) { + package->addFileDefinition("mainscript", mainScript, i18n("Main Script File")); + } +} + +K_EXPORT_KPACKAGE_PACKAGE_WITH_JSON(ScriptsPackage, "kwin-packagestructure-scripts.json") + +#include "scripts.moc" + diff --git a/packageplugins/scripts/scripts.h b/packageplugins/scripts/scripts.h new file mode 100644 index 0000000000..b5b7035240 --- /dev/null +++ b/packageplugins/scripts/scripts.h @@ -0,0 +1,33 @@ +/****************************************************************************** +* Copyright 2017 by Marco Martin * +* * +* This library is free software; you can redistribute it and/or * +* modify it under the terms of the GNU Library General Public * +* License as published by the Free Software Foundation; either * +* version 2 of the License, or (at your option) any later version. * +* * +* This library is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +* Library General Public License for more details. * +* * +* You should have received a copy of the GNU Library General Public License * +* along with this library; see the file COPYING.LIB. If not, write to * +* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * +* Boston, MA 02110-1301, USA. * +*******************************************************************************/ + +#ifndef SCRIPTSPACKAGE_H +#define SCRIPTSPACKAGE_H + +#include + +class ScriptsPackage : public KPackage::PackageStructure +{ +public: + ScriptsPackage(QObject*, const QVariantList &) {} + void initPackage(KPackage::Package *package) Q_DECL_OVERRIDE; + void pathChanged(KPackage::Package *package) Q_DECL_OVERRIDE; +}; + +#endif diff --git a/packageplugins/windowswitcher/CMakeLists.txt b/packageplugins/windowswitcher/CMakeLists.txt new file mode 100644 index 0000000000..d0496d4ec1 --- /dev/null +++ b/packageplugins/windowswitcher/CMakeLists.txt @@ -0,0 +1,16 @@ +add_definitions(-DTRANSLATION_DOMAIN=\"kwin_package_windowswitcher\") + +set(windowswitcher_SRCS + windowswitcher.cpp +) + +add_library(kwin_packagestructure_windowswitcher MODULE ${windowswitcher_SRCS}) + +target_link_libraries(kwin_packagestructure_windowswitcher + KF5::I18n + KF5::Package +) + +kcoreaddons_desktop_to_json(kwin_packagestructure_windowswitcher kwin-packagestructure-windowswitcher.desktop) + +install(TARGETS kwin_packagestructure_windowswitcher DESTINATION ${KDE_INSTALL_PLUGINDIR}/kpackage/packagestructure) diff --git a/packageplugins/windowswitcher/kwin-packagestructure-windowswitcher.desktop b/packageplugins/windowswitcher/kwin-packagestructure-windowswitcher.desktop new file mode 100644 index 0000000000..0d89d87461 --- /dev/null +++ b/packageplugins/windowswitcher/kwin-packagestructure-windowswitcher.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=KWin Window Switcher +Type=Service +X-KDE-ServiceTypes=KPackage/PackageStructure +X-KDE-Library=kwin_packagestructure_windowswitcher + +X-KDE-PluginInfo-Author=Marco Martin +X-KDE-PluginInfo-Email=notmart@gmail.com +X-KDE-PluginInfo-Name=KWin/WindowSwitcher +X-KDE-PluginInfo-Version=1 diff --git a/packageplugins/windowswitcher/windowswitcher.cpp b/packageplugins/windowswitcher/windowswitcher.cpp new file mode 100644 index 0000000000..a32d9533a9 --- /dev/null +++ b/packageplugins/windowswitcher/windowswitcher.cpp @@ -0,0 +1,62 @@ +/****************************************************************************** +* Copyright 2017 by Marco Martin * +* * +* This library is free software; you can redistribute it and/or * +* modify it under the terms of the GNU Library General Public * +* License as published by the Free Software Foundation; either * +* version 2 of the License, or (at your option) any later version. * +* * +* This library is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +* Library General Public License for more details. * +* * +* You should have received a copy of the GNU Library General Public License * +* along with this library; see the file COPYING.LIB. If not, write to * +* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * +* Boston, MA 02110-1301, USA. * +*******************************************************************************/ + +#include "windowswitcher.h" + +#include + +void SwitcherPackage::initPackage(KPackage::Package *package) +{ + package->setDefaultPackageRoot(QStringLiteral("kwin/tabbox/")); + + package->addDirectoryDefinition("config", QStringLiteral("config"), i18n("Configuration Definitions")); + QStringList mimetypes; + mimetypes << QStringLiteral("text/xml"); + package->setMimeTypes("config", mimetypes); + + package->addDirectoryDefinition("ui", QStringLiteral("ui"), i18n("User Interface")); + + package->addDirectoryDefinition("code", QStringLiteral("code"), i18n("Executable windowswitcher")); + + package->addFileDefinition("mainscript", QStringLiteral("ui/main.qml"), i18n("Main Script File")); + package->setRequired("mainscript", true); + + mimetypes.clear(); + mimetypes << QStringLiteral("text/plain"); + package->setMimeTypes("windowswitcher", mimetypes); +} + +void SwitcherPackage::pathChanged(KPackage::Package *package) +{ + if (package->path().isEmpty()) { + return; + } + + KPluginMetaData md(package->metadata().metaDataFileName()); + QString mainScript = md.value("X-Plasma-MainScript"); + + if (!mainScript.isEmpty()) { + package->addFileDefinition("mainscript", mainScript, i18n("Main Script File")); + } +} + +K_EXPORT_KPACKAGE_PACKAGE_WITH_JSON(SwitcherPackage, "kwin-packagestructure-windowswitcher.json") + +#include "windowswitcher.moc" + diff --git a/packageplugins/windowswitcher/windowswitcher.h b/packageplugins/windowswitcher/windowswitcher.h new file mode 100644 index 0000000000..74bbdcc8fc --- /dev/null +++ b/packageplugins/windowswitcher/windowswitcher.h @@ -0,0 +1,33 @@ +/****************************************************************************** +* Copyright 2017 by Marco Martin * +* * +* This library is free software; you can redistribute it and/or * +* modify it under the terms of the GNU Library General Public * +* License as published by the Free Software Foundation; either * +* version 2 of the License, or (at your option) any later version. * +* * +* This library is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * +* Library General Public License for more details. * +* * +* You should have received a copy of the GNU Library General Public License * +* along with this library; see the file COPYING.LIB. If not, write to * +* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * +* Boston, MA 02110-1301, USA. * +*******************************************************************************/ + +#ifndef SWITCHERPACKAGE_H +#define SWITCHERPACKAGE_H + +#include + +class SwitcherPackage : public KPackage::PackageStructure +{ +public: + SwitcherPackage(QObject*, const QVariantList &) {} + void initPackage(KPackage::Package *package) Q_DECL_OVERRIDE; + void pathChanged(KPackage::Package *package) Q_DECL_OVERRIDE; +}; + +#endif