Commit 46fcd51d authored by Marco Martin's avatar Marco Martin

Add a commandline tool to switch lnf package

Summary:
using the kcm c++ itself to do the switch, have a tool
that can be used to switch lnf package from the command line

Test Plan: running the tool has the same effect of chosing a lnf trough the kcm

Reviewers: #plasma, davidedmundson

Reviewed By: #plasma, davidedmundson

Subscribers: davidedmundson, plasma-devel

Tags: #plasma

Differential Revision: https://phabricator.kde.org/D9411
parent ad602c3a
......@@ -57,3 +57,49 @@ if(BUILD_TESTING)
endif()
kpackage_install_package(package kcm_lookandfeel kcms)
###### Command line tool
set(lookandfeeltool_SRCS
lnftool.cpp
kcm.cpp
../krdb/krdb.cpp
../cursortheme/xcursor/cursortheme.cpp
../cursortheme/xcursor/xcursortheme.cpp
)
qt5_add_dbus_interface(lookandfeeltool_SRCS ${klauncher_xml} klauncher_iface)
add_executable(lookandfeeltool ${lookandfeeltool_SRCS})
target_link_libraries(lookandfeeltool
KF5::KIOWidgets
KF5::CoreAddons
KF5::KCMUtils
KF5::I18n
#TODO:kpackage
KF5::Plasma
KF5::PlasmaQuick
KF5::KDELibs4Support
KF5::Declarative
KF5::QuickAddons
KF5::NewStuff
Qt5::DBus
Qt5::Widgets
Qt5::QuickWidgets
${X11_LIBRARIES}
)
if(X11_FOUND)
target_link_libraries(lookandfeeltool Qt5::X11Extras)
endif()
if (X11_Xcursor_FOUND)
target_link_libraries(lookandfeeltool ${X11_Xcursor_LIB})
endif ()
if (X11_Xfixes_FOUND)
target_link_libraries(lookandfeeltool ${X11_Xfixes_LIB})
endif ()
install( TARGETS lookandfeeltool ${INSTALL_TARGETS_DEFAULT_ARGS} )
......@@ -380,12 +380,14 @@ void KCMLookandFeel::save()
cg = KConfigGroup(oldConf, QStringLiteral("Autostart"));
const QStringList autostartServices = cg.readEntry("Services", QStringList());
for (const QString &serviceFile : autostartServices) {
KService service(serviceFile + QStringLiteral(".desktop"));
KAutostart as(serviceFile);
as.setAutostarts(false);
//FIXME: quite ugly way to stop things, and what about non KDE things?
QProcess::startDetached(QStringLiteral("kquitapp5"), {QStringLiteral("--service"), service.property(QStringLiteral("X-DBUS-ServiceName")).toString()});
if (qEnvironmentVariableIsSet("KDE_FULL_SESSION")) {
for (const QString &serviceFile : autostartServices) {
KService service(serviceFile + QStringLiteral(".desktop"));
KAutostart as(serviceFile);
as.setAutostarts(false);
//FIXME: quite ugly way to stop things, and what about non KDE things?
QProcess::startDetached(QStringLiteral("kquitapp5"), {QStringLiteral("--service"), service.property(QStringLiteral("X-DBUS-ServiceName")).toString()});
}
}
}
//Set all the stuff in the new lnf to autostart
......@@ -398,7 +400,9 @@ void KCMLookandFeel::save()
KAutostart as(serviceFile);
as.setCommand(service.exec());
as.setAutostarts(true);
KRun::runApplication(service, {}, nullptr);
if (qEnvironmentVariableIsSet("KDE_FULL_SESSION")) {
KRun::runApplication(service, {}, nullptr);
}
}
}
}
......
/*
* Copyright 2017 Marco MArtin <mart@kde.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2,
* or (at your option) any later version.
*
* This program 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 General Public License for more details
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "kcm.h"
#include <iostream>
#include <qcommandlineparser.h>
#include <QApplication>
#include <QDebug>
// Frameworks
#include <KAboutData>
#include <klocalizedstring.h>
#include <KPackage/Package>
#include <KPackage/PackageLoader>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
const QString description = i18n("Look and feel tool");
const char version[] = "1.0";
// About data
KAboutData aboutData("lookandfeeltool", i18n("Look and feel tool"), version, i18n("Command line tool to apply look and feel packages."), KAboutLicense::GPL, i18n("Copyright 2017, Marco Martin"));
aboutData.addAuthor(i18n("Marco Martin"), i18n("Maintainer"), "mart@kde.org");
aboutData.setDesktopFileName("org.kde.lookandfeeltool");
KAboutData::setApplicationData(aboutData);
const static auto _l = QStringLiteral("list");
const static auto _a = QStringLiteral("apply");
const static auto _r = QStringLiteral("resetLayout");
QCommandLineOption _list = QCommandLineOption(QStringList() << QStringLiteral("l") << _l,
i18n("List available Look and feel packages"));
QCommandLineOption _apply = QCommandLineOption(QStringList() << QStringLiteral("a") << _a,
i18n("Apply a look and feel package"), i18n("packagename"));
QCommandLineOption _resetLayout = QCommandLineOption(QStringList() <<
_r, i18n("Reset the Plasma Desktop layout"));
QCommandLineParser parser;
parser.addOption(_list);
parser.addOption(_apply);
parser.addOption(_resetLayout);
aboutData.setupCommandLine(&parser);
parser.process(app);
aboutData.processCommandLine(&parser);
if (!parser.isSet(_list) && !parser.isSet(_apply)) {
parser.showHelp();
}
if (parser.isSet(_list)) {
QList<KPluginMetaData> pkgs = KPackage::PackageLoader::self()->listPackages("Plasma/LookAndFeel");
for (const KPluginMetaData &data : pkgs) {
std::cout << data.pluginId().toStdString() << std::endl;
}
} else if (parser.isSet(_apply)) {
KPackage::Package p = KPackage::PackageLoader::self()->loadPackage("Plasma/LookAndFeel");
p.setPath(parser.value(_apply));
//can't use package.isValid as lnf packages always fallback, even when not existing
if (p.metadata().pluginId() != parser.value(_apply)) {
std::cout << "Unable to find the look and feel package named " << parser.value(_apply).toStdString() << std::endl;
return 1;
}
KCMLookandFeel *kcm = new KCMLookandFeel(nullptr, QVariantList());
kcm->load();
kcm->setResetDefaultLayout(parser.isSet(_resetLayout));
kcm->setSelectedPlugin(parser.value(_apply));
kcm->save();
delete kcm;
}
return 0;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment