From 5cd1cd10c9cdd1b2ebf50dcee0a6c8a151c02e74 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Fri, 3 Dec 2010 10:32:47 +0100 Subject: [PATCH] QmlJsInspector: Fix crash on plugin initialization Delay the setup of the UI until the Debug mode is activated. This is required by the Debugger now setting up most of it's UI in extensionsInitialized ... --- .../qmljsinspector/qmljsinspectorplugin.cpp | 21 ++++++++++++++++++- .../qmljsinspector/qmljsinspectorplugin.h | 1 + 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/plugins/qmljsinspector/qmljsinspectorplugin.cpp b/src/plugins/qmljsinspector/qmljsinspectorplugin.cpp index 2c0c215c5cd..6a3c8d20c98 100644 --- a/src/plugins/qmljsinspector/qmljsinspectorplugin.cpp +++ b/src/plugins/qmljsinspector/qmljsinspectorplugin.cpp @@ -45,6 +45,9 @@ #include #include #include +#include + +#include #include #include @@ -114,7 +117,9 @@ void InspectorPlugin::extensionsInitialized() connect(pluginManager, SIGNAL(objectAdded(QObject*)), SLOT(objectAdded(QObject*))); connect(pluginManager, SIGNAL(aboutToRemoveObject(QObject*)), SLOT(aboutToRemoveObject(QObject*))); - m_inspectorUi->setupUi(); + Core::ICore *core = Core::ICore::instance(); + connect(core->modeManager(), SIGNAL(currentModeAboutToChange(Core::IMode*)), + this, SLOT(modeAboutToChange(Core::IMode*))); } void InspectorPlugin::objectAdded(QObject *object) @@ -155,4 +160,18 @@ void InspectorPlugin::clientProxyConnected() m_inspectorUi->connected(m_clientProxy); } +void InspectorPlugin::modeAboutToChange(Core::IMode *newMode) +{ + QTC_ASSERT(newMode, return); + + if (newMode->id() == Debugger::Constants::MODE_DEBUG) { + m_inspectorUi->setupUi(); + + // make sure we're not called again + Core::ICore *core = Core::ICore::instance(); + disconnect(core->modeManager(), SIGNAL(currentModeAboutToChange(Core::IMode*)), + this, SLOT(modeAboutToChange(Core::IMode*))); + } +} + Q_EXPORT_PLUGIN(InspectorPlugin) diff --git a/src/plugins/qmljsinspector/qmljsinspectorplugin.h b/src/plugins/qmljsinspector/qmljsinspectorplugin.h index f0f9500fb74..8202f36f699 100644 --- a/src/plugins/qmljsinspector/qmljsinspectorplugin.h +++ b/src/plugins/qmljsinspector/qmljsinspectorplugin.h @@ -75,6 +75,7 @@ private slots: void objectAdded(QObject *object); void aboutToRemoveObject(QObject *obj); void clientProxyConnected(); + void modeAboutToChange(Core::IMode *mode); private: void createActions();