summaryrefslogtreecommitdiffstats
path: root/src/qscriptremotetargetdebugger.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qscriptremotetargetdebugger.cpp')
-rw-r--r--src/qscriptremotetargetdebugger.cpp85
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;
}