diff --git a/app/streaming/input.cpp b/app/streaming/input.cpp index fbd20aeb..baf397de 100644 --- a/app/streaming/input.cpp +++ b/app/streaming/input.cpp @@ -71,9 +71,10 @@ SdlInputHandler::SdlInputHandler(StreamingPreferences& prefs, NvComputer*, int s prefs.mouseAcceleration ? "1" : "0", SDL_HINT_OVERRIDE); -#ifdef Q_OS_DARWIN +#if defined(Q_OS_DARWIN) && !SDL_VERSION_ATLEAST(2, 0, 10) // SDL 2.0.9 on macOS has a broken HIDAPI mapping for the older Xbox One S - // firmware, so we have to disable HIDAPI for Xbox gamepads on macOS. + // firmware, so we have to disable HIDAPI for Xbox gamepads on macOS until + // SDL 2.0.10 where the bug is fixed. // https://github.com/moonlight-stream/moonlight-qt/issues/133 // https://bugzilla.libsdl.org/show_bug.cgi?id=4395 SDL_SetHint(SDL_HINT_JOYSTICK_HIDAPI_XBOX, "0"); @@ -1114,6 +1115,21 @@ void SdlInputHandler::handleTouchFingerEvent(SDL_TouchFingerEvent* event) { int fingerIndex = -1; +#if SDL_VERSION_ATLEAST(2, 0, 10) + if (SDL_GetTouchDeviceType(event->touchId) != SDL_TOUCH_DEVICE_DIRECT) { + // Ignore anything that isn't a touchscreen. We may get callbacks + // for trackpads, but we want to handle those in the mouse path. + return; + } +#elif defined(Q_OS_DARWIN) + // SDL2 sends touch events from trackpads by default on + // macOS. This totally screws our actual mouse handling, + // so we must explicitly ignore touch events on macOS + // until SDL 2.0.10 where we have SDL_GetTouchDeviceType() + // to tell them apart. + return; +#endif + // Observations on Windows 10: x and y appear to be relative to 0,0 of the window client area. // Although SDL documentation states they are 0.0 - 1.0 float values, they can actually be higher // or lower than those values as touch events continue for touches started within the client area that diff --git a/app/streaming/session.cpp b/app/streaming/session.cpp index ef825436..3738b1ee 100644 --- a/app/streaming/session.cpp +++ b/app/streaming/session.cpp @@ -1231,17 +1231,11 @@ void Session::exec(int displayOriginX, int displayOriginY) case SDL_JOYDEVICEADDED: m_InputHandler->handleJoystickArrivalEvent(&event.jdevice); break; - - // SDL2 sends touch events from trackpads by default on - // macOS. This totally screws our actual mouse handling, - // so we must explicitly ignore touch events on macOS. -#ifndef Q_OS_DARWIN case SDL_FINGERDOWN: case SDL_FINGERMOTION: case SDL_FINGERUP: m_InputHandler->handleTouchFingerEvent(&event.tfinger); break; -#endif } }