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 };