summaryrefslogtreecommitdiffhomepage
path: root/opentrack-logic/work.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'opentrack-logic/work.hpp')
-rw-r--r--opentrack-logic/work.hpp50
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();
};