File indexing completed on 2024-05-12 05:37:16

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 #include <QFont>
0014 
0015 #include <Plasma/Containment>
0016 #include <Plasma/Corona>
0017 
0018 SwitchActivity::SwitchActivity(QObject *parent, const QVariantList &args)
0019     : Plasma::ContainmentActions(parent, args)
0020 {
0021 }
0022 
0023 SwitchActivity::~SwitchActivity()
0024 {
0025 }
0026 
0027 void SwitchActivity::makeMenu()
0028 {
0029     qDeleteAll(m_actions);
0030     m_actions.clear();
0031     foreach (const QString &id, m_consumer.activities(KActivities::Info::Running)) {
0032         KActivities::Info info(id);
0033         QAction *action = new QAction(QIcon::fromTheme(info.icon()), info.name(), this);
0034         action->setData(id);
0035 
0036         if (id == m_consumer.currentActivity()) {
0037             QFont font = action->font();
0038             font.setBold(true);
0039             action->setFont(font);
0040         }
0041 
0042         connect(action, &QAction::triggered, [=, this]() {
0043             switchTo(action);
0044         });
0045 
0046         m_actions << action;
0047     }
0048 }
0049 
0050 QList<QAction *> SwitchActivity::contextualActions()
0051 {
0052     makeMenu();
0053 
0054     return m_actions;
0055 }
0056 
0057 void SwitchActivity::switchTo(QAction *action)
0058 {
0059     if (!action) {
0060         return;
0061     }
0062 
0063     m_controller.setCurrentActivity(action->data().toString());
0064 }
0065 
0066 void SwitchActivity::performNextAction()
0067 {
0068     const QStringList activities = m_consumer.activities(KActivities::Info::Running);
0069 
0070     int i = activities.indexOf(m_consumer.currentActivity());
0071 
0072     i = (i + 1) % activities.size();
0073     m_controller.setCurrentActivity(activities[i]);
0074 }
0075 
0076 void SwitchActivity::performPreviousAction()
0077 {
0078     const QStringList activities = m_consumer.activities(KActivities::Info::Running);
0079 
0080     int i = activities.indexOf(m_consumer.currentActivity());
0081 
0082     i = (i + activities.size() - 1) % activities.size();
0083     m_controller.setCurrentActivity(activities[i]);
0084 }
0085 
0086 K_PLUGIN_CLASS_WITH_JSON(SwitchActivity, "plasma-containmentactions-switchactivity.json")
0087 
0088 #include "switch.moc"