Commit e4a62670 authored by Eike Ziller's avatar Eike Ziller

Merge remote-tracking branch 'origin/4.3'

 Conflicts:
	src/shared/qbs

Change-Id: I521ed7703298062d3860ddce3c82444bedd49e60
parents b57372f2 a72b38b8
......@@ -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);
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment