File indexing completed on 2024-12-01 05:02:23

0001 /*
0002     SPDX-FileCopyrightText: 2016 Smith AR <audoban@openmailbox.org>
0003     SPDX-FileCopyrightText: 2016 Michail Vourlakos <mvourlakos@gmail.com>
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef GLOBALSHORTCUTS_H
0008 #define GLOBALSHORTCUTS_H
0009 
0010 // local
0011 #include <coretypes.h>
0012 
0013 // Qt
0014 #include <QAction>
0015 #include <QPointer>
0016 #include <QTimer>
0017 
0018 // KDE
0019 #include <kmodifierkeyinfo.h>
0020 
0021 
0022 namespace Plasma {
0023 class Containment;
0024 }
0025 
0026 namespace Latte {
0027 class Corona;
0028 class View;
0029 namespace ShortcutsPart{
0030 class ModifierTracker;
0031 class ShortcutsTracker;
0032 }
0033 }
0034 
0035 namespace Latte {
0036 
0037 class GlobalShortcuts : public QObject
0038 {
0039     Q_OBJECT
0040 
0041 public:
0042     static constexpr const char* SHORTCUTBLOCKHIDINGTYPE  = "globalshortcuts::blockHiding()";
0043 
0044     GlobalShortcuts(QObject *parent = nullptr);
0045     ~GlobalShortcuts() override;
0046 
0047     void activateLauncherMenu();
0048     void updateViewItemBadge(QString identifier, QString value);
0049 
0050     ShortcutsPart::ShortcutsTracker *shortcutsTracker() const;
0051 
0052 signals:
0053     void modifiersChanged();
0054 
0055 private slots:
0056     void hideViewsTimerSlot();
0057 
0058 private:
0059     void init();
0060     void initModifiers();
0061     void activateEntry(int index, Qt::Key modifier);
0062     void showViews();
0063     void showSettings();
0064 
0065     bool activateLatteEntry(Latte::View *view, int index, Qt::Key modifier, bool *delayedExecution);
0066     bool activatePlasmaTaskManager(const Latte::View *view, int index, Qt::Key modifier, bool *delayedExecution);
0067     bool activateEntryForView(Latte::View *view, int index, Qt::Key modifier);
0068     bool viewAtLowerEdgePriority(Latte::View *test, Latte::View *base);
0069     bool viewAtLowerScreenPriority(Latte::View *test, Latte::View *base);
0070     bool viewsToHideAreValid();
0071 
0072     //! highest priority application launcher view
0073     Latte::View *highestApplicationLauncherView(const QList<Latte::View *> &views) const;
0074 
0075     QList<Latte::View *> sortedViewsList(QHash<const Plasma::Containment *, Latte::View *> *views);
0076 
0077 private:
0078     bool m_metaShowedViews{false};
0079 
0080     //! last action that was trigerred from the user
0081     QAction *m_lastInvokedAction;
0082     //! it is used for code compatibility reasons in order to replicate a single Meta action
0083     QAction *m_singleMetaAction;
0084 
0085     //! delayer for hiding the shown latte views
0086     QTimer m_hideViewsTimer;
0087     QList<Latte::View *> m_hideViews;
0088 
0089     QPointer<ShortcutsPart::ModifierTracker> m_modifierTracker;
0090     QPointer<ShortcutsPart::ShortcutsTracker> m_shortcutsTracker;
0091     QPointer<Latte::Corona> m_corona;
0092 };
0093 
0094 }
0095 
0096 #endif // GLOBALSHORTCUTS_H