File indexing completed on 2024-05-19 09:48:58
0001 // SPDX-License-Identifier: LGPL-2.1-only 0002 0003 #pragma once 0004 0005 #include <QObject> 0006 #include <QMultiHash> 0007 #include <QAbstractNativeEventFilter> 0008 #include <QKeySequence> 0009 0010 class QGlobalShortcut : public QObject { 0011 Q_OBJECT 0012 Q_PROPERTY(QKeySequence key READ key WRITE setKey) 0013 //Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled) 0014 private: 0015 0016 class QGlobalShortcutEventFilter : public QAbstractNativeEventFilter { 0017 public: 0018 bool nativeEventFilter(const QByteArray& eventType, void* message, long* result); 0019 }; 0020 0021 public: 0022 explicit QGlobalShortcut(QObject* parent = nullptr); 0023 explicit QGlobalShortcut(const QKeySequence& keyseq, QObject* parent = nullptr); 0024 ~QGlobalShortcut(); 0025 bool nativeEventFilter(const QByteArray& event_type, void* message, long* result); 0026 0027 QKeySequence key() const; 0028 void setKey(const QKeySequence& keyseq); 0029 //bool isEnabled() const; void setEnabled(bool on); 0030 0031 signals: 0032 void activated(); 0033 0034 private: 0035 QKeySequence keyseq_; 0036 void unsetKey(); 0037 void initialize(); 0038 0039 private: 0040 static QGlobalShortcutEventFilter global_shortcut_event_; 0041 /* quint32 keyid 0042 QGlobalShortcut* shortcut */ 0043 static QMultiHash<quint32, QGlobalShortcut*> shortcuts_; 0044 static bool activate(quint32 id); 0045 static quint32 calcId(const QKeySequence& keyseq); 0046 static quint32 calcId(quint32 k, quint32 m); 0047 static Qt::Key getKey(const QKeySequence& keyseq); 0048 static Qt::KeyboardModifiers getMods(const QKeySequence& keyseq); 0049 static quint32 toNativeKeycode(Qt::Key k); 0050 static quint32 toNativeModifiers(Qt::KeyboardModifiers m); 0051 static void registerKey(quint32 k, quint32 m, quint32 id); 0052 static void unregisterKey(quint32 k, quint32 m, quint32 id); 0053 };