File indexing completed on 2024-05-12 17:07:07
0001 /* 0002 SPDX-FileCopyrightText: 2015-2016 Ivan Cukic <ivan.cukic@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "ExtraActivitiesInterface.h" 0008 0009 #include <KActionCollection> 0010 #include <KActivities/Info> 0011 #include <KGlobalAccel> 0012 #include <KLocalizedString> 0013 #include <QAction> 0014 0015 #include <memory> 0016 #include <utils/d_ptr_implementation.h> 0017 0018 #include "common/dbus/common.h" 0019 #include "features_interface.h" 0020 0021 #define ENABLE_QJSVALUE_CONTINUATION 0022 #include "utils/continue_with.h" 0023 0024 class ExtraActivitiesInterface::Private 0025 { 0026 public: 0027 Private(ExtraActivitiesInterface *q) 0028 : features(new org::kde::ActivityManager::Features(QStringLiteral(KAMD_DBUS_SERVICE), 0029 QStringLiteral(KAMD_DBUS_FEATURES_PATH), 0030 QDBusConnection::sessionBus(), 0031 q)) 0032 , activitiesActionCollection(new KActionCollection(q, QStringLiteral("ActivityManager"))) 0033 { 0034 activitiesActionCollection->setComponentDisplayName(i18n("Activities")); 0035 activitiesActionCollection->setConfigGlobal(true); 0036 } 0037 0038 ~Private() 0039 { 0040 } 0041 0042 QAction *actionForActivity(const QString &activity) 0043 { 0044 if (!activityActions.contains(activity)) { 0045 auto action = activitiesActionCollection->addAction(QStringLiteral("switch-to-activity-") + activity); 0046 0047 activityActions[activity] = action; 0048 action->setProperty("isConfigurationAction", true); 0049 0050 KGlobalAccel::self()->setShortcut(action, {}); 0051 } 0052 0053 return activityActions[activity]; 0054 } 0055 0056 std::unique_ptr<org::kde::ActivityManager::Features> features; 0057 std::unique_ptr<KActionCollection> activitiesActionCollection; 0058 QHash<QString, QAction *> activityActions; 0059 }; 0060 0061 ExtraActivitiesInterface::ExtraActivitiesInterface(QObject *parent) 0062 : QObject(parent) 0063 , d(this) 0064 { 0065 } 0066 0067 ExtraActivitiesInterface::~ExtraActivitiesInterface() 0068 { 0069 } 0070 0071 void ExtraActivitiesInterface::setIsPrivate(const QString &activity, bool isPrivate, QJSValue callback) 0072 { 0073 auto result = d->features->SetValue(QStringLiteral("org.kde.ActivityManager.Resources.Scoring/isOTR/") + activity, QDBusVariant(isPrivate)); 0074 0075 auto *watcher = new QDBusPendingCallWatcher(result, this); 0076 0077 QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [callback](QDBusPendingCallWatcher *watcher) mutable { 0078 callback.call(); 0079 watcher->deleteLater(); 0080 }); 0081 } 0082 0083 void ExtraActivitiesInterface::getIsPrivate(const QString &activity, QJSValue callback) 0084 { 0085 auto result = d->features->GetValue(QStringLiteral("org.kde.ActivityManager.Resources.Scoring/isOTR/") + activity); 0086 0087 auto *watcher = new QDBusPendingCallWatcher(result, this); 0088 0089 QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [callback, result](QDBusPendingCallWatcher *watcher) mutable { 0090 QDBusPendingReply<QDBusVariant> reply = *watcher; 0091 callback.call({reply.value().variant().toBool()}); 0092 watcher->deleteLater(); 0093 }); 0094 } 0095 0096 void ExtraActivitiesInterface::setShortcut(const QString &activity, const QKeySequence &keySequence) 0097 { 0098 auto action = d->actionForActivity(activity); 0099 0100 KGlobalAccel::self()->setShortcut(action, {keySequence}, KGlobalAccel::NoAutoloading); 0101 } 0102 0103 QKeySequence ExtraActivitiesInterface::shortcut(const QString &activity) 0104 { 0105 auto action = d->actionForActivity(activity); 0106 0107 const auto shortcuts = KGlobalAccel::self()->shortcut(action); 0108 return (shortcuts.isEmpty()) ? QKeySequence() : shortcuts.first(); 0109 }