diff options
Diffstat (limited to 'opentrack/shortcuts.h')
| -rw-r--r-- | opentrack/shortcuts.h | 46 | 
1 files changed, 29 insertions, 17 deletions
diff --git a/opentrack/shortcuts.h b/opentrack/shortcuts.h index a588b482..77e40180 100644 --- a/opentrack/shortcuts.h +++ b/opentrack/shortcuts.h @@ -1,4 +1,5 @@  #pragma once +#include <QObject>  #include <QWidget>  #include <QElapsedTimer>  #include <QThread> @@ -6,6 +7,7 @@  #include <QCheckBox>  #include <QComboBox>  #include <QSettings> +#include <QMutex>  #include "qxt-mini/QxtGlobalShortcut"  #include "opentrack/plugin-support.h" @@ -41,42 +43,49 @@ struct Key {      bool shift;      bool ctrl;      bool alt; -    bool ever_pressed;      QElapsedTimer timer;  public: -    Key() : keycode(0), shift(false), ctrl(false), alt(false), ever_pressed(false) +    Key() : keycode(0), shift(false), ctrl(false), alt(false)      {      } + +    bool should_process() +    { +        return !timer.isValid() ? (timer.start(), true) : timer.restart() > 100; +    }  };  #else  typedef unsigned char BYTE;  struct Key { int foo; };  #endif +class Shortcuts; +  struct KeybindingWorker : public QThread { -    Q_OBJECT  #ifdef _WIN32  private: +    Shortcuts& sc;      LPDIRECTINPUT8 din;      LPDIRECTINPUTDEVICE8 dinkeyboard;      Key kCenter;      Key kToggle; +    QMutex mtx;  public:      volatile bool should_quit;      ~KeybindingWorker(); -    KeybindingWorker(Key keyCenter, Key keyToggle, WId handle); -	void run(); +    KeybindingWorker(Key keyCenter, Key keyToggle, WId handle, Shortcuts& sc); +    void run(); +    void set_keys(Key kCenter, Key kToggle);  #else  public:      KeybindingWorker(Key, Key, WId) {} -	void run() {} +    void run() {}  #endif -signals: -    void center(); -    void toggle();  }; -struct Shortcuts { +struct Shortcuts : public QObject { +    Q_OBJECT +      using K =  #ifndef _WIN32      mem<QxtGlobalShortcut> @@ -84,7 +93,7 @@ struct Shortcuts {      Key  #endif      ; -     +      K keyCenter;      K keyToggle; @@ -92,7 +101,8 @@ struct Shortcuts {  #ifdef _WIN32      mem<KeybindingWorker> keybindingWorker;  #endif -     + +public:      struct settings {          pbundle b;          key_opts center, toggle; @@ -110,20 +120,22 @@ struct Shortcuts {      void reload();  private:      void bind_keyboard_shortcut(K &key, key_opts& k); +signals: +    void center(); +    void toggle();  };  class KeyboardShortcutDialog: public QWidget  {      Q_OBJECT +signals: +    void reload();  public:      KeyboardShortcutDialog();  private:      Ui::UICKeyboardShortcutDialog ui;      Shortcuts::settings s; -    mem<Shortcuts> sc; -signals: -    void reload();  private slots: -	void doOK(); -	void doCancel(); +    void doOK(); +    void doCancel();  };  | 
