File indexing completed on 2024-05-12 17:08:58

0001 /*
0002     SPDX-FileCopyrightText: 2009 Chani Armitage <chani@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "switch.h"
0008 
0009 #include <QApplication>
0010 
0011 #include <QAction>
0012 #include <QDebug>
0013 
0014 #include <Plasma/Containment>
0015 #include <Plasma/Corona>
0016 #include <Plasma/DataEngine>
0017 #include <Plasma/ServiceJob>
0018 
0019 Q_DECLARE_METATYPE(QWeakPointer<Plasma::Containment>)
0020 
0021 SwitchActivity::SwitchActivity(QObject *parent, const QVariantList &args)
0022     : Plasma::ContainmentActions(parent, args)
0023 {
0024 }
0025 
0026 SwitchActivity::~SwitchActivity()
0027 {
0028 }
0029 
0030 void SwitchActivity::makeMenu()
0031 {
0032     qDeleteAll(m_actions);
0033     m_actions.clear();
0034     foreach (const QString &id, m_consumer.activities(KActivities::Info::Running)) {
0035         KActivities::Info info(id);
0036         QAction *action = new QAction(QIcon::fromTheme(info.icon()), info.name(), this);
0037         action->setData(id);
0038 
0039         if (id == m_consumer.currentActivity()) {
0040             QFont font = action->font();
0041             font.setBold(true);
0042             action->setFont(font);
0043         }
0044 
0045         connect(action, &QAction::triggered, [=]() {
0046             switchTo(action);
0047         });
0048 
0049         m_actions << action;
0050     }
0051 }
0052 
0053 QList<QAction *> SwitchActivity::contextualActions()
0054 {
0055     makeMenu();
0056 
0057     return m_actions;
0058 }
0059 
0060 void SwitchActivity::switchTo(QAction *action)
0061 {
0062     if (!action) {
0063         return;
0064     }
0065 
0066     m_controller.setCurrentActivity(action->data().toString());
0067 }
0068 
0069 void SwitchActivity::performNextAction()
0070 {
0071     const QStringList activities = m_consumer.activities(KActivities::Info::Running);
0072 
0073     int i = activities.indexOf(m_consumer.currentActivity());
0074 
0075     i = (i + 1) % activities.size();
0076     m_controller.setCurrentActivity(activities[i]);
0077 }
0078 
0079 void SwitchActivity::performPreviousAction()
0080 {
0081     const QStringList activities = m_consumer.activities(KActivities::Info::Running);
0082 
0083     int i = activities.indexOf(m_consumer.currentActivity());
0084 
0085     i = (i + activities.size() - 1) % activities.size();
0086     m_controller.setCurrentActivity(activities[i]);
0087 }
0088 
0089 K_PLUGIN_CLASS_WITH_JSON(SwitchActivity, "plasma-containmentactions-switchactivity.json")
0090 
0091 #include "switch.moc"