Warning, file /plasma/plasma-desktop/imports/activitymanager/switcherbackend.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     SPDX-FileCopyrightText: 2014 Ivan Cukic <ivan.cukic(at)kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 // Qt
0010 #include <QHash>
0011 #include <QJSValue>
0012 #include <QKeySequence>
0013 #include <QObject>
0014 #include <QPixmap>
0015 #include <QTimer>
0016 
0017 // KDE
0018 #include <KActivities/Controller>
0019 
0020 // Local
0021 #include "sortedactivitiesmodel.h"
0022 
0023 class QAction;
0024 class QRasterWindow;
0025 class QQmlEngine;
0026 class QJSEngine;
0027 
0028 namespace KIO
0029 {
0030 class PreviewJob;
0031 }
0032 
0033 class SwitcherBackend : public QObject
0034 {
0035     Q_OBJECT
0036 
0037     Q_PROPERTY(bool shouldShowSwitcher READ shouldShowSwitcher WRITE setShouldShowSwitcher NOTIFY shouldShowSwitcherChanged)
0038     Q_PROPERTY(bool dropEnabled READ dropEnabled CONSTANT)
0039 
0040 public:
0041     explicit SwitcherBackend(QObject *parent = nullptr);
0042     ~SwitcherBackend() override;
0043 
0044     static QObject *instance(QQmlEngine *engine, QJSEngine *scriptEngine);
0045 
0046 Q_SIGNALS:
0047     void showSwitchNotification(const QString &id, const QString &name, const QString &icon);
0048     void shouldShowSwitcherChanged(bool value);
0049 
0050 public Q_SLOTS:
0051     void init();
0052 
0053     bool shouldShowSwitcher() const;
0054     void setShouldShowSwitcher(bool shouldShowSwitcher);
0055 
0056     QAbstractItemModel *runningActivitiesModel() const;
0057     QAbstractItemModel *stoppedActivitiesModel() const;
0058 
0059     void setCurrentActivity(const QString &activity);
0060     void stopActivity(const QString &activity);
0061 
0062     void setDropMode(bool value);
0063     void drop(QMimeData *mimeData, int modifiers, const QVariant &activityId);
0064     void dropCopy(QMimeData *mimeData, const QVariant &activityId);
0065     void dropMove(QMimeData *mimeData, const QVariant &activityId);
0066     bool dropEnabled() const;
0067 
0068     void toggleActivityManager();
0069 
0070 private:
0071     template<typename Handler>
0072     inline void registerShortcut(const QString &actionName, const QString &name, const QKeySequence &shortcut, Handler &&handler);
0073 
0074     enum Direction {
0075         Next,
0076         Previous,
0077     };
0078 
0079     void switchToActivity(Direction i);
0080 
0081 private Q_SLOTS:
0082     void keybdSwitchToNextActivity();
0083     void keybdSwitchToPreviousActivity();
0084     void keybdSwitchedToAnotherActivity();
0085 
0086     void showActivitySwitcherIfNeeded();
0087 
0088     void onCurrentActivityChanged(const QString &id);
0089 
0090 private:
0091     QHash<QString, QKeySequence> m_actionShortcut;
0092     QAction *m_lastInvokedAction = nullptr;
0093     QRasterWindow *m_inputWindow = nullptr;
0094     KActivities::Controller m_activities;
0095     bool m_shouldShowSwitcher;
0096     QTimer m_modKeyPollingTimer;
0097     QString m_previousActivity;
0098 
0099     bool m_dropModeActive;
0100     QTimer m_dropModeHider;
0101 
0102     SortedActivitiesModel *m_runningActivitiesModel = nullptr;
0103     SortedActivitiesModel *m_stoppedActivitiesModel = nullptr;
0104 };