forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.3'
Conflicts: src/shared/qbs Change-Id: I521ed7703298062d3860ddce3c82444bedd49e60
This commit is contained in:
83
dist/changes-4.3.1.md
vendored
83
dist/changes-4.3.1.md
vendored
@@ -7,25 +7,108 @@ you can check out from the public Git repository. For example:
|
||||
git clone git://code.qt.io/qt-creator/qt-creator.git
|
||||
git log --cherry-pick --pretty=oneline v4.3.0..v4.3.1
|
||||
|
||||
General
|
||||
|
||||
* Fixed that wizards overwrote existing files even when told not to do so
|
||||
(QTCREATORBUG-18284)
|
||||
|
||||
Editing
|
||||
|
||||
* Fixed memory leak in code completion (QTCREATORBUG-18326)
|
||||
|
||||
All Projects
|
||||
|
||||
* Fixed that links in `Application Output` stopped working after application
|
||||
stops (QTCREATORBUG-18134)
|
||||
* Fixed that `Application Output` was no longer editable (QTCREATORBUG-18418)
|
||||
|
||||
QMake Projects
|
||||
|
||||
* Fixed `Add Library` (QTCREATORBUG-18263)
|
||||
|
||||
CMake Projects
|
||||
|
||||
* Fixed crash when restoring session with multiple CMake projects
|
||||
(QTCREATORBUG-18258)
|
||||
* Fixed that `test` target was missing (QTCREATORBUG-18323)
|
||||
* Fixed that `STATIC` and `INTERNAL` variables were shown in project
|
||||
configuration
|
||||
* Fixed that CMake `message`s were not shown in `Issues` pane
|
||||
(QTCREATORBUG-18318)
|
||||
* Fixed issues with CMake variables that contain `//` or `#`
|
||||
(QTCREATORBUG-18385)
|
||||
* Fixed that deployment information could contain empty items
|
||||
(QTCREATORBUG-18406)
|
||||
* Fixed that targets were duplicated when importing project (QTCREATORBUG-18409)
|
||||
* Fixed that building application failed first time and after build error
|
||||
when using CMake < 3.7 (QTCREATORBUG-18290, QTCREATORBUG-18382)
|
||||
|
||||
Qbs Projects
|
||||
|
||||
* Fixed crash when renaming files (QTCREATORBUG-18440)
|
||||
|
||||
Autotools Projects
|
||||
|
||||
* Fixed regressions in project tree (QTCREATORBUG-18371)
|
||||
|
||||
C++ Support
|
||||
|
||||
* Fixed crash when requesting refactoring operations on invalid code
|
||||
(QTCREATORBUG-18355)
|
||||
|
||||
QML Support
|
||||
|
||||
* Fixed crash when changing kit environment (QTCREATORBUG-18335)
|
||||
|
||||
Valgrind
|
||||
|
||||
* Fixed crash when running analyzer for iOS and Android (QTCREATORBUG-18254)
|
||||
|
||||
Version Control Systems
|
||||
|
||||
* Fixed filtering of untracked files in commit editor
|
||||
when multiple projects are open
|
||||
* Git
|
||||
* Fixed that ref names were missing for `Show`
|
||||
* Mercurial
|
||||
* Fixed extra options in diff and log (QTCREATORBUG-17987)
|
||||
* Gerrit
|
||||
* Fixed parsing output from Gerrit 2.14
|
||||
|
||||
Test Integration
|
||||
|
||||
* Fixed that changing QML file triggered full rescan for tests
|
||||
(QTCREATORBUG-18315)
|
||||
* Fixed issues with multiple build targets
|
||||
(QTCREATORBUG-17783, QTCREATORBUG-18357)
|
||||
|
||||
Platform Specific
|
||||
|
||||
Windows
|
||||
|
||||
* Fixed checking whether example should be copied to writable location
|
||||
(QTCREATORBUG-18184)
|
||||
* Fixed issues with MSVC2017 and CMake (QTCREATORBUG-17925)
|
||||
|
||||
macOS
|
||||
|
||||
* Fixed performance issue on HiDPI displays (QTBUG-61384)
|
||||
|
||||
WinRT
|
||||
|
||||
* Fixed running MSVC 2017 based applications (QTCREATORBUG-18288)
|
||||
|
||||
Android
|
||||
|
||||
* Fixed detection of MIPS64 toolchains
|
||||
* Fixed that 64-bit ABIs were missing in AVD creation dialog
|
||||
|
||||
iOS
|
||||
|
||||
* Fixed running on iOS 10.3 devices (QTCREATORBUG-18380)
|
||||
* Fixed crash that could occur at startup while device is connected
|
||||
(QTCREATORBUG-18226)
|
||||
|
||||
BareMetal
|
||||
|
||||
* Fixed crash on shutdown
|
||||
|
@@ -286,5 +286,17 @@ QString GTestTreeItem::nameSuffix() const
|
||||
return suffix;
|
||||
}
|
||||
|
||||
QSet<QString> GTestTreeItem::internalTargets() const
|
||||
{
|
||||
QSet<QString> result;
|
||||
const auto cppMM = CppTools::CppModelManager::instance();
|
||||
const auto projectInfo = cppMM->projectInfo(ProjectExplorer::SessionManager::startupProject());
|
||||
for (const CppTools::ProjectPart::Ptr projectPart : projectInfo.projectParts()) {
|
||||
if (projectPart->projectFile == proFile())
|
||||
result.insert(projectPart->buildSystemTarget);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace Autotest
|
||||
|
@@ -66,6 +66,7 @@ public:
|
||||
GTestTreeItem::TestStates state,
|
||||
const QString &proFile) const;
|
||||
QString nameSuffix() const;
|
||||
QSet<QString> internalTargets() const override;
|
||||
|
||||
private:
|
||||
bool modifyTestSetContent(const GTestParseResult *result);
|
||||
|
@@ -86,7 +86,12 @@ void TestConfiguration::completeTestInformation(int runMode)
|
||||
&& targWithProjectFile.at(1).startsWith(bti.projectFilePath.toString());
|
||||
});
|
||||
});
|
||||
const Utils::FileName executable = targetInfo.targetFilePath; // empty if BTI is default created
|
||||
QString executable = targetInfo.targetFilePath.toString(); // empty if BTI default created
|
||||
if (Utils::HostOsInfo::isWindowsHost() && !executable.isEmpty()
|
||||
&& !executable.toLower().endsWith(".exe")) {
|
||||
executable = Utils::HostOsInfo::withExecutableSuffix(executable);
|
||||
}
|
||||
|
||||
for (RunConfiguration *runConfig : target->runConfigurations()) {
|
||||
if (!isLocal(runConfig)) // TODO add device support
|
||||
continue;
|
||||
@@ -99,13 +104,18 @@ void TestConfiguration::completeTestInformation(int runMode)
|
||||
StandardRunnable stdRunnable = runnable.as<StandardRunnable>();
|
||||
// TODO this might pick up the wrong executable
|
||||
m_executableFile = stdRunnable.executable;
|
||||
if (Utils::HostOsInfo::isWindowsHost() && !m_executableFile.isEmpty()
|
||||
&& !m_executableFile.toLower().endsWith(".exe")) {
|
||||
m_executableFile = Utils::HostOsInfo::withExecutableSuffix(m_executableFile);
|
||||
}
|
||||
m_displayName = runConfig->displayName();
|
||||
m_workingDir = Utils::FileUtils::normalizePathName(stdRunnable.workingDirectory);
|
||||
m_environment = stdRunnable.environment;
|
||||
m_project = project;
|
||||
if (runMode == TestRunner::Debug)
|
||||
m_runConfig = new TestRunConfiguration(runConfig->target(), this);
|
||||
break;
|
||||
if (m_executableFile == executable) // we can find a better runConfig if no match
|
||||
break;
|
||||
}
|
||||
}
|
||||
// RunConfiguration for this target could be explicitly removed or not created at all
|
||||
@@ -117,12 +127,7 @@ void TestConfiguration::completeTestInformation(int runMode)
|
||||
if (runnable.is<StandardRunnable>()) {
|
||||
StandardRunnable stdRunnable = runnable.as<StandardRunnable>();
|
||||
m_environment = stdRunnable.environment;
|
||||
// when guessing we might have no extension
|
||||
const QString &exeString = executable.toString();
|
||||
if (Utils::HostOsInfo::isWindowsHost() && !exeString.toLower().endsWith(".exe"))
|
||||
m_executableFile = Utils::HostOsInfo::withExecutableSuffix(exeString);
|
||||
else
|
||||
m_executableFile = exeString;
|
||||
m_executableFile = executable;
|
||||
m_project = project;
|
||||
m_guessedConfiguration = true;
|
||||
m_guessedFrom = rc->displayName();
|
||||
|
@@ -247,8 +247,8 @@ bool QbsProject::ensureWriteableQbsFile(const QString &file)
|
||||
}
|
||||
|
||||
bool QbsProject::addFilesToProduct(const QStringList &filePaths,
|
||||
const qbs::ProductData &productData,
|
||||
const qbs::GroupData &groupData, QStringList *notAdded)
|
||||
const qbs::ProductData productData,
|
||||
const qbs::GroupData groupData, QStringList *notAdded)
|
||||
{
|
||||
QTC_ASSERT(m_qbsProject.isValid(), return false);
|
||||
QStringList allPaths = groupData.allFilePaths();
|
||||
@@ -272,8 +272,8 @@ bool QbsProject::addFilesToProduct(const QStringList &filePaths,
|
||||
}
|
||||
|
||||
bool QbsProject::removeFilesFromProduct(const QStringList &filePaths,
|
||||
const qbs::ProductData &productData,
|
||||
const qbs::GroupData &groupData,
|
||||
const qbs::ProductData productData,
|
||||
const qbs::GroupData groupData,
|
||||
QStringList *notRemoved)
|
||||
{
|
||||
QTC_ASSERT(m_qbsProject.isValid(), return false);
|
||||
@@ -300,8 +300,8 @@ bool QbsProject::removeFilesFromProduct(const QStringList &filePaths,
|
||||
}
|
||||
|
||||
bool QbsProject::renameFileInProduct(const QString &oldPath, const QString &newPath,
|
||||
const qbs::ProductData &productData,
|
||||
const qbs::GroupData &groupData)
|
||||
const qbs::ProductData productData,
|
||||
const qbs::GroupData groupData)
|
||||
{
|
||||
if (newPath.isEmpty())
|
||||
return false;
|
||||
|
@@ -66,14 +66,19 @@ public:
|
||||
QStringList filesGeneratedFrom(const QString &sourceFile) const override;
|
||||
|
||||
bool isProjectEditable() const;
|
||||
bool addFilesToProduct(const QStringList &filePaths, const qbs::ProductData &productData,
|
||||
const qbs::GroupData &groupData, QStringList *notAdded);
|
||||
// qbs::ProductData and qbs::GroupData are held by the nodes in the project tree.
|
||||
// These methods change those trees and invalidate the lot, so pass in copies of
|
||||
// the data we are interested in!
|
||||
// The overhead is not as big as it seems at first glance: These all are handles
|
||||
// for shared data.
|
||||
bool addFilesToProduct(const QStringList &filePaths, const qbs::ProductData productData,
|
||||
const qbs::GroupData groupData, QStringList *notAdded);
|
||||
bool removeFilesFromProduct(const QStringList &filePaths,
|
||||
const qbs::ProductData &productData, const qbs::GroupData &groupData,
|
||||
const qbs::ProductData productData, const qbs::GroupData groupData,
|
||||
QStringList *notRemoved);
|
||||
bool renameFileInProduct(const QString &oldPath,
|
||||
const QString &newPath, const qbs::ProductData &productData,
|
||||
const qbs::GroupData &groupData);
|
||||
const QString &newPath, const qbs::ProductData productData,
|
||||
const qbs::GroupData groupData);
|
||||
|
||||
qbs::BuildJob *build(const qbs::BuildOptions &opts, QStringList products, QString &error);
|
||||
qbs::CleanJob *clean(const qbs::CleanOptions &opts, const QStringList &productNames,
|
||||
|
@@ -175,14 +175,18 @@ void TextEditorWidget::setBlockCurserSelectionSyncronisation(bool b)
|
||||
|
||||
bool TextEditorWidget::eventFilter( QObject *, QEvent *event)
|
||||
{
|
||||
static std::vector<int> overrideKeys = { Qt::Key_Delete, Qt::Key_Backspace, Qt::Key_Left,
|
||||
Qt::Key_Right, Qt::Key_Up, Qt::Key_Down, Qt::Key_Insert,
|
||||
static std::vector<int> overrideKeys = { Qt::Key_Delete, Qt::Key_Backspace, Qt::Key_Insert,
|
||||
Qt::Key_Escape };
|
||||
|
||||
static std::vector<QKeySequence> overrideSequences = { QKeySequence::SelectAll, QKeySequence::Cut,
|
||||
QKeySequence::Copy, QKeySequence::Delete,
|
||||
QKeySequence::Paste, QKeySequence::Undo,
|
||||
QKeySequence::Redo, QKeySequence(Qt::CTRL + Qt::ALT) };
|
||||
QKeySequence::Copy, QKeySequence::Delete,
|
||||
QKeySequence::Paste, QKeySequence::Undo,
|
||||
QKeySequence::Redo, QKeySequence(Qt::CTRL + Qt::ALT),
|
||||
QKeySequence(Qt::Key_Left + Qt::CTRL),
|
||||
QKeySequence(Qt::Key_Right + Qt::CTRL),
|
||||
QKeySequence(Qt::Key_Up + Qt::CTRL),
|
||||
QKeySequence(Qt::Key_Down + Qt::CTRL)
|
||||
};
|
||||
if (event->type() == QEvent::ShortcutOverride) {
|
||||
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
|
||||
|
||||
|
@@ -260,10 +260,16 @@ void QmlJSEditorPlugin::reformatFile()
|
||||
return;
|
||||
|
||||
const QString &newText = QmlJS::reformat(document);
|
||||
QTextCursor tc(m_currentDocument->document());
|
||||
tc.movePosition(QTextCursor::Start);
|
||||
tc.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
|
||||
tc.insertText(newText);
|
||||
QmlJSEditorWidget *widget = EditorManager::currentEditor()
|
||||
? qobject_cast<QmlJSEditorWidget*>(EditorManager::currentEditor()->widget())
|
||||
: nullptr;
|
||||
if (widget) {
|
||||
const int position = widget->position();
|
||||
m_currentDocument->document()->setPlainText(newText);
|
||||
widget->setCursorPosition(position);
|
||||
} else {
|
||||
m_currentDocument->document()->setPlainText(newText);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user