summaryrefslogtreecommitdiffstats
path: root/src/winmain
diff options
context:
space:
mode:
authorAndrew Knight <andrew.knight@digia.com>2014-03-31 17:23:39 +0300
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-04-01 12:28:10 +0200
commitcaf34b9f0ad66d8a1bcfaebcd33c676a0f7973cf (patch)
tree133406b664e104fab2bd3311e52d57081df220b7 /src/winmain
parentb0718bfaf411738dda0ca1002e78ff570ec9a342 (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')
-rw-r--r--src/winmain/qtmain_winrt.cpp19
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;
};