diff options
author | Andrew Knight <andrew.knight@digia.com> | 2014-03-31 17:23:39 +0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-01 12:28:10 +0200 |
commit | caf34b9f0ad66d8a1bcfaebcd33c676a0f7973cf (patch) | |
tree | 133406b664e104fab2bd3311e52d57081df220b7 /src/winmain/qtmain_winrt.cpp | |
parent | b0718bfaf411738dda0ca1002e78ff570ec9a342 (diff) |
WinRT winmain: Pass ImagePath as part of ImageParams in Xap packages
ImageParams is used to pass arguments to main(), but when used the
original argv[0] is dropped. To remedy this, expect argv[1] to contain
the same value found in the Xap's ImagePath.
Change-Id: I2fb3b9956304fdcdeec4424ea56289d56ad4fe0b
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
Diffstat (limited to 'src/winmain/qtmain_winrt.cpp')
-rw-r--r-- | src/winmain/qtmain_winrt.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/winmain/qtmain_winrt.cpp b/src/winmain/qtmain_winrt.cpp index 22d3f5bd91..eef23130f9 100644 --- a/src/winmain/qtmain_winrt.cpp +++ b/src/winmain/qtmain_winrt.cpp @@ -105,15 +105,29 @@ static void devMessageHandler(QtMsgType type, const QMessageLogContext &context, class AppContainer : public Microsoft::WRL::RuntimeClass<Core::IFrameworkView> { public: - AppContainer(int argc, char *argv[]) : m_argc(argc) + AppContainer(int argc, char *argv[]) : m_argc(argc), m_deleteArgv0(false) { m_argv.reserve(argc); - for (int i = 0; i < argc; ++i) + for (int i = 0; i < argc; ++i) { + // Workaround for empty argv[0] which occurs when WMAppManifest's ImageParams is used + // The second argument is taken to be the executable + if (i == 0 && argc >= 2 && !qstrlen(argv[0])) { + const QByteArray argv0 = QDir::current() + .absoluteFilePath(QString::fromLatin1(argv[1])).toUtf8(); + m_argv.append(qstrdup(argv0.constData())); + m_argc -= 1; + m_deleteArgv0 = true; + ++i; + continue; + } m_argv.append(argv[i]); + } } ~AppContainer() { + if (m_deleteArgv0) + delete[] m_argv[0]; for (int i = m_argc; i < m_argv.size(); ++i) delete[] m_argv[i]; } @@ -186,6 +200,7 @@ private: int m_argc; QVector<char *> m_argv; + bool m_deleteArgv0; EventRegistrationToken m_activationToken; }; |