diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2016-05-15 12:30:35 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2016-05-15 12:30:35 +0200 |
commit | 7ed453de4a77266e7e29f2f944b285b4fe3b248b (patch) | |
tree | c03ef2cee93ee78c259542ad2fdc8594ae0c7264 /opentrack | |
parent | 2ab0343a75e165684dba64aea4b54a5abbe8086c (diff) |
api,gui: disable all keyboard shortcuts while binding a key
Previous disallowed binding an already-bound key on Unix since Qxt
doesn't pass through bound keys unlike the Windows implementation.
Refactor some common code.
The Windows implementation isn't even compile-tested.
Diffstat (limited to 'opentrack')
-rw-r--r-- | opentrack/keybinding-worker.cpp | 2 | ||||
-rw-r--r-- | opentrack/keybinding-worker.hpp | 3 | ||||
-rw-r--r-- | opentrack/shortcuts.cpp | 21 | ||||
-rw-r--r-- | opentrack/shortcuts.h | 1 |
4 files changed, 21 insertions, 6 deletions
diff --git a/opentrack/keybinding-worker.cpp b/opentrack/keybinding-worker.cpp index 2d133c2f..8bb99b8c 100644 --- a/opentrack/keybinding-worker.cpp +++ b/opentrack/keybinding-worker.cpp @@ -16,7 +16,7 @@ bool Key::should_process() { - if (keycode == 0 && guid == "") + if (!enabled || keycode == 0 && guid == "") return false; bool ret = timer.elapsed_ms() > 100; timer.start(); diff --git a/opentrack/keybinding-worker.hpp b/opentrack/keybinding-worker.hpp index fa50a974..19db0fa9 100644 --- a/opentrack/keybinding-worker.hpp +++ b/opentrack/keybinding-worker.hpp @@ -34,9 +34,10 @@ struct Key { bool ctrl; bool alt; bool held; + bool enabled; Timer timer; public: - Key() : keycode(0), shift(false), ctrl(false), alt(false), held(true) {} + Key() : keycode(0), shift(false), ctrl(false), alt(false), held(true), enabled(true) {} bool should_process(); }; diff --git a/opentrack/shortcuts.cpp b/opentrack/shortcuts.cpp index 2caa1790..e1087008 100644 --- a/opentrack/shortcuts.cpp +++ b/opentrack/shortcuts.cpp @@ -9,17 +9,30 @@ #include "shortcuts.h" #include "win32-shortcuts.h" -void Shortcuts::bind_keyboard_shortcut(K &key, const key_opts& k, unused(bool, held)) +void Shortcuts::free_binding(K& key) { -#if !defined(_WIN32) - using sh = QxtGlobalShortcut; +#ifndef _WIN32 if (key) { key->setEnabled(false); key->setShortcut(QKeySequence::UnknownKey); - std::shared_ptr<sh> tmp(nullptr); + std::shared_ptr<QxtGlobalShortcut> tmp(nullptr); key.swap(tmp); } +#else + key.keycode = 0; + key.guid = ""; +#endif +} + +void Shortcuts::bind_keyboard_shortcut(K &key, const key_opts& k, unused(bool, held)) +{ +#if !defined(_WIN32) + using sh = QxtGlobalShortcut; + if (key) + { + free_binding(key); + } key = std::make_shared<sh>(); diff --git a/opentrack/shortcuts.h b/opentrack/shortcuts.h index b4a6f586..e9935b01 100644 --- a/opentrack/shortcuts.h +++ b/opentrack/shortcuts.h @@ -61,6 +61,7 @@ public: void reload(const std::vector<std::tuple<key_opts&, fun, bool>> &keys_); private: + void free_binding(K& key); void bind_keyboard_shortcut(K &key, const key_opts& k, bool held); #ifdef _WIN32 void receiver(const Key& k); |