From 295137dbd2f750ed106eeb8867fd122107d91de5 Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Wed, 17 Sep 2025 20:55:01 -0400 Subject: [PATCH] refactor: CoreArgs Add display option --- src/lib/common/Settings.h | 2 ++ src/lib/deskflow/ArgParser.cpp | 29 ++++------------------------- src/lib/deskflow/ArgParser.h | 1 - src/lib/deskflow/ArgsBase.h | 3 --- src/lib/deskflow/ClientApp.cpp | 9 ++++----- src/lib/deskflow/CoreArgParser.cpp | 14 ++++++++++++++ src/lib/deskflow/CoreArgParser.h | 1 + src/lib/deskflow/CoreArgs.h | 9 ++++++--- src/lib/deskflow/ServerApp.cpp | 13 ++++--------- 9 files changed, 35 insertions(+), 46 deletions(-) diff --git a/src/lib/common/Settings.h b/src/lib/common/Settings.h index 64d83490d..943ac018c 100644 --- a/src/lib/common/Settings.h +++ b/src/lib/common/Settings.h @@ -49,6 +49,7 @@ public: inline static const auto ScreenName = QStringLiteral("core/screenName"); inline static const auto StartedBefore = QStringLiteral("core/startedBefore"); inline static const auto UpdateUrl = QStringLiteral("core/updateUrl"); + inline static const auto Display = QStringLiteral("core/display"); }; struct Daemon { @@ -171,6 +172,7 @@ private: , Settings::Core::ScreenName , Settings::Core::StartedBefore , Settings::Core::UpdateUrl + , Settings::Core::Display , Settings::Daemon::Command , Settings::Daemon::Elevate , Settings::Daemon::LogFile diff --git a/src/lib/deskflow/ArgParser.cpp b/src/lib/deskflow/ArgParser.cpp index c3b781826..ca8a88c0a 100644 --- a/src/lib/deskflow/ArgParser.cpp +++ b/src/lib/deskflow/ArgParser.cpp @@ -31,8 +31,8 @@ bool ArgParser::parseServerArgs(deskflow::ServerArgs &args, int argc, const char updateCommonArgs(argv); int i = 1; while (i < argc) { - if (parsePlatformArgs(args, argc, argv, i) || parseGenericArgs(argc, argv, i) || - parseDeprecatedArgs(argc, argv, i) || isArg(i, argc, argv, nullptr, "server")) { + if (parseGenericArgs(argc, argv, i) || parseDeprecatedArgs(argc, argv, i) || + isArg(i, argc, argv, nullptr, "server")) { ++i; continue; } else if (isArg(i, argc, argv, "-c", "--config", 1)) { @@ -61,8 +61,8 @@ bool ArgParser::parseClientArgs(deskflow::ClientArgs &args, int argc, const char int i{1}; while (i < argc) { - if (parsePlatformArgs(args, argc, argv, i) || parseGenericArgs(argc, argv, i) || - parseDeprecatedArgs(argc, argv, i) || isArg(i, argc, argv, nullptr, "client")) { + if (parseGenericArgs(argc, argv, i) || parseDeprecatedArgs(argc, argv, i) || + isArg(i, argc, argv, nullptr, "client")) { ++i; continue; } else if (isArg(i, argc, argv, nullptr, "--camp") || isArg(i, argc, argv, nullptr, "--no-camp")) { @@ -99,27 +99,6 @@ bool ArgParser::parseClientArgs(deskflow::ClientArgs &args, int argc, const char return true; } -bool ArgParser::parsePlatformArgs(deskflow::ArgsBase &argsBase, const int &argc, const char *const *argv, int &i) const -{ -#if !WINAPI_XWINDOWS - // no options for carbon or windows - return false; -#else - - if (isArg(i, argc, argv, "-display", "--display", 1)) { - // use alternative display - argsBase.m_display = argv[++i]; - } - - else { - // option not supported here - return false; - } - - return true; -#endif -} - bool ArgParser::parseGenericArgs(int argc, const char *const *argv, int &i) const { if (isArg(i, argc, argv, "-1", "--no-restart")) { diff --git a/src/lib/deskflow/ArgParser.h b/src/lib/deskflow/ArgParser.h index 701ecad9c..359f8735d 100644 --- a/src/lib/deskflow/ArgParser.h +++ b/src/lib/deskflow/ArgParser.h @@ -25,7 +25,6 @@ public: bool parseServerArgs(deskflow::ServerArgs &args, int argc, const char *const *argv) const; bool parseClientArgs(deskflow::ClientArgs &args, int argc, const char *const *argv) const; - bool parsePlatformArgs(deskflow::ArgsBase &argsBase, const int &argc, const char *const *argv, int &i) const; bool parseGenericArgs(int argc, const char *const *argv, int &i) const; bool parseDeprecatedArgs(int argc, const char *const *argv, int &i) const; void setArgsBase(deskflow::ArgsBase &argsBase) const diff --git a/src/lib/deskflow/ArgsBase.h b/src/lib/deskflow/ArgsBase.h index 4d3e3f72a..091d68a28 100644 --- a/src/lib/deskflow/ArgsBase.h +++ b/src/lib/deskflow/ArgsBase.h @@ -41,9 +41,6 @@ public: /// @brief The filename of the running process const char *m_pname = nullptr; - /// @brief Contains the X-Server display to use - const char *m_display = nullptr; - /// @brief Will cause the application to exit with OK code when set to true bool m_shouldExitOk = false; diff --git a/src/lib/deskflow/ClientApp.cpp b/src/lib/deskflow/ClientApp.cpp index e01b5d76f..fb7ceb9d7 100644 --- a/src/lib/deskflow/ClientApp.cpp +++ b/src/lib/deskflow/ClientApp.cpp @@ -118,10 +118,6 @@ void ClientApp::help() << " --sync-language enable language synchronization.\n" << " --invert-scroll invert scroll direction on this\n" << " computer.\n" -#if WINAPI_XWINDOWS - << " --display when in X mode, connect to the X server\n" - << " at .\n" -#endif << s_helpVersionArgs << "\n" << "* marks defaults.\n" @@ -181,7 +177,10 @@ deskflow::Screen *ClientApp::createScreen() #if WINAPI_XWINDOWS LOG_INFO("using legacy x windows screen"); return new deskflow::Screen( - new XWindowsScreen(args().m_display, false, args().m_yscroll, getEvents(), args().m_clientScrollDirection), + new XWindowsScreen( + qPrintable(Settings::value(Settings::Core::Display).toString()), false, args().m_yscroll, getEvents(), + args().m_clientScrollDirection + ), getEvents() ); diff --git a/src/lib/deskflow/CoreArgParser.cpp b/src/lib/deskflow/CoreArgParser.cpp index cc0e82680..3c1546b26 100644 --- a/src/lib/deskflow/CoreArgParser.cpp +++ b/src/lib/deskflow/CoreArgParser.cpp @@ -90,6 +90,11 @@ void CoreArgParser::parse() (m_parser.value(CoreArgs::preventSleepOption) == "1")); Settings::setValue(Settings::Core::PreventSleep, value); } + + if (m_parser.isSet(CoreArgs::displayOption)) { + auto value = m_parser.value(CoreArgs::displayOption); + Settings::setValue(Settings::Core::Display, value); + } } [[noreturn]] void CoreArgParser::showHelpText() const @@ -136,3 +141,12 @@ bool CoreArgParser::clientMode() const { return m_clientMode; } + +const char *CoreArgParser::display() const +{ +#if WINAPI_XWINDOWS + return qPrintable(m_parser.value(CoreArgs::displayOption)); +#else + return nullptr; +#endif +} diff --git a/src/lib/deskflow/CoreArgParser.h b/src/lib/deskflow/CoreArgParser.h index 025c5e50a..01b800897 100644 --- a/src/lib/deskflow/CoreArgParser.h +++ b/src/lib/deskflow/CoreArgParser.h @@ -33,6 +33,7 @@ public: bool version() const; bool serverMode() const; bool clientMode() const; + const char *display() const; private: [[noreturn]] void showHelpText() const; diff --git a/src/lib/deskflow/CoreArgs.h b/src/lib/deskflow/CoreArgs.h index 317e16a3d..542f2f86d 100644 --- a/src/lib/deskflow/CoreArgs.h +++ b/src/lib/deskflow/CoreArgs.h @@ -13,6 +13,9 @@ */ struct CoreArgs { + inline static const auto displayOption = + QCommandLineOption("display", "When in X mode, connect to the X server at ", "display"); + inline static const auto helpOption = QCommandLineOption({"h", "help"}, "Display Help on the command line"); inline static const auto versionOption = QCommandLineOption({"v", "version"}, "Display version information"); inline static const auto configOption = QCommandLineOption( @@ -48,7 +51,7 @@ struct CoreArgs "prevent-sleep", "When true the machine will be prevented from sleeping while the program is running", "value" ); - inline static const auto options = {helpOption, versionOption, configOption, interfaceOption, - portOption, nameOption, logLevelOption, logFileOption, - secureOption, tlsCertOption, preventSleepOption}; + inline static const auto options = {helpOption, versionOption, configOption, interfaceOption, + portOption, nameOption, logLevelOption, logFileOption, + secureOption, tlsCertOption, preventSleepOption, displayOption}; }; diff --git a/src/lib/deskflow/ServerApp.cpp b/src/lib/deskflow/ServerApp.cpp index 16e60dbcc..35d784eec 100644 --- a/src/lib/deskflow/ServerApp.cpp +++ b/src/lib/deskflow/ServerApp.cpp @@ -117,14 +117,6 @@ void ServerApp::help() << " --disable-client-cert-check disable client SSL certificate \n" " checking (deprecated)\n" << s_helpVersionArgs << "\n" - -#if WINAPI_XWINDOWS - << " --display when in X mode, connect to the X server\n" - << " at .\n" -#endif - - << "* marks defaults.\n" - << s_helpNoWayland; LOG_PRINT("%s", help.str().c_str()); @@ -482,7 +474,10 @@ deskflow::Screen *ServerApp::createScreen() #if WINAPI_XWINDOWS LOG_INFO("using legacy x windows screen"); - return new deskflow::Screen(new XWindowsScreen(args().m_display, true, 0, getEvents()), getEvents()); + return new deskflow::Screen( + new XWindowsScreen(qPrintable(Settings::value(Settings::Core::Display).toString()), true, 0, getEvents()), + getEvents() + ); #elif WINAPI_CARBON return new deskflow::Screen(new OSXScreen(getEvents(), true), getEvents()); #endif