summaryrefslogtreecommitdiffhomepage
path: root/opentrack
diff options
context:
space:
mode:
Diffstat (limited to 'opentrack')
-rw-r--r--opentrack/shortcuts.cpp10
-rw-r--r--opentrack/shortcuts.h11
-rw-r--r--opentrack/work.hpp3
3 files changed, 9 insertions, 15 deletions
diff --git a/opentrack/shortcuts.cpp b/opentrack/shortcuts.cpp
index 059febdb..b961294f 100644
--- a/opentrack/shortcuts.cpp
+++ b/opentrack/shortcuts.cpp
@@ -61,7 +61,7 @@ void Shortcuts::bind_keyboard_shortcut(K &key, key_opts& k)
#endif
#ifdef _WIN32
-void Shortcuts::receiver(Key &k)
+void Shortcuts::receiver(const Key& k)
{
std::vector<K*> ks { &keyCenter, &keyToggle, &keyZero };
for (K* k_ : ks)
@@ -92,12 +92,4 @@ void Shortcuts::reload() {
bind_keyboard_shortcut(keyCenter, s.center);
bind_keyboard_shortcut(keyToggle, s.toggle);
bind_keyboard_shortcut(keyZero, s.zero);
-#ifdef _WIN32
- bool is_new = keybindingWorker == nullptr;
- if (is_new)
- {
- keybindingWorker = std::make_shared<KeybindingWorker>([&](Key& k) { receiver(k); }, handle);
- keybindingWorker->start();
- }
-#endif
}
diff --git a/opentrack/shortcuts.h b/opentrack/shortcuts.h
index 1643485e..930952e8 100644
--- a/opentrack/shortcuts.h
+++ b/opentrack/shortcuts.h
@@ -40,10 +40,8 @@ public:
K keyCenter;
K keyToggle;
K keyZero;
-
- WId handle;
#ifdef _WIN32
- mem<KeybindingWorker> keybindingWorker;
+ KeybindingWorker::Token key_token;
#endif
struct key_opts {
@@ -68,13 +66,16 @@ public:
{}
} s;
- Shortcuts(WId handle) : handle(handle) { reload(); }
+ Shortcuts() : key_token(KeybindingWorker::add_receiver([&](const Key& k) { receiver(k); }))
+ {
+ reload();
+ }
void reload();
private:
void bind_keyboard_shortcut(K &key, key_opts& k);
#ifdef _WIN32
- void receiver(Key& k);
+ void receiver(const Key& k);
#endif
signals:
void center();
diff --git a/opentrack/work.hpp b/opentrack/work.hpp
index 5d1f6b54..e338e9f4 100644
--- a/opentrack/work.hpp
+++ b/opentrack/work.hpp
@@ -28,7 +28,7 @@ struct Work
Work(main_settings& s, Mappings& m, SelectedLibraries& libs, QObject* recv, WId handle) :
s(s), libs(libs),
tracker(std::make_shared<Tracker>(s, m, libs)),
- sc(std::make_shared<Shortcuts>(handle)),
+ sc(std::make_shared<Shortcuts>()),
handle(handle)
{
#ifndef _WIN32
@@ -50,6 +50,7 @@ struct Work
~Work()
{
+ sc = nullptr;
// order matters, otherwise use-after-free -sh
tracker = nullptr;
libs = SelectedLibraries();