/* 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 key_opts = Shortcuts::key_opts; 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(sc->s.center, [&]() -> void { tracker->center(); }), tt(sc->s.toggle, [&]() -> void { tracker->toggle_enabled(); }), tt(sc->s.zero, [&]() -> void { tracker->zero(); }), } { reload_shortcuts(); tracker->start(); } void reload_shortcuts() { sc->reload(keys); } ~Work() { sc = nullptr; // order matters, otherwise use-after-free -sh tracker = nullptr; libs = SelectedLibraries(); } };