mirror of
https://github.com/spice2x/spice2x.github.io.git
synced 2026-08-01 22:30:42 -07:00
touch: avoid calling is_touch_available too early (#289)
## Link to GitHub Issue, if one exists Fixes #120 ## Description of change Don't call `is_touch_available` in launcher before RawInput stack is initialized. This causes us to incorrectly fall back to the Win7/Win8 touch handler. The desired behavior is to use rawinput touch by default for all games, unless overridden by the user via `-wintouch`. Add a bunch of logging so we can spot who's calling `is_touch_available`. As a side effect, a handful of games that previously used Win7/8 touch will now use RawInput touch instead. If this causes any issues, they can turn `-wintouch` on to force Win7/8 touch logic again. ## Compiling 👍 ## Testing Test: * RB * -wintouch * TDJ, UFC subscreen and native touch * overlay, especially in multi-mon
This commit is contained in:
@@ -138,8 +138,15 @@ static void touch_initialize() {
|
||||
}
|
||||
SPICETOUCH_INITIALIZED = true;
|
||||
|
||||
if (!RI_MGR) {
|
||||
log_fatal(
|
||||
LOG_MODULE_NAME,
|
||||
"touch_initialize() - RI Manager not available, called too early! "
|
||||
"This is a BUG in spice, please file a bug report with log.txt.");
|
||||
}
|
||||
|
||||
// initialize handler
|
||||
if (RI_MGR && rawinput::touch::is_enabled(RI_MGR.get())) {
|
||||
if (rawinput::touch::is_enabled(RI_MGR.get())) {
|
||||
TOUCH_HANDLER = new RawInputTouchHandler();
|
||||
} else if (Win8Handler::is_available()) {
|
||||
TOUCH_HANDLER = new Win8Handler();
|
||||
@@ -166,13 +173,26 @@ static inline void touch_unregister_window(HWND hWnd) {
|
||||
}
|
||||
}
|
||||
|
||||
bool is_touch_available() {
|
||||
bool is_touch_available(LPCSTR caller) {
|
||||
static bool called_once = false;
|
||||
|
||||
if (!RI_MGR) {
|
||||
log_fatal(
|
||||
LOG_MODULE_NAME,
|
||||
"is_touch_available({}) - RI Manager not available, called too early! "
|
||||
"This is a BUG in spice, please file a bug report with log.txt.",
|
||||
caller);
|
||||
}
|
||||
|
||||
// initialize touch handler
|
||||
touch_initialize();
|
||||
|
||||
// Check if a touch handler has been set. No need to call `is_available` here
|
||||
// as `touch_initialize` does that.
|
||||
if (!called_once) {
|
||||
log_misc("touch", "is_touch_available called by: {}, returning {}",
|
||||
caller, (TOUCH_HANDLER != nullptr) ? "TRUE" : "false");
|
||||
called_once = true;
|
||||
}
|
||||
|
||||
return TOUCH_HANDLER != nullptr;
|
||||
}
|
||||
|
||||
@@ -202,7 +222,7 @@ static LRESULT CALLBACK SpiceTouchWndProc(HWND hWnd, UINT msg, WPARAM wParam, LP
|
||||
SPICETOUCH_REGISTERED_TOUCH = true;
|
||||
|
||||
// check if touch is available
|
||||
if (is_touch_available()) {
|
||||
if (is_touch_available("SpiceTouchWndProc")) {
|
||||
|
||||
// notify the handler of our window
|
||||
TOUCH_HANDLER->window_register(hWnd);
|
||||
|
||||
Reference in New Issue
Block a user