/* Copyright (c) 2014-2015, Stanislaw Halik * Permission to use, copy, modify, and/or distribute this * software for any purpose with or without fee is hereby granted, * provided that the above copyright notice and this permission * notice appear in all copies. */ #pragma once #include "opentrack/main-settings.hpp" #include "opentrack/plugin-support.hpp" #include "opentrack/tracker.h" #include "opentrack/shortcuts.h" #include #include #include #include #include #include struct Work { main_settings& s; SelectedLibraries& libs; mem tracker; mem sc; WId handle; using fn = std::function; using tt = std::tuple; std::vector keys; Work(main_settings& s, Mappings& m, SelectedLibraries& libs, WId handle) : s(s), libs(libs), tracker(std::make_shared(s, m, libs)), sc(std::make_shared()), 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); } ~Work() { sc = nullptr; // order matters, otherwise use-after-free -sh tracker = nullptr; libs = SelectedLibraries(); } };