File indexing completed on 2024-10-06 04:59:05
0001 /* 0002 SPDX-FileCopyrightText: 2019 Michail Vourlakos <mvourlakos@gmail.com> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #ifndef MODIFIERTRACKER_H 0007 #define MODIFIERTRACKER_H 0008 0009 // Qt 0010 #include <QHash> 0011 #include <QObject> 0012 #include <QTimer> 0013 0014 // KDE 0015 #include <KModifierKeyInfo> 0016 0017 namespace Latte { 0018 namespace ShortcutsPart { 0019 0020 class ModifierTracker: public QObject { 0021 Q_OBJECT 0022 0023 public: 0024 ModifierTracker(QObject *parent); 0025 ~ModifierTracker() override; 0026 0027 //! cancel meta is pressed delayer 0028 void cancelMetaPressed(); 0029 0030 //! none of tracked modifiers is pressed 0031 bool noModifierPressed(); 0032 0033 //! at least one of the modifiers from KeySequence is pressed 0034 bool sequenceModifierPressed(const QKeySequence &seq); 0035 0036 //! only <key> is pressed and no other modifier 0037 bool singleModifierPressed(Qt::Key key); 0038 0039 void blockModifierTracking(Qt::Key key); 0040 void unblockModifierTracking(Qt::Key key); 0041 0042 signals: 0043 void metaModifierPressed(); 0044 void modifiersChanged(); 0045 0046 private: 0047 void init(); 0048 0049 //! <key> modifier is tracked for changes 0050 bool modifierIsTracked(Qt::Key key); 0051 0052 //! adjust key in more general values, e.g. Super_L and Super_R both return Super_L 0053 Qt::Key normalizeKey(Qt::Key key); 0054 0055 private: 0056 KModifierKeyInfo m_modifierKeyInfo; 0057 QTimer m_metaPressedTimer; 0058 0059 //! modifiers that the user does not want to track anymore 0060 QList<Qt::Key> m_blockedModifiers; 0061 0062 //! keep a record for modifiers 0063 QHash<Qt::Key, bool> m_pressed; 0064 0065 }; 0066 0067 } 0068 } 0069 0070 #endif