diff --git a/src/lib/deskflow/ArgParser.cpp b/src/lib/deskflow/ArgParser.cpp index b92f315df..d93ff5f13 100644 --- a/src/lib/deskflow/ArgParser.cpp +++ b/src/lib/deskflow/ArgParser.cpp @@ -36,8 +36,6 @@ bool ArgParser::parseClientArgs(deskflow::ClientArgs &args, int argc, const char continue; } else if (isArg(i, argc, argv, nullptr, "--camp") || isArg(i, argc, argv, nullptr, "--no-camp")) { // ignore -- included for backwards compatibility - } else if (isArg(i, argc, argv, nullptr, "--sync-language")) { - args.m_enableLangSync = true; } else if (isArg(i, argc, argv, nullptr, "--invert-scroll")) { args.m_clientScrollDirection = deskflow::ClientScrollDirection::Inverted; } else { diff --git a/src/lib/deskflow/ClientApp.cpp b/src/lib/deskflow/ClientApp.cpp index b765d3c39..8af2a2678 100644 --- a/src/lib/deskflow/ClientApp.cpp +++ b/src/lib/deskflow/ClientApp.cpp @@ -149,8 +149,8 @@ deskflow::Screen *ClientApp::createScreen() #if WINAPI_MSWINDOWS return new deskflow::Screen( new MSWindowsScreen( - false, Settings::value(Settings::Core::UseHooks).toBool(), getEvents(), args().m_enableLangSync, - args().m_clientScrollDirection + false, Settings::value(Settings::Core::UseHooks).toBool(), getEvents(), + Settings::value(Settings::Client::LanguageSync).toBool(), args().m_clientScrollDirection ), getEvents() ); @@ -183,7 +183,10 @@ deskflow::Screen *ClientApp::createScreen() #if WINAPI_CARBON return new deskflow::Screen( - new OSXScreen(getEvents(), false, args().m_enableLangSync, args().m_clientScrollDirection), getEvents() + new OSXScreen( + getEvents(), false, Settings::value(Settings::Client::LanguageSync).toBool(), args().m_clientScrollDirection + ), + getEvents() ); #endif } diff --git a/src/lib/deskflow/ClientArgs.h b/src/lib/deskflow/ClientArgs.h index 9af812077..507116486 100644 --- a/src/lib/deskflow/ClientArgs.h +++ b/src/lib/deskflow/ClientArgs.h @@ -25,8 +25,6 @@ public: ~ClientArgs() override = default; public: - bool m_enableLangSync = false; /// @brief Should keyboard input be in same language as on server - /** * @brief m_clientScrollDirection * This option is responcible for scroll direction on client side. diff --git a/src/lib/deskflow/CoreArgParser.cpp b/src/lib/deskflow/CoreArgParser.cpp index 6357eed78..73883b694 100644 --- a/src/lib/deskflow/CoreArgParser.cpp +++ b/src/lib/deskflow/CoreArgParser.cpp @@ -124,6 +124,13 @@ void CoreArgParser::parse() if (m_parser.isSet(CoreArgs::yscrollOption)) { Settings::setValue(Settings::Client::ScrollSpeed, m_parser.value(CoreArgs::yscrollOption)); } + + if (m_parser.isSet(CoreArgs::languageSyncOption)) { + bool value = + ((m_parser.value(CoreArgs::languageSyncOption).toLower() == "true") || + (m_parser.value(CoreArgs::languageSyncOption) == "1")); + Settings::setValue(Settings::Client::LanguageSync, value); + } } [[noreturn]] void CoreArgParser::showHelpText() const diff --git a/src/lib/deskflow/CoreArgs.h b/src/lib/deskflow/CoreArgs.h index 265ce5b83..2334d1a70 100644 --- a/src/lib/deskflow/CoreArgs.h +++ b/src/lib/deskflow/CoreArgs.h @@ -70,9 +70,12 @@ struct CoreArgs inline static const auto yscrollOption = QCommandLineOption("yscroll", "Client Mode: Vertical scrolling delta (default: 120)", "value"); - inline static const auto options = {helpOption, versionOption, configOption, interfaceOption, - portOption, nameOption, logLevelOption, logFileOption, - secureOption, tlsCertOption, preventSleepOption, restartOption, - displayOption, useHooksOption, peerCheckOption, serverConfigOption, - yscrollOption}; + inline static const auto languageSyncOption = + QCommandLineOption("languageSync", "Client Mode: Sync language with client (default: false)", "value"); + + inline static const auto options = {helpOption, versionOption, configOption, interfaceOption, + portOption, nameOption, logLevelOption, logFileOption, + secureOption, tlsCertOption, preventSleepOption, restartOption, + displayOption, useHooksOption, peerCheckOption, serverConfigOption, + yscrollOption, languageSyncOption}; }; diff --git a/src/lib/gui/core/CoreProcess.cpp b/src/lib/gui/core/CoreProcess.cpp index df8a78062..79e4ad4e5 100644 --- a/src/lib/gui/core/CoreProcess.cpp +++ b/src/lib/gui/core/CoreProcess.cpp @@ -479,10 +479,6 @@ bool CoreProcess::addClientArgs(QStringList &args) args << "--log" << Settings::value(Settings::Log::File).toString(); } - if (Settings::value(Settings::Client::LanguageSync).toBool()) { - args << "--sync-language"; - } - if (Settings::value(Settings::Client::InvertScrollDirection).toBool()) { args << "--invert-scroll"; } diff --git a/src/lib/platform/EiKeyState.cpp b/src/lib/platform/EiKeyState.cpp index 8ea571663..fed0e249b 100644 --- a/src/lib/platform/EiKeyState.cpp +++ b/src/lib/platform/EiKeyState.cpp @@ -9,8 +9,8 @@ #include "platform/EiKeyState.h" #include "base/Log.h" +#include "common/Settings.h" #include "deskflow/AppUtil.h" -#include "deskflow/ClientApp.h" #include "platform/XWindowsUtil.h" #include @@ -20,7 +20,9 @@ namespace deskflow { EiKeyState::EiKeyState(EiScreen *screen, IEventQueue *events) - : KeyState(events, AppUtil::instance().getKeyboardLayoutList(), ClientApp::instance().args().m_enableLangSync), + : KeyState( + events, AppUtil::instance().getKeyboardLayoutList(), Settings::value(Settings::Client::LanguageSync).toBool() + ), m_screen{screen} { m_xkb = xkb_context_new(XKB_CONTEXT_NO_FLAGS); diff --git a/src/lib/platform/XWindowsKeyState.cpp b/src/lib/platform/XWindowsKeyState.cpp index a74129b58..e5fa7d273 100644 --- a/src/lib/platform/XWindowsKeyState.cpp +++ b/src/lib/platform/XWindowsKeyState.cpp @@ -12,12 +12,12 @@ #include #endif +#include "common/Settings.h" // Must Include before XWindowsKeyState due to its use of Xorg headers + #include "platform/XWindowsKeyState.h" #include "base/Log.h" #include "deskflow/AppUtil.h" -#include "deskflow/ClientApp.h" -#include "deskflow/ClientArgs.h" #include "platform/XWindowsUtil.h" #include @@ -35,7 +35,9 @@ static const size_t ModifiersFromXDefaultSize = 32; XWindowsKeyState::XWindowsKeyState(Display *display, bool useXKB, IEventQueue *events) - : KeyState(events, AppUtil::instance().getKeyboardLayoutList(), ClientApp::instance().args().m_enableLangSync), + : KeyState( + events, AppUtil::instance().getKeyboardLayoutList(), Settings::value(Settings::Client::LanguageSync).toBool() + ), m_display(display), m_modifierFromX(ModifiersFromXDefaultSize) { @@ -44,7 +46,8 @@ XWindowsKeyState::XWindowsKeyState(Display *display, bool useXKB, IEventQueue *e XWindowsKeyState::XWindowsKeyState(Display *display, bool useXKB, IEventQueue *events, deskflow::KeyMap &keyMap) : KeyState( - events, keyMap, AppUtil::instance().getKeyboardLayoutList(), ClientApp::instance().args().m_enableLangSync + events, keyMap, AppUtil::instance().getKeyboardLayoutList(), + Settings::value(Settings::Client::LanguageSync).toBool() ), m_display(display), m_modifierFromX(ModifiersFromXDefaultSize) diff --git a/src/unittests/deskflow/ArgParserTests.cpp b/src/unittests/deskflow/ArgParserTests.cpp index 7e6f94297..cb22e10ae 100644 --- a/src/unittests/deskflow/ArgParserTests.cpp +++ b/src/unittests/deskflow/ArgParserTests.cpp @@ -170,18 +170,6 @@ void ArgParserTests::clientArgs() QVERIFY(args.m_shouldExitOk); } -void ArgParserTests::client_setLangSync() -{ - deskflow::ClientArgs clientArgs; - clientArgs.m_enableLangSync = false; - const int argc = 2; - std::array kLangCmd = {"stub", "--sync-language"}; - - m_parser.parseClientArgs(clientArgs, argc, kLangCmd.data()); - - QVERIFY(clientArgs.m_enableLangSync); -} - void ArgParserTests::client_setInvertScroll() { deskflow::ClientArgs clientArgs; diff --git a/src/unittests/deskflow/ArgParserTests.h b/src/unittests/deskflow/ArgParserTests.h index 15d8e83f3..e20baa350 100644 --- a/src/unittests/deskflow/ArgParserTests.h +++ b/src/unittests/deskflow/ArgParserTests.h @@ -22,7 +22,6 @@ private Q_SLOTS: void getArgv(); void assembleCommand(); void clientArgs(); - void client_setLangSync(); void client_setInvertScroll(); void client_setAddress(); void client_badArgs(); diff --git a/src/unittests/deskflow/CoreArgParserTests.cpp b/src/unittests/deskflow/CoreArgParserTests.cpp index 8a0db39a5..99d9ff690 100644 --- a/src/unittests/deskflow/CoreArgParserTests.cpp +++ b/src/unittests/deskflow/CoreArgParserTests.cpp @@ -330,6 +330,46 @@ void CoreArgParserTests::client_yscroll() QCOMPARE(15, Settings::value(Settings::Client::ScrollSpeed).toInt()); } +void CoreArgParserTests::client_languageSync_true() +{ + QStringList args = {"stub", "client", "--languageSync", "true"}; + + CoreArgParser parser(args); + parser.parse(); + + QVERIFY(Settings::value(Settings::Client::LanguageSync).toBool()); +} + +void CoreArgParserTests::client_languageSync_false() +{ + QStringList args = {"stub", "client", "--languageSync", "false"}; + + CoreArgParser parser(args); + parser.parse(); + + QVERIFY(!Settings::value(Settings::Client::LanguageSync).toBool()); +} + +void CoreArgParserTests::client_languageSync_1() +{ + QStringList args = {"stub", "client", "--languageSync", "1"}; + + CoreArgParser parser(args); + parser.parse(); + + QVERIFY(Settings::value(Settings::Client::LanguageSync).toBool()); +} + +void CoreArgParserTests::client_languageSync_0() +{ + QStringList args = {"stub", "client", "--languageSync", "0"}; + + CoreArgParser parser(args); + parser.parse(); + + QVERIFY(!Settings::value(Settings::Client::LanguageSync).toBool()); +} + void CoreArgParserTests::preventSleep_true() { QStringList args = {"stub", "client", "--prevent-sleep", "true"}; diff --git a/src/unittests/deskflow/CoreArgParserTests.h b/src/unittests/deskflow/CoreArgParserTests.h index d8e37284b..be9c9ecf0 100644 --- a/src/unittests/deskflow/CoreArgParserTests.h +++ b/src/unittests/deskflow/CoreArgParserTests.h @@ -46,6 +46,10 @@ private Q_SLOTS: void server_peerCheck_true(); void server_setConfig(); void client_yscroll(); + void client_languageSync_true(); + void client_languageSync_false(); + void client_languageSync_1(); + void client_languageSync_0(); private: inline static const QString m_settingsPath = QStringLiteral("tmp/test");