diff options
Diffstat (limited to 'src/qscriptremotetargetdebugger.cpp')
-rw-r--r-- | src/qscriptremotetargetdebugger.cpp | 85 |
1 files changed, 33 insertions, 52 deletions
diff --git a/src/qscriptremotetargetdebugger.cpp b/src/qscriptremotetargetdebugger.cpp index e22e810..9e5152e 100644 --- a/src/qscriptremotetargetdebugger.cpp +++ b/src/qscriptremotetargetdebugger.cpp @@ -41,50 +41,11 @@ // #define DEBUG_DEBUGGER -namespace { - -class WidgetClosedNotifier : public QObject -{ - Q_OBJECT -public: - WidgetClosedNotifier(QWidget *w, QObject *parent = 0) - : QObject(parent), widget(w) - { - w->installEventFilter(this); - } - - bool eventFilter(QObject *watched, QEvent *e) - { - if (watched != widget) - return false; - if (e->type() != QEvent::Close) - return false; - emit widgetClosed(); - return true; - } - -Q_SIGNALS: - void widgetClosed(); - -private: - QWidget *widget; -}; - -} // namespace - class QScriptRemoteTargetDebuggerFrontend : public QObject, public QScriptDebuggerFrontend { Q_OBJECT public: - enum Error { - NoError, - HostNotFoundError, - ConnectionRefusedError, - HandshakeError, - SocketError - }; - enum State { UnattachedState, ConnectingState, @@ -102,7 +63,7 @@ public: Q_SIGNALS: void attached(); void detached(); - void error(Error error); + void error(QScriptRemoteTargetDebugger::Error error); protected: void processCommand(int id, const QScriptDebuggerCommand &command); @@ -169,16 +130,20 @@ void QScriptRemoteTargetDebuggerFrontend::onSocketStateChanged(QAbstractSocket:: case QAbstractSocket::BoundState: break; case QAbstractSocket::ClosingState: - Q_ASSERT(0); + emit detached(); break; case QAbstractSocket::ListeningState: break; } } -void QScriptRemoteTargetDebuggerFrontend::onSocketError(QAbstractSocket::SocketError error) +void QScriptRemoteTargetDebuggerFrontend::onSocketError(QAbstractSocket::SocketError err) { - Q_ASSERT_X(false, Q_FUNC_INFO, qPrintable(m_socket->errorString())); + if (err != QAbstractSocket::RemoteHostClosedError) { + qDebug("%s", qPrintable(m_socket->errorString())); + emit error(QScriptRemoteTargetDebugger::SocketError); + } + } void QScriptRemoteTargetDebuggerFrontend::onReadyRead() @@ -199,14 +164,14 @@ void QScriptRemoteTargetDebuggerFrontend::onReadyRead() qDebug("handshake ok!"); #endif m_state = AttachedState; - QMetaObject::invokeMethod(this, "emitAttachedSignal", Qt::QueuedConnection); + emit attached(); if (m_socket->bytesAvailable() > 0) QMetaObject::invokeMethod(this, "onReadyRead", Qt::QueuedConnection); } else { // d->error = HandshakeError; // d->errorString = QString::fromLatin1("Incorrect handshake data received"); m_state = DetachingState; - emit error(HandshakeError); + emit error(QScriptRemoteTargetDebugger::HandshakeError); m_socket->close(); } } @@ -246,7 +211,11 @@ void QScriptRemoteTargetDebuggerFrontend::onReadyRead() #ifdef DEBUG_DEBUGGER qDebug("notifying event of type %d", event.type()); #endif - notifyEvent(event); + bool handled = notifyEvent(event); + if (handled) { + scheduleCommand(QScriptDebuggerCommand::resumeCommand(), + /*responseHandler=*/0); + } } else { // command response #ifdef DEBUG_DEBUGGER @@ -306,13 +275,29 @@ void QScriptRemoteTargetDebugger::attachTo(const QHostAddress &address, quint16 createDebugger(); if (!m_frontend) { m_frontend = new QScriptRemoteTargetDebuggerFrontend(); - QObject::connect(m_frontend, SIGNAL(attached()), this, SIGNAL(attached())); - QObject::connect(m_frontend, SIGNAL(detached()), this, SIGNAL(detached())); + QObject::connect(m_frontend, SIGNAL(attached()), + this, SIGNAL(attached()), Qt::QueuedConnection); + QObject::connect(m_frontend, SIGNAL(detached()), + this, SIGNAL(detached()), Qt::QueuedConnection); + QObject::connect(m_frontend, SIGNAL(error(QScriptRemoteTargetDebugger::Error)), + this, SIGNAL(error(QScriptRemoteTargetDebugger::Error))); } m_frontend->attachTo(address, port); m_debugger->setFrontend(m_frontend); } +void QScriptRemoteTargetDebugger::detach() +{ + if (m_frontend) + m_frontend->detach(); +} + +bool QScriptRemoteTargetDebugger::listen(const QHostAddress &address, quint16 port) +{ + Q_ASSERT_X(false, Q_FUNC_INFO, "implement me"); + return false; +} + void QScriptRemoteTargetDebugger::createDebugger() { if (!m_debugger) { @@ -422,10 +407,6 @@ QMainWindow *QScriptRemoteTargetDebugger::standardWindow() const if (state.isValid()) win->restoreState(state.toByteArray()); - WidgetClosedNotifier *closedNotifier = new WidgetClosedNotifier(win, that); - QObject::connect(closedNotifier, SIGNAL(widgetClosed()), - action(ContinueAction), SLOT(trigger())); - const_cast<QScriptRemoteTargetDebugger*>(this)->m_standardWindow = win; return win; } |