diff --git a/app/src/handlers/systemhandler.cpp b/app/src/handlers/systemhandler.cpp index cb1f9135ad1f53eb9b66afcdd498aed969fd76df..64540080ff06be4992a161e822694761956c2413 100644 --- a/app/src/handlers/systemhandler.cpp +++ b/app/src/handlers/systemhandler.cpp @@ -110,7 +110,11 @@ bool SystemHandler::isApplicableType(const QString &installType) const << "gnome_shell_themes"; } else if (desktop == "xfce") { - applicableTypes << "wallpapers"; + applicableTypes << "wallpapers" + << "icons" + << "cursors" + << "gtk2_themes" + << "xfwm4_themes"; } return applicableTypes.contains(installType); @@ -121,22 +125,23 @@ bool SystemHandler::applyFile(const QString &path, const QString &installType) c { if (QFileInfo::exists(path) && isApplicableType(installType)) { auto desktop = desktopEnvironment(); + auto themeName = QFileInfo(path).fileName(); if (desktop == "kde") { if (installType == "wallpapers") { return applyKdeWallpaper(path); } else if (installType == "icons") { - return applyKdeIcon(path); + return applyKdeIcon(themeName); } else if (installType == "cursors") { - return applyKdeCursor(path); + return applyKdeCursor(themeName); } else if (installType == "plasma5_desktopthemes") { - return applyKdePlasmaDesktoptheme(path); + return applyKdePlasmaDesktoptheme(themeName); } else if (installType == "aurorae_themes") { - return applyKdeAuroraeTheme(path); + return applyKdeAuroraeTheme(themeName); } } else if (desktop == "gnome") { @@ -144,22 +149,34 @@ bool SystemHandler::applyFile(const QString &path, const QString &installType) c return applyGnomeWallpaper(path); } else if (installType == "icons") { - return applyGnomeIcon(path); + return applyGnomeIcon(themeName); } else if (installType == "cursors") { - return applyGnomeCursor(path); + return applyGnomeCursor(themeName); } else if (installType == "gtk3_themes") { - return applyGnomeGtk3Theme(path); + return applyGnomeGtk3Theme(themeName); } else if (installType == "gnome_shell_themes") { - return applyGnomeGnomeShellTheme(path); + return applyGnomeGnomeShellTheme(themeName); } } else if (desktop == "xfce") { if (installType == "wallpapers") { return applyXfceWallpaper(path); } + else if (installType == "icons") { + return applyXfceIcon(themeName); + } + else if (installType == "cursors") { + return applyXfceCursor(themeName); + } + else if (installType == "gtk2_themes") { + return applyXfceGtk2Theme(themeName); + } + else if (installType == "xfwm4_themes") { + return applyXfceXfwm4Theme(themeName); + } } } @@ -168,7 +185,7 @@ bool SystemHandler::applyFile(const QString &path, const QString &installType) c #endif #ifdef QTLIB_UNIX -bool SystemHandler::evaluateScriptWithPlasmaShell(const QString &script) const +bool SystemHandler::setConfigWithPlasmaShell(const QString &script) const { auto message = QDBusMessage::createMethodCall("org.kde.plasmashell", "/PlasmaShell", "org.kde.PlasmaShell", "evaluateScript"); message.setArguments(QVariantList() << QVariant(script)); @@ -192,62 +209,52 @@ bool SystemHandler::applyKdeWallpaper(const QString &path) const << "d.writeConfig('Image', 'file://" + path + "');" << "}"; - return evaluateScriptWithPlasmaShell(script); + return setConfigWithPlasmaShell(script); } -bool SystemHandler::applyKdeIcon(const QString &path) const +bool SystemHandler::applyKdeIcon(const QString &themeName) const { - auto themeName = QFileInfo(path).fileName(); - QString script; QTextStream out(&script); out << "var c = ConfigFile('kdeglobals');" << "c.group = 'Icons';" << "c.writeEntry('Theme', '" + themeName + "');"; - if (evaluateScriptWithPlasmaShell(script)) { - QProcess::startDetached("kquitapp5 plasmashell"); - QProcess::startDetached("kstart5 plasmashell"); + if (setConfigWithPlasmaShell(script)) { + QProcess::startDetached("kquitapp5 plasmashell && kstart5 plasmashell"); return true; } return false; } -bool SystemHandler::applyKdeCursor(const QString &path) const +bool SystemHandler::applyKdeCursor(const QString &themeName) const { - auto themeName = QFileInfo(path).fileName(); - QString script; QTextStream out(&script); out << "var c = ConfigFile('kcminputrc');" << "c.group = 'Mouse';" << "c.writeEntry('cursorTheme', '" + themeName + "');"; - return evaluateScriptWithPlasmaShell(script); + return setConfigWithPlasmaShell(script); } -bool SystemHandler::applyKdePlasmaDesktoptheme(const QString &path) const +bool SystemHandler::applyKdePlasmaDesktoptheme(const QString &themeName) const { - auto themeName = QFileInfo(path).fileName(); - QString script; QTextStream out(&script); out << "var c = ConfigFile('plasmarc');" << "c.group = 'Theme';" << "c.writeEntry('name', '" + themeName + "');"; - if (evaluateScriptWithPlasmaShell(script)) { - QProcess::startDetached("kquitapp5 plasmashell"); - QProcess::startDetached("kstart5 plasmashell"); + if (setConfigWithPlasmaShell(script)) { + QProcess::startDetached("kquitapp5 plasmashell && kstart5 plasmashell"); return true; } return false; } -bool SystemHandler::applyKdeAuroraeTheme(const QString &path) const +bool SystemHandler::applyKdeAuroraeTheme(const QString &themeName) const { - auto themeName = QFileInfo(path).fileName(); - QString script; QTextStream out(&script); out << "var c = ConfigFile('kwinrc');" @@ -255,57 +262,48 @@ bool SystemHandler::applyKdeAuroraeTheme(const QString &path) const << "c.writeEntry('library', 'org.kde.kwin.aurorae');" << "c.writeEntry('theme', '__aurorae__svg__" + themeName + "');"; - if (evaluateScriptWithPlasmaShell(script)) { - auto refreshMessage = QDBusMessage::createMethodCall("org.kde.KWin", "/KWin", "org.kde.KWin", "reconfigure"); - QDBusConnection::sessionBus().call(refreshMessage); + if (setConfigWithPlasmaShell(script)) { + auto message = QDBusMessage::createMethodCall("org.kde.KWin", "/KWin", "org.kde.KWin", "reconfigure"); + QDBusConnection::sessionBus().call(message); return true; } return false; } -bool SystemHandler::applyGnomeWallpaper(const QString &path) const +bool SystemHandler::setConfigWithGsettings(const QString &schema, const QString &key, const QString &value) const { - QStringList arguments{"set", "org.gnome.desktop.background", "picture-uri", "file://" + path}; - return QProcess::startDetached("gsettings", arguments); + return QProcess::startDetached("gsettings", QStringList() << "set" << schema << key << value); } -bool SystemHandler::applyGnomeIcon(const QString &path) const +bool SystemHandler::applyGnomeWallpaper(const QString &path) const { - auto themeName = QFileInfo(path).fileName(); - QStringList arguments{"set", "org.gnome.desktop.interface", "icon-theme", themeName}; - return QProcess::startDetached("gsettings", arguments); + return setConfigWithGsettings("org.gnome.desktop.background", "picture-uri", "file://" + path); } -bool SystemHandler::applyGnomeCursor(const QString &path) const +bool SystemHandler::applyGnomeIcon(const QString &themeName) const { - auto themeName = QFileInfo(path).fileName(); - QStringList arguments{"set", "org.gnome.desktop.interface", "cursor-theme", themeName}; - return QProcess::startDetached("gsettings", arguments); + return setConfigWithGsettings("org.gnome.desktop.interface", "icon-theme", themeName); } -bool SystemHandler::applyGnomeGtk3Theme(const QString &path) const +bool SystemHandler::applyGnomeCursor(const QString &themeName) const { - auto themeName = QFileInfo(path).fileName(); - QStringList arguments{"set", "org.gnome.desktop.interface", "gtk-theme", themeName}; - return QProcess::startDetached("gsettings", arguments); + return setConfigWithGsettings("org.gnome.desktop.interface", "cursor-theme", themeName); } -bool SystemHandler::applyGnomeGnomeShellTheme(const QString &path) const +bool SystemHandler::applyGnomeGtk3Theme(const QString &themeName) const { - auto themeName = QFileInfo(path).fileName(); - QStringList arguments{"set", "org.gnome.shell.extensions.user-theme", "name", themeName}; - return QProcess::startDetached("gsettings", arguments); + return setConfigWithGsettings("org.gnome.desktop.interface", "gtk-theme", themeName); } -bool SystemHandler::applyXfceWallpaper(const QString &path) const +bool SystemHandler::applyGnomeGnomeShellTheme(const QString &themeName) const { - QString channelValue = "xfce4-desktop"; - //QString propertyValue = "/backdrop/screen0/monitor0/image-path"; - QString propertyValue = "/backdrop/screen0/monitor0/workspace0/last-image"; - QDBusVariant valueValue(path); + return setConfigWithGsettings("org.gnome.shell.extensions.user-theme", "name", themeName); +} +bool SystemHandler::setConfigWithXfconf(const QString &channel, const QString &property, const QString &value) const +{ auto message = QDBusMessage::createMethodCall("org.xfce.Xfconf", "/org/xfce/Xfconf", "org.xfce.Xfconf", "SetProperty"); - message.setArguments(QVariantList() << QVariant(channelValue) << QVariant(propertyValue) << QVariant::fromValue(valueValue)); + message.setArguments(QVariantList() << QVariant(channel) << QVariant(property) << QVariant::fromValue(QDBusVariant(value))); auto reply = QDBusConnection::sessionBus().call(message); if (reply.type() == QDBusMessage::ErrorMessage) { @@ -314,4 +312,29 @@ bool SystemHandler::applyXfceWallpaper(const QString &path) const } return true; } + +bool SystemHandler::applyXfceWallpaper(const QString &path) const +{ + return setConfigWithXfconf("xfce4-desktop", "/backdrop/screen0/monitor0/workspace0/last-image", path); +} + +bool SystemHandler::applyXfceIcon(const QString &themeName) const +{ + return setConfigWithXfconf("xsettings", "/Net/IconThemeName", themeName); +} + +bool SystemHandler::applyXfceCursor(const QString &themeName) const +{ + return setConfigWithXfconf("xsettings", "/Gtk/CursorThemeName", themeName); +} + +bool SystemHandler::applyXfceGtk2Theme(const QString &themeName) const +{ + return setConfigWithXfconf("xsettings", "/Net/ThemeName", themeName); +} + +bool SystemHandler::applyXfceXfwm4Theme(const QString &themeName) const +{ + return setConfigWithXfconf("xfwm4", "/general/theme", themeName); +} #endif diff --git a/app/src/handlers/systemhandler.h b/app/src/handlers/systemhandler.h index 06cd247a85ddef772a5752a2afe21779ff7d4828..8a346191ae947cd31c3533d7ebf1e9af01e5c1e5 100644 --- a/app/src/handlers/systemhandler.h +++ b/app/src/handlers/systemhandler.h @@ -23,19 +23,25 @@ public slots: private: #ifdef QTLIB_UNIX - bool evaluateScriptWithPlasmaShell(const QString &script) const; + bool setConfigWithPlasmaShell(const QString &script) const; 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 applyKdeIcon(const QString &themeName) const; + bool applyKdeCursor(const QString &themeName) const; + bool applyKdePlasmaDesktoptheme(const QString &themeName) const; + bool applyKdeAuroraeTheme(const QString &themeName) const; + bool setConfigWithGsettings(const QString &schema, const QString &key, const QString &value) const; bool applyGnomeWallpaper(const QString &path) const; - bool applyGnomeIcon(const QString &path) const; - bool applyGnomeCursor(const QString &path) const; - bool applyGnomeGtk3Theme(const QString &path) const; - bool applyGnomeGnomeShellTheme(const QString &path) const; + bool applyGnomeIcon(const QString &themeName) const; + bool applyGnomeCursor(const QString &themeName) const; + bool applyGnomeGtk3Theme(const QString &themeName) const; + bool applyGnomeGnomeShellTheme(const QString &themeName) const; + bool setConfigWithXfconf(const QString &channel, const QString &property, const QString &value) const; bool applyXfceWallpaper(const QString &path) const; + bool applyXfceIcon(const QString &themeName) const; + bool applyXfceCursor(const QString &themeName) const; + bool applyXfceGtk2Theme(const QString &themeName) const; + bool applyXfceXfwm4Theme(const QString &themeName) const; #endif };