diff options
author | Lasse Holmstedt <lasse.holmstedt@nokia.com> | 2010-09-17 08:13:51 (GMT) |
---|---|---|
committer | Kai Koehne <kai.koehne@nokia.com> | 2010-09-17 13:51:18 (GMT) |
commit | a9e5329168cd9113bf41293c05193d8b099494c6 (patch) | |
tree | daaf47e37ff0343596cc3c2e67afe25251be8b32 /src/declarative/debugger | |
parent | 2046037499830506ec24097c9b7a739bb7c78566 (diff) | |
download | Qt-a9e5329168cd9113bf41293c05193d8b099494c6.zip Qt-a9e5329168cd9113bf41293c05193d8b099494c6.tar.gz Qt-a9e5329168cd9113bf41293c05193d8b099494c6.tar.bz2 |
Make qml debugging work with command line arguments
The environment variables do not work for Symbian devices, so
without this change, QML debugging cannot be done on them.
In addition, configure now contains an option to disable qml
debugging entirely, due to it being a major security risk.
Reviewed-by: kkoehne
Diffstat (limited to 'src/declarative/debugger')
-rw-r--r-- | src/declarative/debugger/qdeclarativedebugservice.cpp | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/src/declarative/debugger/qdeclarativedebugservice.cpp b/src/declarative/debugger/qdeclarativedebugservice.cpp index 1bbfcf4..1f2bf4f 100644 --- a/src/declarative/debugger/qdeclarativedebugservice.cpp +++ b/src/declarative/debugger/qdeclarativedebugservice.cpp @@ -49,6 +49,8 @@ #include <QtCore/qstringlist.h> #include <private/qobject_p.h> +#include <private/qapplication_p.h> +#include <QtGui/qapplication.h> QT_BEGIN_NAMESPACE @@ -147,24 +149,41 @@ bool QDeclarativeDebugServer::hasDebuggingClient() const QDeclarativeDebugServer *QDeclarativeDebugServer::instance() { - static bool envTested = false; + static bool commandLineTested = false; static QDeclarativeDebugServer *server = 0; - if (!envTested) { - envTested = true; - QByteArray env = qgetenv("QML_DEBUG_SERVER_PORT"); - QByteArray block = qgetenv("QML_DEBUG_SERVER_BLOCK"); + if (!commandLineTested) { + commandLineTested = true; +#ifndef QDECLARATIVE_NO_DEBUG_PROTOCOL + QApplicationPrivate *appD = static_cast<QApplicationPrivate*>(QObjectPrivate::get(qApp)); + // ### remove port definition when protocol is changed + int port = 0; + bool block = false; bool ok = false; - int port = env.toInt(&ok); - if (ok && port > 1024) { - server = new QDeclarativeDebugServer(port); - server->listen(); - if (!block.isEmpty()) { - server->waitForConnection(); + // format: qmljsdebugger=port:3768[,block] + if (!appD->qmljsDebugArguments.isEmpty()) { + + if (appD->qmljsDebugArguments.indexOf(QLatin1String("port:")) == 0) { + int separatorIndex = appD->qmljsDebugArguments.indexOf(QLatin1Char(',')); + port = appD->qmljsDebugArguments.mid(5, separatorIndex - 5).toInt(&ok); + } + block = appD->qmljsDebugArguments.contains(QLatin1String("block")); + + if (ok) { + server = new QDeclarativeDebugServer(port); + server->listen(); + if (block) { + server->waitForConnection(); + } + } else { + qWarning(QString("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". " + "Format is -qmljsdebugger=port:<port>[,block]").arg( + appD->qmljsDebugArguments).toAscii().constData()); } } +#endif } return server; |