From 82df30586d0ac1d24ce3fb6713817a70b61bbf06 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Wed, 29 Dec 2021 00:12:23 -0800 Subject: [PATCH] correctly handle unicode args on win32 Fixes #1810 --- CMakeLists.txt | 4 +++- app/common/commandlineparser.cpp | 8 ++++---- app/common/commandlineparser.h | 2 +- app/main.cpp | 18 +++++++++++++++++- app/window/mainwindow/mainwindow.cpp | 2 +- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e8c28db2a..67de32ebf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -162,7 +162,9 @@ else() endif() endif() -if (APPLE) +if (WIN32) + list(APPEND OLIVE_DEFINITIONS "-DUNICODE -D_UNICODE") +elseif (APPLE) list(APPEND OLIVE_LIBRARIES "-framework IOKit") elseif(UNIX) list(APPEND OLIVE_LIBRARIES Qt5::DBus) diff --git a/app/common/commandlineparser.cpp b/app/common/commandlineparser.cpp index 882ffcf24..150bdc244 100644 --- a/app/common/commandlineparser.cpp +++ b/app/common/commandlineparser.cpp @@ -52,16 +52,16 @@ const CommandLineParser::PositionalArgument *CommandLineParser::AddPositionalArg return a; } -void CommandLineParser::Process(int argc, char **argv) +void CommandLineParser::Process(const QVector &argv) { int positional_index = 0; - for (int i=1; iSet(); - if (o.takes_arg && i+1 < argc) { + if (o.takes_arg && i+1 < argv.size()) { o.option->SetSetting(argv[i+1]); i++; } diff --git a/app/common/commandlineparser.h b/app/common/commandlineparser.h index 7d131f357..4b32a9134 100644 --- a/app/common/commandlineparser.h +++ b/app/common/commandlineparser.h @@ -91,7 +91,7 @@ public: const PositionalArgument* AddPositionalArgument(const QString& name, const QString& description, bool required = false); - void Process(int argc, char** argv); + void Process(const QVector &argv); void PrintHelp(const char* filename); diff --git a/app/main.cpp b/app/main.cpp index 8a21126ff..7e729216f 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -71,6 +71,22 @@ int main(int argc, char *argv[]) // Parse command line arguments // + QVector args; +#if defined(_WIN32) && defined(UNICODE) + int wargc; + LPWSTR *wargv = CommandLineToArgvW(GetCommandLineW(), &wargc); + args.resize(wargc); + for (int i=0; i