diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2017-11-14 13:11:06 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2017-11-14 14:20:34 +0000 |
commit | 69e9f81bd8cf87b55867a6d782e7b80ccdc8e614 (patch) | |
tree | 70803fc4e471de23c9bf65476e83efc10b0de3ab /src | |
parent | 77bea93a6ee09ed7dcccdbb5f28dc14bdb593e0f (diff) |
ApplicationOutputPane: Handle runControl being nullptr
The runControl associated with a tab might become nullptr. That was
already handled in some places. Do so consistently now.
Change-Id: I899cc467a213f2a991967fa98a5819a98412d387
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/projectexplorer/appoutputpane.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp index fa4d4f1c19..73b28c176e 100644 --- a/src/plugins/projectexplorer/appoutputpane.cpp +++ b/src/plugins/projectexplorer/appoutputpane.cpp @@ -321,7 +321,7 @@ void AppOutputPane::updateCloseActions() bool AppOutputPane::aboutToClose() const { return Utils::allOf(m_runControlTabs, [](const RunControlTab &rt) { - return !rt.runControl->isRunning() || rt.runControl->promptToStop(); + return !rt.runControl || !rt.runControl->isRunning() || rt.runControl->promptToStop(); }); } @@ -507,9 +507,9 @@ void AppOutputPane::setBehaviorOnOutput(RunControl *rc, AppOutputPane::BehaviorO void AppOutputPane::reRunRunControl() { const int index = currentIndex(); - QTC_ASSERT(index != -1 && !m_runControlTabs.at(index).runControl->isRunning(), return); - - RunControlTab &tab = m_runControlTabs[index]; + const RunControlTab &tab = m_runControlTabs.at(index); + QTC_ASSERT(tab.runControl, return); + QTC_ASSERT(index != -1 && !tab.runControl->isRunning(), return); handleOldOutput(tab.window); tab.window->scrollToBottom(); @@ -521,7 +521,7 @@ void AppOutputPane::attachToRunControl() const int index = currentIndex(); QTC_ASSERT(index != -1, return); RunControl *rc = m_runControlTabs.at(index).runControl; - QTC_ASSERT(rc->isRunning(), return); + QTC_ASSERT(rc && rc->isRunning(), return); ExtensionSystem::Invoker<void>(debuggerPlugin(), "attachExternalApplication", rc); } @@ -551,9 +551,10 @@ void AppOutputPane::closeTabs(CloseTabMode mode) QList<RunControl *> AppOutputPane::allRunControls() const { - return Utils::transform<QList>(m_runControlTabs,[](const RunControlTab &tab) { + const QList<RunControl *> list = Utils::transform<QList>(m_runControlTabs,[](const RunControlTab &tab) { return tab.runControl.data(); }); + return Utils::filtered(list, [](RunControl *rc) { return rc; }); } void AppOutputPane::closeTab(int tabIndex, CloseTabMode closeTabMode) @@ -568,7 +569,7 @@ void AppOutputPane::closeTab(int tabIndex, CloseTabMode closeTabMode) // Prompt user to stop if (closeTabMode == CloseTabWithPrompt) { QWidget *tabWidget = m_tabWidget->widget(tabIndex); - if (runControl->isRunning() && !runControl->promptToStop()) + if (runControl && runControl->isRunning() && !runControl->promptToStop()) return; // The event loop has run, thus the ordering might have changed, a tab might // have been closed, so do some strange things... |