#pragma once #include "opentrack/main-settings.hpp" #include "opentrack/plugin-support.h" #include "opentrack/tracker.h" #include "opentrack/shortcuts.h" #include #include #include struct Modules { Modules() : module_list(dylib::enum_libraries()), filter_modules(filter(dylib::Filter)), tracker_modules(filter(dylib::Tracker)), protocol_modules(filter(dylib::Protocol)) {} QList>& filters() { return filter_modules; } QList>& trackers() { return tracker_modules; } QList>& protocols() { return protocol_modules; } private: QList> module_list; QList> filter_modules; QList> tracker_modules; QList> protocol_modules; QList> filter(dylib::Type t) { QList> ret; for (auto x : module_list) if (x->type == t) ret.push_back(x); return ret; } }; struct Work { main_settings& s; SelectedLibraries libs; ptr tracker; ptr sc; Work(main_settings& s, Mappings& m, SelectedLibraries& libs, QObject* recv) : s(s), libs(libs), tracker(std::make_shared(s, m, libs)), sc(std::make_shared()) { #ifndef _WIN32 QObject::connect(&sc->keyCenter, SIGNAL(activated()), recv, SLOT(shortcutRecentered())); QObject::connect(&sc->keyToggle, SIGNAL(activated()), recv, SLOT(shortcutToggled())); #endif tracker->start(); } ~Work() { // order matters, otherwise use-after-free -sh tracker = nullptr; libs = SelectedLibraries(); } };