diff --git a/app/src/handlers/systemhandler.cpp b/app/src/handlers/systemhandler.cpp index 461cbce430c7a462b49dc837e9c42ea1c327eef7..f145dff4f9ddf09b2a2d0f4cdc2e72a0fe6d2e4d 100644 --- a/app/src/handlers/systemhandler.cpp +++ b/app/src/handlers/systemhandler.cpp @@ -96,7 +96,11 @@ bool SystemHandler::isApplicableType(const QString &installType) const QStringList applicableTypes; if (desktop == "kde") { - applicableTypes << "wallpapers"; + applicableTypes << "wallpapers" + << "icons" + << "cursors" + << "plasma_desktopthemes" + << "aurorae_themes"; } else if (desktop == "gnome") { applicableTypes << "wallpapers" @@ -122,6 +126,18 @@ bool SystemHandler::applyFile(const QString &path, const QString &installType) c if (installType == "wallpapers") { return applyKdeWallpaper(path); } + else if (installType == "icons") { + return applyKdeIcon(path); + } + else if (installType == "cursors") { + return applyKdeCursor(path); + } + else if (installType == "plasma_desktopthemes") { + return applyKdePlasmaDesktoptheme(path); + } + else if (installType == "aurorae_themes") { + return applyKdeAuroraeTheme(path); + } } else if (desktop == "gnome") { if (installType == "wallpapers") { @@ -179,6 +195,116 @@ bool SystemHandler::applyKdeWallpaper(const QString &path) const return true; } +bool SystemHandler::applyKdeIcon(const QString &path) const +{ + auto themeName = QFileInfo(path).fileName(); + auto message = QDBusMessage::createMethodCall("org.kde.plasmashell", "/PlasmaShell", "org.kde.PlasmaShell", "evaluateScript"); + + QString script; + QTextStream out(&script); + out << "var c = ConfigFile('kdeglobals');" + << "c.group = 'Icons';" + << "c.writeEntry('Theme', '" + themeName + "');"; + + QVariantList arguments; + arguments << QVariant(script); + message.setArguments(arguments); + + auto reply = QDBusConnection::sessionBus().call(message); + + if (reply.type() == QDBusMessage::ErrorMessage) { + qWarning() << reply.errorMessage(); + return false; + } + + QProcess::startDetached("kquitapp5 plasmashell"); + QProcess::startDetached("kstart5 plasmashell"); + + return true; +} + +bool SystemHandler::applyKdeCursor(const QString &path) const +{ + auto themeName = QFileInfo(path).fileName(); + auto message = QDBusMessage::createMethodCall("org.kde.plasmashell", "/PlasmaShell", "org.kde.PlasmaShell", "evaluateScript"); + + QString script; + QTextStream out(&script); + out << "var c = ConfigFile('kcminputrc');" + << "c.group = 'Mouse';" + << "c.writeEntry('cursorTheme', '" + themeName + "');"; + + QVariantList arguments; + arguments << QVariant(script); + message.setArguments(arguments); + + auto reply = QDBusConnection::sessionBus().call(message); + + if (reply.type() == QDBusMessage::ErrorMessage) { + qWarning() << reply.errorMessage(); + return false; + } + + return true; +} + +bool SystemHandler::applyKdePlasmaDesktoptheme(const QString &path) const +{ + auto themeName = QFileInfo(path).fileName(); + auto message = QDBusMessage::createMethodCall("org.kde.plasmashell", "/PlasmaShell", "org.kde.PlasmaShell", "evaluateScript"); + + QString script; + QTextStream out(&script); + out << "var c = ConfigFile('plasmarc');" + << "c.group = 'Theme';" + << "c.writeEntry('name', '" + themeName + "');"; + + QVariantList arguments; + arguments << QVariant(script); + message.setArguments(arguments); + + auto reply = QDBusConnection::sessionBus().call(message); + + if (reply.type() == QDBusMessage::ErrorMessage) { + qWarning() << reply.errorMessage(); + return false; + } + + QProcess::startDetached("kquitapp5 plasmashell"); + QProcess::startDetached("kstart5 plasmashell"); + + return true; +} + +bool SystemHandler::applyKdeAuroraeTheme(const QString &path) const +{ + auto themeName = QFileInfo(path).fileName(); + auto message = QDBusMessage::createMethodCall("org.kde.plasmashell", "/PlasmaShell", "org.kde.PlasmaShell", "evaluateScript"); + + QString script; + QTextStream out(&script); + out << "var c = ConfigFile('kwinrc');" + << "c.group = 'org.kde.kdecoration2';" + << "c.writeEntry('library', 'org.kde.kwin.aurorae');" + << "c.writeEntry('theme', '__aurorae__svg__" + themeName + "');"; + + QVariantList arguments; + arguments << QVariant(script); + message.setArguments(arguments); + + auto reply = QDBusConnection::sessionBus().call(message); + + if (reply.type() == QDBusMessage::ErrorMessage) { + qWarning() << reply.errorMessage(); + return false; + } + + auto refreshMessage = QDBusMessage::createMethodCall("org.kde.KWin", "/KWin", "org.kde.KWin", "reconfigure"); + QDBusConnection::sessionBus().call(refreshMessage); + + return true; +} + bool SystemHandler::applyGnomeWallpaper(const QString &path) const { QStringList arguments{"set", "org.gnome.desktop.background", "picture-uri", "file://" + path}; diff --git a/app/src/handlers/systemhandler.h b/app/src/handlers/systemhandler.h index 3ea555e5983718de0a9fae0b17ddc8983d7e39c8..f9bd1ee4082652a9bb0c6b5c6941f026ae2b006d 100644 --- a/app/src/handlers/systemhandler.h +++ b/app/src/handlers/systemhandler.h @@ -24,6 +24,10 @@ public slots: private: #ifdef QTLIB_UNIX bool applyKdeWallpaper(const QString &path) const; + bool applyKdeIcon(const QString &path) const; + bool applyKdeCursor(const QString &path) const; + bool applyKdePlasmaDesktoptheme(const QString &path) const; + bool applyKdeAuroraeTheme(const QString &path) const; bool applyGnomeWallpaper(const QString &path) const; bool applyGnomeIcon(const QString &path) const;