OSDN Git Service

Debugger: Automatically adapt to the languages the running engine supports
authorKai Koehne <kai.koehne@nokia.com>
Wed, 12 Oct 2011 14:30:14 +0000 (16:30 +0200)
committerhjk <qthjk@ovi.com>
Thu, 13 Oct 2011 15:43:57 +0000 (17:43 +0200)
We used to get the layout only from the current/last run configuration. However,
this fails for engines started by other means (Debug->Start Debugging submenu).

Change-Id: I87e12457c7cd68a326ac1827298a3542e149199b
Reviewed-by: hjk <qthjk@ovi.com>
src/plugins/debugger/debuggermainwindow.cpp
src/plugins/debugger/debuggermainwindow.h
src/plugins/debugger/debuggerplugin.cpp

index 94718c1..92a318f 100644 (file)
@@ -134,6 +134,7 @@ public:
 
     DebuggerLanguages m_previousDebugLanguages;
     DebuggerLanguages m_activeDebugLanguages;
+    DebuggerLanguages m_engineDebugLanguages;
 
     ActionContainer *m_viewsMenu;
 
@@ -151,6 +152,7 @@ DebuggerMainWindowPrivate::DebuggerMainWindowPrivate(DebuggerMainWindow *mw)
     , m_changingUI(false)
     , m_previousDebugLanguages(AnyLanguage)
     , m_activeDebugLanguages(AnyLanguage)
+    , m_engineDebugLanguages(AnyLanguage)
     , m_viewsMenu(0)
 {
     createViewsMenuItems();
@@ -222,11 +224,15 @@ void DebuggerMainWindowPrivate::updateActiveLanguages()
 {
     DebuggerLanguages newLanguages = AnyLanguage;
 
-    if (m_previousRunConfiguration) {
-        if (m_previousRunConfiguration.data()->useCppDebugger())
-            newLanguages = CppLanguage;
-        if (m_previousRunConfiguration.data()->useQmlDebugger())
-            newLanguages |= QmlLanguage;
+    if (m_engineDebugLanguages != AnyLanguage)
+        newLanguages = m_engineDebugLanguages;
+    else {
+        if (m_previousRunConfiguration) {
+            if (m_previousRunConfiguration.data()->useCppDebugger())
+                newLanguages |= CppLanguage;
+            if (m_previousRunConfiguration.data()->useQmlDebugger())
+                newLanguages |= QmlLanguage;
+        }
     }
 
     if (newLanguages != m_activeDebugLanguages) {
@@ -269,6 +275,15 @@ DebuggerLanguages DebuggerMainWindow::activeDebugLanguages() const
     return d->m_activeDebugLanguages;
 }
 
+void DebuggerMainWindow::setEngineDebugLanguages(DebuggerLanguages languages)
+{
+    if (d->m_engineDebugLanguages == languages)
+        return;
+
+    d->m_engineDebugLanguages = languages;
+    d->updateActiveLanguages();
+}
+
 void DebuggerMainWindow::onModeChanged(IMode *mode)
 {
     d->m_inDebugMode = (mode && mode->id() == Constants::MODE_DEBUG);
index 9774705..f6ab0a4 100644 (file)
@@ -62,6 +62,7 @@ public:
 
     // Active languages to be debugged.
     DebuggerLanguages activeDebugLanguages() const;
+    void setEngineDebugLanguages(DebuggerLanguages languages);
 
     // Called when all dependent plugins have loaded.
     void initialize();
index 3b9184c..81e083d 100644 (file)
@@ -1967,6 +1967,8 @@ void DebuggerPluginPrivate::connectEngine(DebuggerEngine *engine)
     //m_threadBox->setModelColumn(ThreadData::ComboNameColumn);
     m_watchersWindow->setModel(engine->watchersModel());
     engine->watchHandler()->rebuildModel();
+
+    mainWindow()->setEngineDebugLanguages(engine->languages());
 }
 
 static void changeFontSize(QWidget *widget, qreal size)