diff options
Diffstat (limited to 'opentrack-logic/work.hpp')
-rw-r--r-- | opentrack-logic/work.hpp | 50 |
1 files changed, 13 insertions, 37 deletions
diff --git a/opentrack-logic/work.hpp b/opentrack-logic/work.hpp index 37bc58bf..70322be2 100644 --- a/opentrack-logic/work.hpp +++ b/opentrack-logic/work.hpp @@ -12,52 +12,28 @@ #include "opentrack/plugin-support.hpp" #include "tracker.h" #include "shortcuts.h" +#include "export.hpp" #include <QObject> #include <QFrame> #include <memory> #include <vector> -#include <functional> #include <tuple> +#include <functional> -struct Work +struct OPENTRACK_LOGIC_EXPORT Work { - main_settings s; + using fn_t = std::function<void(bool)>; + using key_tuple = std::tuple<key_opts&, fn_t, bool>; + SelectedLibraries& libs; - mem<Tracker> tracker; - mem<Shortcuts> sc; + std::shared_ptr<Tracker> tracker; + std::shared_ptr<Shortcuts> sc; WId handle; - using fn = std::function<void(bool)>; - using tt = std::tuple<key_opts&, fn, bool>; - std::vector<tt> keys; - - Work(Mappings& m, SelectedLibraries& libs, WId handle) : - libs(libs), - tracker(std::make_shared<Tracker>(m, libs)), - sc(std::make_shared<Shortcuts>()), - handle(handle), - keys { - tt(s.key_center, [&](bool) -> void { tracker->center(); }, true), - tt(s.key_toggle, [&](bool) -> void { tracker->toggle_enabled(); }, true), - tt(s.key_zero, [&](bool) -> void { tracker->zero(); }, true), - tt(s.key_toggle_press, [&](bool x) -> void { tracker->set_toggle(!x); }, false), - tt(s.key_zero_press, [&](bool x) -> void { tracker->set_zero(x); }, false), - } - { - reload_shortcuts(); - tracker->start(); - } - - void reload_shortcuts() - { - sc->reload(keys); - } + std::vector<key_tuple> keys; + main_settings s; - ~Work() - { - sc = nullptr; - // order matters, otherwise use-after-free -sh - tracker = nullptr; - libs = SelectedLibraries(); - } + Work(Mappings& m, SelectedLibraries& libs, WId handle); + ~Work(); + void reload_shortcuts(); }; |