diff --git a/app/cli/commandlineparser.cpp b/app/cli/commandlineparser.cpp index 802c143b..92657525 100644 --- a/app/cli/commandlineparser.cpp +++ b/app/cli/commandlineparser.cpp @@ -297,7 +297,7 @@ void StreamCommandLineParser::parse(const QStringList &args, StreamingPreference parser.addChoiceOption("audio-config", "audio config", m_AudioConfigMap.keys()); parser.addToggleOption("multi-controller", "multiple controller support"); parser.addToggleOption("quit-after", "quit app after session"); - parser.addToggleOption("mouse-acceleration", "mouse acceleration"); + parser.addToggleOption("absolute-mouse", "enable direct mouse control (best for remote desktop rather than games)"); parser.addToggleOption("game-optimization", "game optimizations"); parser.addToggleOption("audio-on-host", "audio on host PC"); parser.addToggleOption("frame-pacing", "frame pacing"); @@ -385,8 +385,8 @@ void StreamCommandLineParser::parse(const QStringList &args, StreamingPreference // Resolve --quit-after and --no-quit-after options preferences->quitAppAfter = parser.getToggleOptionValue("quit-after", preferences->quitAppAfter); - // Resolve --mouse-acceleration and --no-mouse-acceleration options - preferences->mouseAcceleration = parser.getToggleOptionValue("mouse-acceleration", preferences->mouseAcceleration); + // Resolve --absolute-mouse and --no-absolute-mouse options + preferences->absoluteMouseMode = parser.getToggleOptionValue("absolute-mouse", preferences->absoluteMouseMode); // Resolve --game-optimization and --no-game-optimization options preferences->gameOptimizations = parser.getToggleOptionValue("game-optimization", preferences->gameOptimizations); diff --git a/app/gui/SettingsView.qml b/app/gui/SettingsView.qml index 3c9a55e0..58cbc7f8 100644 --- a/app/gui/SettingsView.qml +++ b/app/gui/SettingsView.qml @@ -579,19 +579,20 @@ Flickable { } CheckBox { - id: rawInputCheck + id: absoluteMouseCheck hoverEnabled: true - text: "Raw mouse input" + text: "Optimize mouse for remote desktop instead of games" font.pointSize: 12 - checked: !StreamingPreferences.mouseAcceleration + checked: StreamingPreferences.absoluteMouseMode onCheckedChanged: { - StreamingPreferences.mouseAcceleration = !checked + StreamingPreferences.absoluteMouseMode = checked } ToolTip.delay: 1000 - ToolTip.timeout: 3000 + ToolTip.timeout: 5000 ToolTip.visible: hovered - ToolTip.text: "When checked, mouse input is not accelerated or scaled by the OS before passing to Moonlight" + ToolTip.text: "This enables mouse control without capturing the client's mouse cursor. It will not work in most games.\n + You can toggle this while streaming using Ctrl+Alt+Shift+M." } CheckBox { diff --git a/app/settings/streamingpreferences.cpp b/app/settings/streamingpreferences.cpp index 8bc4c294..3d103dc6 100644 --- a/app/settings/streamingpreferences.cpp +++ b/app/settings/streamingpreferences.cpp @@ -19,7 +19,7 @@ #define SER_UNSUPPORTEDFPS "unsupportedfps" #define SER_MDNS "mdns" #define SER_QUITAPPAFTER "quitAppAfter" -#define SER_MOUSEACCELERATION "mouseacceleration" +#define SER_ABSMOUSEMODE "mouseacceleration" #define SER_STARTWINDOWED "startwindowed" #define SER_FRAMEPACING "framepacing" #define SER_CONNWARNINGS "connwarnings" @@ -59,7 +59,7 @@ void StreamingPreferences::reload() unsupportedFps = settings.value(SER_UNSUPPORTEDFPS, false).toBool(); enableMdns = settings.value(SER_MDNS, true).toBool(); quitAppAfter = settings.value(SER_QUITAPPAFTER, false).toBool(); - mouseAcceleration = settings.value(SER_MOUSEACCELERATION, false).toBool(); + absoluteMouseMode = settings.value(SER_ABSMOUSEMODE, false).toBool(); startWindowed = settings.value(SER_STARTWINDOWED, false).toBool(); framePacing = settings.value(SER_FRAMEPACING, false).toBool(); connectionWarnings = settings.value(SER_CONNWARNINGS, true).toBool(); @@ -103,7 +103,7 @@ void StreamingPreferences::save() settings.setValue(SER_UNSUPPORTEDFPS, unsupportedFps); settings.setValue(SER_MDNS, enableMdns); settings.setValue(SER_QUITAPPAFTER, quitAppAfter); - settings.setValue(SER_MOUSEACCELERATION, mouseAcceleration); + settings.setValue(SER_ABSMOUSEMODE, absoluteMouseMode); settings.setValue(SER_STARTWINDOWED, startWindowed); settings.setValue(SER_FRAMEPACING, framePacing); settings.setValue(SER_CONNWARNINGS, connectionWarnings); diff --git a/app/settings/streamingpreferences.h b/app/settings/streamingpreferences.h index ea6709e0..8ec730d3 100644 --- a/app/settings/streamingpreferences.h +++ b/app/settings/streamingpreferences.h @@ -61,7 +61,7 @@ public: Q_PROPERTY(bool unsupportedFps MEMBER unsupportedFps NOTIFY unsupportedFpsChanged) Q_PROPERTY(bool enableMdns MEMBER enableMdns NOTIFY enableMdnsChanged) Q_PROPERTY(bool quitAppAfter MEMBER quitAppAfter NOTIFY quitAppAfterChanged) - Q_PROPERTY(bool mouseAcceleration MEMBER mouseAcceleration NOTIFY mouseAccelerationChanged) + Q_PROPERTY(bool absoluteMouseMode MEMBER absoluteMouseMode NOTIFY absoluteMouseModeChanged) Q_PROPERTY(bool startWindowed MEMBER startWindowed NOTIFY startWindowedChanged) Q_PROPERTY(bool framePacing MEMBER framePacing NOTIFY framePacingChanged) Q_PROPERTY(bool connectionWarnings MEMBER connectionWarnings NOTIFY connectionWarningsChanged) @@ -85,7 +85,7 @@ public: bool unsupportedFps; bool enableMdns; bool quitAppAfter; - bool mouseAcceleration; + bool absoluteMouseMode; bool startWindowed; bool framePacing; bool connectionWarnings; @@ -108,7 +108,7 @@ signals: void unsupportedFpsChanged(); void enableMdnsChanged(); void quitAppAfterChanged(); - void mouseAccelerationChanged(); + void absoluteMouseModeChanged(); void audioConfigChanged(); void videoCodecConfigChanged(); void videoDecoderSelectionChanged(); diff --git a/app/streaming/input.cpp b/app/streaming/input.cpp index c9635559..1b65b4f8 100644 --- a/app/streaming/input.cpp +++ b/app/streaming/input.cpp @@ -66,17 +66,17 @@ SdlInputHandler::SdlInputHandler(StreamingPreferences& prefs, NvComputer*, int s m_LongPressTimer(0), m_StreamWidth(streamWidth), m_StreamHeight(streamHeight), - m_AbsoluteMouseMode(false) + m_AbsoluteMouseMode(prefs.absoluteMouseMode) { // Allow gamepad input when the app doesn't have focus SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); - // If mouse acceleration is enabled, use relative mode warp (which + // If absolute mouse mode is enabled, use relative mode warp (which // is via normal motion events that are influenced by mouse acceleration). // Otherwise, we'll use raw input capture which is straight from the device // without modification by the OS. SDL_SetHintWithPriority(SDL_HINT_MOUSE_RELATIVE_MODE_WARP, - prefs.mouseAcceleration ? "1" : "0", + prefs.absoluteMouseMode ? "1" : "0", SDL_HINT_OVERRIDE); #if defined(Q_OS_DARWIN) && !SDL_VERSION_ATLEAST(2, 0, 10)