diff --git a/src/qmlcontrols/kquickcontrolsaddons/CMakeLists.txt b/src/qmlcontrols/kquickcontrolsaddons/CMakeLists.txt --- a/src/qmlcontrols/kquickcontrolsaddons/CMakeLists.txt +++ b/src/qmlcontrols/kquickcontrolsaddons/CMakeLists.txt @@ -31,6 +31,7 @@ Qt5::Qml Qt5::Gui KF5::IconThemes + KF5::KIOWidgets KF5::QuickAddons KF5::ConfigCore ${KQUICKCONTROLSADDONS_EXTRA_LIBS}) diff --git a/src/qmlcontrols/kquickcontrolsaddons/kcmshell.h b/src/qmlcontrols/kquickcontrolsaddons/kcmshell.h --- a/src/qmlcontrols/kquickcontrolsaddons/kcmshell.h +++ b/src/qmlcontrols/kquickcontrolsaddons/kcmshell.h @@ -33,6 +33,36 @@ public Q_SLOTS: void open(const QStringList &names) const; + /** + * Opens the specified module in System Settings. Only a single KCM name may + * be provided. + * + * @code + * onClicked: KCMShell.openSystemSettings("kcm_kscreen") + * @endcode + * + * @param name A single kcm name to open in System Settings. Opening multiple + * KCMs using this function is not supported; to do that, use kcmshell.open. + * + * @since 5.71 + */ + void openSystemSettings(const QString &name) const; + + /** + * Opens the specified module in InfCenter. Only a single KCM name may + * be provided. + * + * @code + * onClicked: KCMShell.openInfoCenter("kcm_energy") + * @endcode + * + * @param name A single kcm name to open in Info Center. Opening multiple + * KCMs using this function is not supported; to do that, use kcmshell.open. + * + * @since 5.71 + */ + void openInfoCenter(const QString &name) const; + /** * Check which of the given control modules the user is * allowed to access diff --git a/src/qmlcontrols/kquickcontrolsaddons/kcmshell.cpp b/src/qmlcontrols/kquickcontrolsaddons/kcmshell.cpp --- a/src/qmlcontrols/kquickcontrolsaddons/kcmshell.cpp +++ b/src/qmlcontrols/kquickcontrolsaddons/kcmshell.cpp @@ -22,6 +22,7 @@ #include #include +#include KCMShell::KCMShell(QObject *parent) : QObject(parent) { @@ -38,6 +39,26 @@ QProcess::startDetached(QStringLiteral("kcmshell5"), names); } +void KCMShell::openSystemSettings(const QString &name) const +{ + auto service = KService::serviceByDesktopName(QStringLiteral("systemsettings")); + if (service) { + QProcess::startDetached(QStringLiteral("systemsettings5"), QStringList(name)); + } else { + QProcess::startDetached(QStringLiteral("kcmshell5"), QStringList(name)); + } +} + +void KCMShell::openInfoCenter(const QString &name) const +{ + auto service = KService::serviceByDesktopName(QStringLiteral("systemsettings")); + if (service) { + QProcess::startDetached(QStringLiteral("kinfocenter"), QStringList(name)); + } else { + QProcess::startDetached(QStringLiteral("kcmshell5"), QStringList(name)); + } +} + QStringList KCMShell::authorize(const QStringList &menuIds) const { return KAuthorized::authorizeControlModules(menuIds);