aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2013-10-08 08:47:00 +0300
committerOrgad Shaneh <orgads@gmail.com>2013-10-08 17:09:58 +0200
commit7165378bd8b997604be5833fe696fc0f10a4417e (patch)
tree78609c3f6cb4485484fe3b2805f05dbad5bf27a7
parent3584ce8955548323778545f9ba62ece2f31f503d (diff)
Revert "EditorManager: Fix crash when closing an editor upon activation"
Deleting an editor while currentEditorChanged is apparently not a good idea. Use a queued connection instead. This reverts commits 243a6259618e69b8da9ac2438480c449754f7f77 and d9602ca550c53e60a5229bfec9539e41fa5a694c. Task-number: QTCREATORBUG-10190 Task-number: QTCREATORBUG-10235 Change-Id: Iccbee25fb77714963faa6f7184d1f5f53ed348a6 Reviewed-by: Eike Ziller <eike.ziller@digia.com> Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com> Reviewed-by: Jarek Kobus <jaroslaw.kobus@digia.com>
-rw-r--r--src/plugins/coreplugin/coreplugin.pro5
-rw-r--r--src/plugins/coreplugin/coreplugin.qbs10
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager.cpp2
-rw-r--r--src/plugins/coreplugin/plugintestutils.cpp50
-rw-r--r--src/plugins/coreplugin/plugintestutils.h50
-rw-r--r--src/plugins/cppeditor/cppdoxygen_test.cpp4
-rw-r--r--src/plugins/cppeditor/cppquickfix_test.cpp5
-rw-r--r--src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp4
-rw-r--r--src/plugins/cpptools/cppcompletion_test.cpp4
-rw-r--r--src/plugins/vcsbase/vcsbasesubmiteditor.cpp6
10 files changed, 13 insertions, 127 deletions
diff --git a/src/plugins/coreplugin/coreplugin.pro b/src/plugins/coreplugin/coreplugin.pro
index accc477d71..192c16f4bb 100644
--- a/src/plugins/coreplugin/coreplugin.pro
+++ b/src/plugins/coreplugin/coreplugin.pro
@@ -241,8 +241,3 @@ else:unix {
}
}
OTHER_FILES += editormanager/BinFiles.mimetypes.xml
-
-equals(TEST, 1) {
- SOURCES += plugintestutils.cpp
- HEADERS += plugintestutils.h
-}
diff --git a/src/plugins/coreplugin/coreplugin.qbs b/src/plugins/coreplugin/coreplugin.qbs
index 374da3f4d4..6ebcfb76a0 100644
--- a/src/plugins/coreplugin/coreplugin.qbs
+++ b/src/plugins/coreplugin/coreplugin.qbs
@@ -1,6 +1,5 @@
import qbs.base 1.0
import "../QtcPlugin.qbs" as QtcPlugin
-import "../../../qbs/defaults.js" as Defaults
QtcPlugin {
name: "Core"
@@ -259,15 +258,6 @@ QtcPlugin {
]
}
- Group {
- name: "Tests"
- condition: Defaults.testsEnabled(qbs)
- files: [
- "plugintestutils.cpp",
- "plugintestutils.h"
- ]
- }
-
Export {
Depends { name: "Aggregation" }
Depends { name: "Utils" }
diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index 2f1cc62df8..420b3a7940 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -1162,7 +1162,7 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
emit editorsClosed(acceptedEditors);
foreach (IEditor *editor, acceptedEditors)
- editor->deleteLater();
+ delete editor;
if (currentView) {
if (IEditor *editor = currentView->currentEditor())
diff --git a/src/plugins/coreplugin/plugintestutils.cpp b/src/plugins/coreplugin/plugintestutils.cpp
deleted file mode 100644
index d94f606da1..0000000000
--- a/src/plugins/coreplugin/plugintestutils.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-
-#include "plugintestutils.h"
-
-#include "editormanager/editormanager.h"
-#include "editormanager/ieditor.h"
-
-#include <QCoreApplication>
-
-void Core::Tests::closeAndDeleteEditors(QList<IEditor *> editorsToClose)
-{
- EditorManager::instance()->closeEditors(editorsToClose, /*askAboutModifiedEditors=*/ false);
- // The editors are going to be deleted by the event loop (deleteLater()),
- // but for tests we need them deleted now.
- foreach (Core::IEditor *editor, editorsToClose)
- QCoreApplication::sendPostedEvents(editor, QEvent::DeferredDelete);
-}
-
-void Core::Tests::closeAndDeleteEditor(Core::IEditor *editor)
-{
- closeAndDeleteEditors(QList<IEditor *>() << editor);
-}
diff --git a/src/plugins/coreplugin/plugintestutils.h b/src/plugins/coreplugin/plugintestutils.h
deleted file mode 100644
index 69ada2bad3..0000000000
--- a/src/plugins/coreplugin/plugintestutils.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-****************************************************************************/
-
-
-#ifndef PLUGINTESTUTILS_H
-#define PLUGINTESTUTILS_H
-
-#include "core_global.h"
-
-#include <QList>
-
-namespace Core {
-
-class IEditor;
-
-namespace Tests {
-
-void CORE_EXPORT closeAndDeleteEditor(Core::IEditor *editor);
-void CORE_EXPORT closeAndDeleteEditors(QList<Core::IEditor *> editorsToClose);
-
-} // namespace Tests
-} // namespace Core
-
-#endif // PLUGINTESTUTILS_H
diff --git a/src/plugins/cppeditor/cppdoxygen_test.cpp b/src/plugins/cppeditor/cppdoxygen_test.cpp
index 5ee9989f60..13d0d2d3a0 100644
--- a/src/plugins/cppeditor/cppdoxygen_test.cpp
+++ b/src/plugins/cppeditor/cppdoxygen_test.cpp
@@ -30,7 +30,6 @@
#include "cppeditor.h"
#include <coreplugin/editormanager/editormanager.h>
-#include <coreplugin/plugintestutils.h>
#include <cplusplus/CppDocument.h>
#include <cppeditor/cppeditor.h>
#include <cppeditor/cppeditorplugin.h>
@@ -116,7 +115,8 @@ TestCase::TestCase(const QByteArray &input)
TestCase::~TestCase()
{
- Core::Tests::closeAndDeleteEditor(editor);
+ EditorManager::instance()->closeEditors(QList<Core::IEditor *>() << editor, false);
+ QCoreApplication::processEvents(); // process any pending events
// Remove the test file from the code-model
CppTools::CppModelManagerInterface *mmi = CppTools::CppModelManagerInterface::instance();
diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp
index 8ac2e80d27..0d1bf885fa 100644
--- a/src/plugins/cppeditor/cppquickfix_test.cpp
+++ b/src/plugins/cppeditor/cppquickfix_test.cpp
@@ -34,7 +34,6 @@
#include "cppquickfixassistant.h"
#include "cppquickfixes.h"
-#include <coreplugin/plugintestutils.h>
#include <cpptools/cppcodestylepreferences.h>
#include <cpptools/cppmodelmanager.h>
#include <cpptools/cpppreprocessor.h>
@@ -238,7 +237,6 @@ void TestCase::init(const QStringList &includePaths)
// Rehighlight
testFile->editorWidget->semanticRehighlight(true);
-
// Wait for the semantic info from the future
while (testFile->editorWidget->semanticInfo().doc.isNull())
QCoreApplication::processEvents();
@@ -264,7 +262,8 @@ TestCase::~TestCase()
if (testFile->editor)
editorsToClose << testFile->editor;
}
- Core::Tests::closeAndDeleteEditors(editorsToClose);
+ EditorManager::instance()->closeEditors(editorsToClose, false);
+ QCoreApplication::processEvents(); // process any pending events
// Remove the test files from the code-model
CppModelManagerInterface *mmi = CppModelManagerInterface::instance();
diff --git a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
index a236396de9..428b6e2079 100644
--- a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
+++ b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
@@ -30,7 +30,6 @@
#include "cppeditor.h"
#include "cppeditorplugin.h"
-#include <coreplugin/plugintestutils.h>
#include <utils/fileutils.h>
#include <QDebug>
@@ -252,7 +251,8 @@ TestCase::~TestCase()
if (testFile->editor)
editorsToClose << testFile->editor;
}
- Core::Tests::closeAndDeleteEditors(editorsToClose);
+ EditorManager::instance()->closeEditors(editorsToClose, false);
+ QCoreApplication::processEvents(); // process any pending events
// Remove the test files from the code-model
CppModelManagerInterface *mmi = CppTools::CppModelManagerInterface::instance();
diff --git a/src/plugins/cpptools/cppcompletion_test.cpp b/src/plugins/cpptools/cppcompletion_test.cpp
index d08f62a172..bb1bbd2d6e 100644
--- a/src/plugins/cpptools/cppcompletion_test.cpp
+++ b/src/plugins/cpptools/cppcompletion_test.cpp
@@ -31,7 +31,6 @@
#include "cppcompletionassist.h"
#include "cppmodelmanager.h"
-#include <coreplugin/plugintestutils.h>
#include <texteditor/plaintexteditor.h>
#include <texteditor/codeassist/iassistproposal.h>
@@ -91,7 +90,8 @@ public:
~CompletionTestCase()
{
- Core::Tests::closeAndDeleteEditor(editor);
+ EditorManager::instance()->closeEditors(QList<IEditor*>() << editor,
+ /*askAboutModifiedEditors=*/ false);
cmm->GC();
QVERIFY(cmm->snapshot().isEmpty());
}
diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
index e8c1cfd1d9..15820ce08f 100644
--- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
+++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp
@@ -227,9 +227,11 @@ VcsBaseSubmitEditor::VcsBaseSubmitEditor(const VcsBaseSubmitEditorParameters *pa
connect(VcsPlugin::instance(),
SIGNAL(settingsChanged(VcsBase::Internal::CommonVcsSettings)),
this, SLOT(slotUpdateEditorSettings(VcsBase::Internal::CommonVcsSettings)));
+ // Commit data refresh might lead to closing the editor, so use a queued connection
connect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor*)),
- this, SLOT(slotRefreshCommitData()));
- connect(Core::ICore::mainWindow(), SIGNAL(windowActivated()), this, SLOT(slotRefreshCommitData()));
+ this, SLOT(slotRefreshCommitData()), Qt::QueuedConnection);
+ connect(Core::ICore::mainWindow(), SIGNAL(windowActivated()),
+ this, SLOT(slotRefreshCommitData()), Qt::QueuedConnection);
Aggregation::Aggregate *aggregate = new Aggregation::Aggregate;
aggregate->add(new Find::BaseTextFind(d->m_widget->descriptionEdit()));