File indexing completed on 2024-05-12 17:07:07

0001 /*
0002     SPDX-FileCopyrightText: 2012-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 "SwitchingTab.h"
0008 #include "kactivitymanagerd_settings.h"
0009 
0010 #include <KActionCollection>
0011 #include <KConfigGroup>
0012 #include <KGlobalAccel>
0013 #include <KSharedConfig>
0014 
0015 #include "ui_SwitchingTabBase.h"
0016 
0017 #include <KActivities/Consumer>
0018 #include <utils/d_ptr_implementation.h>
0019 
0020 class SwitchingTab::Private : public Ui::SwitchingTabBase
0021 {
0022 public:
0023     KActivityManagerdSettings *mainConfig;
0024 
0025     KActionCollection *mainActionCollection;
0026     KActivities::Consumer activities;
0027 
0028     void createAction(const QString &actionName, const QString &actionText, const QList<QKeySequence> &defaultSequence)
0029     {
0030         auto action = mainActionCollection->addAction(actionName);
0031         action->setProperty("isConfigurationAction", true);
0032         action->setText(actionText);
0033         KGlobalAccel::self()->setShortcut(action, defaultSequence);
0034         KGlobalAccel::self()->setDefaultShortcut(action, defaultSequence);
0035     }
0036 
0037     Private()
0038         : mainConfig(new KActivityManagerdSettings)
0039         , mainActionCollection(nullptr)
0040     {
0041     }
0042 };
0043 
0044 SwitchingTab::SwitchingTab(QWidget *parent)
0045     : QWidget(parent)
0046     , d()
0047 {
0048     d->setupUi(this);
0049 
0050     // Shortcut config. The shortcut belongs to the component "plasmashell"!
0051     d->mainActionCollection = new KActionCollection(this, QStringLiteral("plasmashell"));
0052     d->mainActionCollection->setComponentDisplayName(i18n("Activity switching"));
0053     d->mainActionCollection->setConfigGlobal(true);
0054 
0055     d->createAction(QStringLiteral("next activity"), i18nc("@action", "Walk through activities"), {Qt::META | Qt::Key_Tab});
0056     d->createAction(QStringLiteral("previous activity"), i18nc("@action", "Walk through activities (Reverse)"), {Qt::META | Qt::SHIFT | Qt::Key_Tab});
0057 
0058     d->scActivities->setActionTypes(KShortcutsEditor::GlobalAction);
0059     d->scActivities->addCollection(d->mainActionCollection);
0060 }
0061 
0062 SwitchingTab::~SwitchingTab()
0063 {
0064 }
0065 
0066 KCoreConfigSkeleton *SwitchingTab::mainConfig()
0067 {
0068     return d->mainConfig;
0069 }
0070 
0071 void SwitchingTab::shortcutChanged(const QKeySequence &sequence)
0072 {
0073     QString actionName = sender() ? sender()->property("shortcutAction").toString() : QString();
0074 
0075     if (actionName.isEmpty())
0076         return;
0077 
0078     auto action = d->mainActionCollection->action(actionName);
0079 
0080     KGlobalAccel::self()->setShortcut(action, {sequence}, KGlobalAccel::NoAutoloading);
0081     d->mainActionCollection->writeSettings();
0082 }