QmlJSDebugger: Don't block UI while trying to connect

Don't use waitForConnected().
This commit is contained in:
Kai Koehne
2011-02-08 16:35:40 +01:00
parent b2f302cd02
commit 246c586dff
2 changed files with 15 additions and 21 deletions

View File

@@ -77,6 +77,12 @@ QmlAdapter::QmlAdapter(DebuggerEngine *engine, QObject *parent)
: QObject(parent), d(new Internal::QmlAdapterPrivate(engine))
{
connect(&d->m_connectionTimer, SIGNAL(timeout()), SLOT(pollInferior()));
d->m_conn = new QDeclarativeDebugConnection(this);
connect(d->m_conn, SIGNAL(stateChanged(QAbstractSocket::SocketState)),
SLOT(connectionStateChanged()));
connect(d->m_conn, SIGNAL(error(QAbstractSocket::SocketError)),
SLOT(connectionErrorOccurred(QAbstractSocket::SocketError)));
}
QmlAdapter::~QmlAdapter()
@@ -109,39 +115,27 @@ void QmlAdapter::pollInferior()
{
++d->m_connectionAttempts;
if (connectToViewer()) {
if (isConnected()) {
d->m_connectionTimer.stop();
d->m_connectionAttempts = 0;
} else if (d->m_connectionAttempts == d->m_maxConnectionAttempts) {
emit connectionStartupFailed();
d->m_connectionTimer.stop();
d->m_connectionAttempts = 0;
} else {
connectToViewer();
}
}
bool QmlAdapter::connectToViewer()
void QmlAdapter::connectToViewer()
{
if (d->m_engine.isNull() || (d->m_conn && d->m_conn->state() != QAbstractSocket::UnconnectedState))
return false;
d->m_conn = new QDeclarativeDebugConnection(this);
connect(d->m_conn, SIGNAL(stateChanged(QAbstractSocket::SocketState)),
SLOT(connectionStateChanged()));
connect(d->m_conn, SIGNAL(error(QAbstractSocket::SocketError)),
SLOT(connectionErrorOccurred(QAbstractSocket::SocketError)));
return;
QString address = d->m_engine.data()->startParameters().qmlServerAddress;
QString port = QString::number(d->m_engine.data()->startParameters().qmlServerPort);
showConnectionStatusMessage(tr("Connect to debug server %1:%2").arg(address).arg(port));
d->m_conn->connectToHost(d->m_engine.data()->startParameters().qmlServerAddress,
d->m_engine.data()->startParameters().qmlServerPort);
// blocks until connected; if no connection is available, will fail immediately
if (!d->m_conn->waitForConnected())
return false;
return true;
quint16 port = d->m_engine.data()->startParameters().qmlServerPort;
showConnectionStatusMessage(tr("Connect to debug server %1:%2").arg(address).arg(QString::number(port)));
d->m_conn->connectToHost(address, port);
}
void QmlAdapter::sendMessage(const QByteArray &msg)