From ba82227ae88ed8bc7d92c6f85e42cce4c896962e Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@nokia.com>
Date: Thu, 2 Sep 2010 14:40:13 +0200
Subject: [PATCH] QmlObserver: Disable "Observer" mode when no debugging client
 is attached

---
 .../qmljsdebugger/include/qdeclarativedesigndebugserver.h    | 3 +++
 .../qmljsdebugger/qdeclarativedesigndebugserver.cpp          | 5 +++++
 src/tools/qml/qmlobserver/qmlruntime.cpp                     | 3 +++
 3 files changed, 11 insertions(+)

diff --git a/share/qtcreator/qmljsdebugger/include/qdeclarativedesigndebugserver.h b/share/qtcreator/qmljsdebugger/include/qdeclarativedesigndebugserver.h
index a6efe3a440e..d69fa3c2dee 100644
--- a/share/qtcreator/qmljsdebugger/include/qdeclarativedesigndebugserver.h
+++ b/share/qtcreator/qmljsdebugger/include/qdeclarativedesigndebugserver.h
@@ -75,6 +75,8 @@ public Q_SLOTS:
     void contextPathUpdated(const QStringList &contextPath);
 
 Q_SIGNALS:
+    void debuggingClientChanged(bool hasDebuggingClient);
+
     void currentObjectsChanged(const QList<QObject*> &objects);
     void designModeBehaviorChanged(bool inDesignMode);
     void reloadRequested();
@@ -96,6 +98,7 @@ Q_SIGNALS:
     void clearComponentCacheRequested();
 
 protected:
+    virtual void enabledChanged(bool enabled);
     virtual void messageReceived(const QByteArray &);
 
 private:
diff --git a/share/qtcreator/qmljsdebugger/qdeclarativedesigndebugserver.cpp b/share/qtcreator/qmljsdebugger/qdeclarativedesigndebugserver.cpp
index cbb64752bba..c6bf9d4d369 100644
--- a/share/qtcreator/qmljsdebugger/qdeclarativedesigndebugserver.cpp
+++ b/share/qtcreator/qmljsdebugger/qdeclarativedesigndebugserver.cpp
@@ -58,6 +58,11 @@ QDeclarativeDesignDebugServer *QDeclarativeDesignDebugServer::instance()
     return qmlDesignDebugServer();
 }
 
+void QDeclarativeDesignDebugServer::enabledChanged(bool enabled)
+{
+    emit debuggingClientChanged(enabled);
+}
+
 void QDeclarativeDesignDebugServer::messageReceived(const QByteArray &message)
 {
     QDataStream ds(message);
diff --git a/src/tools/qml/qmlobserver/qmlruntime.cpp b/src/tools/qml/qmlobserver/qmlruntime.cpp
index 4ebc3ae7637..58328110b6c 100644
--- a/src/tools/qml/qmlobserver/qmlruntime.cpp
+++ b/src/tools/qml/qmlobserver/qmlruntime.cpp
@@ -55,6 +55,7 @@
 #endif
 
 #include <qdeclarativedesignview.h>
+#include <qdeclarativedesigndebugserver.h>
 #include <utils/crumblepath.h>
 
 #include "qmlruntime.h"
@@ -785,8 +786,10 @@ void QDeclarativeViewer::createMenu()
     designModeBehaviorAction->setShortcut(QKeySequence("Ctrl+D"));
     designModeBehaviorAction->setCheckable(true);
     designModeBehaviorAction->setChecked(canvas->designModeBehavior());
+    designModeBehaviorAction->setEnabled(QDeclarativeDesignDebugServer::hasDebuggingClient());
     connect(designModeBehaviorAction, SIGNAL(triggered(bool)), this, SLOT(setDesignModeBehavior(bool)));
     connect(canvas, SIGNAL(designModeBehaviorChanged(bool)), designModeBehaviorAction, SLOT(setChecked(bool)));
+    connect(QDeclarativeDesignDebugServer::instance(), SIGNAL(debuggingClientChanged(bool)), designModeBehaviorAction, SLOT(setEnabled(bool)));
 
     QAction *proxyAction = new QAction(tr("HTTP &Proxy..."), this);
     connect(proxyAction, SIGNAL(triggered()), this, SLOT(showProxySettings()));
-- 
GitLab