forked from qt-creator/qt-creator
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 commits243a625961
andd9602ca550
. 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>
This commit is contained in:
committed by
Orgad Shaneh
parent
3584ce8955
commit
7165378bd8
@@ -241,8 +241,3 @@ else:unix {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
OTHER_FILES += editormanager/BinFiles.mimetypes.xml
|
OTHER_FILES += editormanager/BinFiles.mimetypes.xml
|
||||||
|
|
||||||
equals(TEST, 1) {
|
|
||||||
SOURCES += plugintestutils.cpp
|
|
||||||
HEADERS += plugintestutils.h
|
|
||||||
}
|
|
||||||
|
@@ -1,6 +1,5 @@
|
|||||||
import qbs.base 1.0
|
import qbs.base 1.0
|
||||||
import "../QtcPlugin.qbs" as QtcPlugin
|
import "../QtcPlugin.qbs" as QtcPlugin
|
||||||
import "../../../qbs/defaults.js" as Defaults
|
|
||||||
|
|
||||||
QtcPlugin {
|
QtcPlugin {
|
||||||
name: "Core"
|
name: "Core"
|
||||||
@@ -259,15 +258,6 @@ QtcPlugin {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
Group {
|
|
||||||
name: "Tests"
|
|
||||||
condition: Defaults.testsEnabled(qbs)
|
|
||||||
files: [
|
|
||||||
"plugintestutils.cpp",
|
|
||||||
"plugintestutils.h"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
Export {
|
Export {
|
||||||
Depends { name: "Aggregation" }
|
Depends { name: "Aggregation" }
|
||||||
Depends { name: "Utils" }
|
Depends { name: "Utils" }
|
||||||
|
@@ -1162,7 +1162,7 @@ bool EditorManager::closeEditors(const QList<IEditor*> &editorsToClose, bool ask
|
|||||||
emit editorsClosed(acceptedEditors);
|
emit editorsClosed(acceptedEditors);
|
||||||
|
|
||||||
foreach (IEditor *editor, acceptedEditors)
|
foreach (IEditor *editor, acceptedEditors)
|
||||||
editor->deleteLater();
|
delete editor;
|
||||||
|
|
||||||
if (currentView) {
|
if (currentView) {
|
||||||
if (IEditor *editor = currentView->currentEditor())
|
if (IEditor *editor = currentView->currentEditor())
|
||||||
|
@@ -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);
|
|
||||||
}
|
|
@@ -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
|
|
@@ -30,7 +30,6 @@
|
|||||||
#include "cppeditor.h"
|
#include "cppeditor.h"
|
||||||
|
|
||||||
#include <coreplugin/editormanager/editormanager.h>
|
#include <coreplugin/editormanager/editormanager.h>
|
||||||
#include <coreplugin/plugintestutils.h>
|
|
||||||
#include <cplusplus/CppDocument.h>
|
#include <cplusplus/CppDocument.h>
|
||||||
#include <cppeditor/cppeditor.h>
|
#include <cppeditor/cppeditor.h>
|
||||||
#include <cppeditor/cppeditorplugin.h>
|
#include <cppeditor/cppeditorplugin.h>
|
||||||
@@ -116,7 +115,8 @@ TestCase::TestCase(const QByteArray &input)
|
|||||||
|
|
||||||
TestCase::~TestCase()
|
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
|
// Remove the test file from the code-model
|
||||||
CppTools::CppModelManagerInterface *mmi = CppTools::CppModelManagerInterface::instance();
|
CppTools::CppModelManagerInterface *mmi = CppTools::CppModelManagerInterface::instance();
|
||||||
|
@@ -34,7 +34,6 @@
|
|||||||
#include "cppquickfixassistant.h"
|
#include "cppquickfixassistant.h"
|
||||||
#include "cppquickfixes.h"
|
#include "cppquickfixes.h"
|
||||||
|
|
||||||
#include <coreplugin/plugintestutils.h>
|
|
||||||
#include <cpptools/cppcodestylepreferences.h>
|
#include <cpptools/cppcodestylepreferences.h>
|
||||||
#include <cpptools/cppmodelmanager.h>
|
#include <cpptools/cppmodelmanager.h>
|
||||||
#include <cpptools/cpppreprocessor.h>
|
#include <cpptools/cpppreprocessor.h>
|
||||||
@@ -238,7 +237,6 @@ void TestCase::init(const QStringList &includePaths)
|
|||||||
|
|
||||||
// Rehighlight
|
// Rehighlight
|
||||||
testFile->editorWidget->semanticRehighlight(true);
|
testFile->editorWidget->semanticRehighlight(true);
|
||||||
|
|
||||||
// Wait for the semantic info from the future
|
// Wait for the semantic info from the future
|
||||||
while (testFile->editorWidget->semanticInfo().doc.isNull())
|
while (testFile->editorWidget->semanticInfo().doc.isNull())
|
||||||
QCoreApplication::processEvents();
|
QCoreApplication::processEvents();
|
||||||
@@ -264,7 +262,8 @@ TestCase::~TestCase()
|
|||||||
if (testFile->editor)
|
if (testFile->editor)
|
||||||
editorsToClose << 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
|
// Remove the test files from the code-model
|
||||||
CppModelManagerInterface *mmi = CppModelManagerInterface::instance();
|
CppModelManagerInterface *mmi = CppModelManagerInterface::instance();
|
||||||
|
@@ -30,7 +30,6 @@
|
|||||||
#include "cppeditor.h"
|
#include "cppeditor.h"
|
||||||
#include "cppeditorplugin.h"
|
#include "cppeditorplugin.h"
|
||||||
|
|
||||||
#include <coreplugin/plugintestutils.h>
|
|
||||||
#include <utils/fileutils.h>
|
#include <utils/fileutils.h>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
@@ -252,7 +251,8 @@ TestCase::~TestCase()
|
|||||||
if (testFile->editor)
|
if (testFile->editor)
|
||||||
editorsToClose << 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
|
// Remove the test files from the code-model
|
||||||
CppModelManagerInterface *mmi = CppTools::CppModelManagerInterface::instance();
|
CppModelManagerInterface *mmi = CppTools::CppModelManagerInterface::instance();
|
||||||
|
@@ -31,7 +31,6 @@
|
|||||||
#include "cppcompletionassist.h"
|
#include "cppcompletionassist.h"
|
||||||
#include "cppmodelmanager.h"
|
#include "cppmodelmanager.h"
|
||||||
|
|
||||||
#include <coreplugin/plugintestutils.h>
|
|
||||||
#include <texteditor/plaintexteditor.h>
|
#include <texteditor/plaintexteditor.h>
|
||||||
#include <texteditor/codeassist/iassistproposal.h>
|
#include <texteditor/codeassist/iassistproposal.h>
|
||||||
|
|
||||||
@@ -91,7 +90,8 @@ public:
|
|||||||
|
|
||||||
~CompletionTestCase()
|
~CompletionTestCase()
|
||||||
{
|
{
|
||||||
Core::Tests::closeAndDeleteEditor(editor);
|
EditorManager::instance()->closeEditors(QList<IEditor*>() << editor,
|
||||||
|
/*askAboutModifiedEditors=*/ false);
|
||||||
cmm->GC();
|
cmm->GC();
|
||||||
QVERIFY(cmm->snapshot().isEmpty());
|
QVERIFY(cmm->snapshot().isEmpty());
|
||||||
}
|
}
|
||||||
|
@@ -227,9 +227,11 @@ VcsBaseSubmitEditor::VcsBaseSubmitEditor(const VcsBaseSubmitEditorParameters *pa
|
|||||||
connect(VcsPlugin::instance(),
|
connect(VcsPlugin::instance(),
|
||||||
SIGNAL(settingsChanged(VcsBase::Internal::CommonVcsSettings)),
|
SIGNAL(settingsChanged(VcsBase::Internal::CommonVcsSettings)),
|
||||||
this, SLOT(slotUpdateEditorSettings(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*)),
|
connect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor*)),
|
||||||
this, SLOT(slotRefreshCommitData()));
|
this, SLOT(slotRefreshCommitData()), Qt::QueuedConnection);
|
||||||
connect(Core::ICore::mainWindow(), SIGNAL(windowActivated()), this, SLOT(slotRefreshCommitData()));
|
connect(Core::ICore::mainWindow(), SIGNAL(windowActivated()),
|
||||||
|
this, SLOT(slotRefreshCommitData()), Qt::QueuedConnection);
|
||||||
|
|
||||||
Aggregation::Aggregate *aggregate = new Aggregation::Aggregate;
|
Aggregation::Aggregate *aggregate = new Aggregation::Aggregate;
|
||||||
aggregate->add(new Find::BaseTextFind(d->m_widget->descriptionEdit()));
|
aggregate->add(new Find::BaseTextFind(d->m_widget->descriptionEdit()));
|
||||||
|
Reference in New Issue
Block a user