summaryrefslogtreecommitdiffhomepage
path: root/opentrack/keybinding-worker.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'opentrack/keybinding-worker.hpp')
-rw-r--r--opentrack/keybinding-worker.hpp20
1 files changed, 8 insertions, 12 deletions
diff --git a/opentrack/keybinding-worker.hpp b/opentrack/keybinding-worker.hpp
index 5b669331..c8d8e009 100644
--- a/opentrack/keybinding-worker.hpp
+++ b/opentrack/keybinding-worker.hpp
@@ -47,8 +47,8 @@ private:
LPDIRECTINPUTDEVICE8 dinkeyboard;
win32_joy_ctx& joy_ctx;
volatile bool should_quit;
- using fun = std::function<void(Key&)>;
- std::vector<fun> receivers;
+ using fun = std::function<void(const Key&)>;
+ std::vector<std::unique_ptr<fun>> receivers;
QMutex mtx;
void run() override;
@@ -57,27 +57,23 @@ private:
KeybindingWorker(const KeybindingWorker&) = delete;
KeybindingWorker& operator=(KeybindingWorker&) = delete;
static KeybindingWorker& make();
- fun* _add_receiver(fun receiver);
+ fun* _add_receiver(fun &receiver);
void remove_receiver(fun* pos);
~KeybindingWorker();
public:
class Token
{
fun* pos;
- //Token(const Token&) = delete;
+ Token(const Token&) = delete;
Token& operator=(Token&) = delete;
public:
- Token(fun receiver)
- {
- pos = make()._add_receiver(receiver);
- }
~Token()
{
make().remove_receiver(pos);
}
+ Token(fun receiver)
+ {
+ pos = make()._add_receiver(receiver);
+ }
};
- static Token add_receiver(fun receiver)
- {
- return Token(receiver);
- }
};