mirror of
https://github.com/spice2x/spice2x.github.io.git
synced 2026-10-03 00:38:14 -07:00
overlay: create a dedicated thread for polling hotkeys (#864)
## Link to GitHub Issue or related Pull Request, if one exists n/a ## Description of change Create a new thread that polls for the following hotkeys: * super exit (both alt+f4 and bound key) * coin insert * screenshot The goal is to make the capture of these more reliable, because before this PR it wasn't. ## Testing
This commit is contained in:
@@ -87,13 +87,13 @@
|
||||
#include "launcher/launcher.h"
|
||||
#include "launcher/logger.h"
|
||||
#include "launcher/signal.h"
|
||||
#include "launcher/superexit.h"
|
||||
#include "launcher/richpresence.h"
|
||||
#include "launcher/shutdown.h"
|
||||
#include "launcher/options.h"
|
||||
#include "misc/bt5api.h"
|
||||
#include "misc/device.h"
|
||||
#include "misc/eamuse.h"
|
||||
#include "misc/hotkeys.h"
|
||||
#include "misc/extdev.h"
|
||||
#include "misc/ami2000.h"
|
||||
#include "misc/sciunit.h"
|
||||
@@ -1777,9 +1777,8 @@ int main_implementation(int argc, char *argv[]) {
|
||||
nvapi::initialize();
|
||||
// add application profile to nvcp
|
||||
nvapi::set_profile_settings();
|
||||
// enable super exit
|
||||
superexit::enable();
|
||||
|
||||
// keep ALT+F4 available during lengthy non-standalone boot
|
||||
hotkeys::start();
|
||||
// enable subscreen touch emulation
|
||||
if (options[launcher::Options::spice2x_IIDXEmulateSubscreenKeypadTouch].is_active()) {
|
||||
games::iidx::ENABLE_POKE = true;
|
||||
@@ -2452,6 +2451,7 @@ int main_implementation(int argc, char *argv[]) {
|
||||
|
||||
// initialize raw input
|
||||
RI_MGR = std::make_unique<rawinput::RawInputManager>();
|
||||
hotkeys::enable_raw_input();
|
||||
for (const auto &device : sextet_devices) {
|
||||
RI_MGR->sextet_register(device);
|
||||
}
|
||||
@@ -2474,6 +2474,9 @@ int main_implementation(int argc, char *argv[]) {
|
||||
log_misc("rawinput", "Analog mappings:");
|
||||
dump_analog_bindings();
|
||||
|
||||
// mappings are ready; begin screenshot and coin polling during late startup
|
||||
hotkeys::enable_input();
|
||||
|
||||
// for certain games, show cursor if no touch is available (must be called after RI_MGR is available)
|
||||
if (show_cursor_if_no_touch && !is_touch_available("launcher::main_implementation")) {
|
||||
GRAPHICS_SHOW_CURSOR = true;
|
||||
@@ -2703,9 +2706,6 @@ int main_implementation(int argc, char *argv[]) {
|
||||
API_CONTROLLER->listen_serial(api_serial_port[i], api_serial_baud[i]);
|
||||
}
|
||||
|
||||
// start coin input thread
|
||||
eamuse_coin_start_thread();
|
||||
|
||||
// pin macro
|
||||
if (!cfg::CONFIGURATOR_STANDALONE && PIN_MACRO_ENABLED) {
|
||||
eamuse_pin_macro_start_thread();
|
||||
@@ -2755,6 +2755,9 @@ int main_implementation(int argc, char *argv[]) {
|
||||
log_info("launcher", "calling game entry");
|
||||
avs::game::entry_main();
|
||||
|
||||
// stop screenshot and coin polling; mapped SuperExit and ALT+F4 remain active
|
||||
hotkeys::disable_input();
|
||||
|
||||
// clear presence
|
||||
richpresence::shutdown();
|
||||
|
||||
@@ -2792,9 +2795,6 @@ int main_implementation(int argc, char *argv[]) {
|
||||
// free api controller
|
||||
API_CONTROLLER.reset();
|
||||
|
||||
// stop coin input thread
|
||||
eamuse_coin_stop_thread();
|
||||
|
||||
eamuse_pin_macro_stop_thread();
|
||||
|
||||
// BT5API
|
||||
@@ -2805,6 +2805,7 @@ int main_implementation(int argc, char *argv[]) {
|
||||
sdk::fini_sdk_modules();
|
||||
|
||||
// stop raw input
|
||||
hotkeys::disable_raw_input();
|
||||
RI_MGR.reset();
|
||||
|
||||
// debug hook
|
||||
@@ -2837,8 +2838,8 @@ int main_implementation(int argc, char *argv[]) {
|
||||
// dispose crypt
|
||||
crypt::dispose();
|
||||
|
||||
// disable super exit
|
||||
superexit::disable();
|
||||
// end early/late ALT+F4 monitoring at the same teardown point as legacy SuperExit
|
||||
hotkeys::stop();
|
||||
|
||||
// disable poke
|
||||
games::iidx::poke::disable();
|
||||
|
||||
Reference in New Issue
Block a user