forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/2.6'
Conflicts: qtcreator.pri qtcreator.qbs src/plugins/android/androidrunner.cpp src/plugins/projectexplorer/kitmanager.cpp Change-Id: I653ddaef6e341818fc74aacfe30e89c07f40a8c6
This commit is contained in:
166
dist/changes-2.6.1
vendored
Normal file
166
dist/changes-2.6.1
vendored
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
Qt Creator version 2.6.1 is a bugfix release.
|
||||||
|
|
||||||
|
The most important changes are listed in this document. For a complete
|
||||||
|
list of changes, see the Git log for the Qt Creator sources that
|
||||||
|
you can check out from the public Git repository. For example:
|
||||||
|
|
||||||
|
git clone git://gitorious.org/qt-creator/qt-creator.git
|
||||||
|
git log --cherry-pick --pretty=oneline v2.6.0..v2.6.1
|
||||||
|
|
||||||
|
General
|
||||||
|
* Fixed opening files ending in "++" (QTCREATORBUG-8272)
|
||||||
|
|
||||||
|
Editing
|
||||||
|
* Fixed freeze when searching for certain regular expressions in a selected
|
||||||
|
block (QTCREATORBUG-8159)
|
||||||
|
|
||||||
|
Managing Projects
|
||||||
|
* Fixed setting the default kit (QTCREATORBUG-8205)
|
||||||
|
* Fixed several crashes when managing kits
|
||||||
|
* Fixed cloning of auto-detected kits (QTCREATORBUG-8231)
|
||||||
|
|
||||||
|
QMake Projects
|
||||||
|
|
||||||
|
CMake Projects
|
||||||
|
* Fixed a crash when selecting kit without tool chain when opening project
|
||||||
|
|
||||||
|
Debugging
|
||||||
|
* Fixed connection problems when remotely attaching to a running application
|
||||||
|
|
||||||
|
Debugging QML/JS
|
||||||
|
* Fixed remote QML debugging which ignored the kit settings
|
||||||
|
* Fixed that locals and expressions could become disabled (QTCREATORBUG-8167)
|
||||||
|
|
||||||
|
Analyzing Code
|
||||||
|
|
||||||
|
C++ Support
|
||||||
|
* Fixed code completion for Qt containers (QTCREATORBUG-8228)
|
||||||
|
|
||||||
|
QML/JS Support
|
||||||
|
* Fixed the warning about missing QmlViewer in Qt 5 (QTCREATORBUG-8187)
|
||||||
|
* Split up Qt Quick wizards into Qt Quick 1 and Qt Quick 2 versions
|
||||||
|
(QTCREATORBUG-8236, QTCREATORBUG-8269)
|
||||||
|
|
||||||
|
GLSL Support
|
||||||
|
|
||||||
|
Qt Quick Designer
|
||||||
|
* Removed a confusing warning about qml2puppet not being found (QTCREATORBUG-7858)
|
||||||
|
|
||||||
|
Help
|
||||||
|
|
||||||
|
Qt Designer
|
||||||
|
|
||||||
|
Version control plugins
|
||||||
|
|
||||||
|
Git
|
||||||
|
* Fixed detection of Git version with 2-digit patch number
|
||||||
|
SVN
|
||||||
|
|
||||||
|
FakeVim
|
||||||
|
|
||||||
|
Platform Specific
|
||||||
|
|
||||||
|
Mac
|
||||||
|
* Fixed missing interface languages (QTCREATORBUG-8244)
|
||||||
|
* Added missing QWebView and other widgets to Qt Designer (QTCREATORBUG-8256)
|
||||||
|
* Fixed layout issues in preferences (QTCREATORBUG-8345)
|
||||||
|
|
||||||
|
Linux (GNOME and KDE)
|
||||||
|
|
||||||
|
Windows
|
||||||
|
* Fixed Windows SDK 7.1 compiler detection
|
||||||
|
* Fixed empty welcome screen when running from incorrectly capitalized
|
||||||
|
application directory (QTCREATORBUG-6126)
|
||||||
|
|
||||||
|
Symbian Target
|
||||||
|
|
||||||
|
Remote Linux Support
|
||||||
|
|
||||||
|
Madde
|
||||||
|
|
||||||
|
Credits go to:
|
||||||
|
Aleksey Sidorov
|
||||||
|
Alessandro Portale
|
||||||
|
Andreas Holzammer
|
||||||
|
Andre Hartmann
|
||||||
|
André Pönitz
|
||||||
|
Aurélien Gâteau
|
||||||
|
Aurindam Jana
|
||||||
|
axasia
|
||||||
|
Bill King
|
||||||
|
BogDan Vatra
|
||||||
|
Bojan Petrovic
|
||||||
|
Bradley T. Hughes
|
||||||
|
Campbell Barton
|
||||||
|
Casper van Donderen
|
||||||
|
Christiaan Janssen
|
||||||
|
Christian Kamm
|
||||||
|
Christian Kandeler
|
||||||
|
Christian Stenger
|
||||||
|
cnavarro
|
||||||
|
Daniel Molkentin
|
||||||
|
Daniel Teske
|
||||||
|
David Schulz
|
||||||
|
Dmitry Savchenko
|
||||||
|
Eike Ziller
|
||||||
|
Erik Verbruggen
|
||||||
|
Fawzi Mohamed
|
||||||
|
Flex Ferrum
|
||||||
|
Francois Ferrand
|
||||||
|
Franklin Weng
|
||||||
|
Friedemann Kleint
|
||||||
|
hluk
|
||||||
|
Hugues Delorme
|
||||||
|
Jarek Kobus
|
||||||
|
Jędrzej Nowacki
|
||||||
|
Jörg Bornemann
|
||||||
|
Jonathan Liu
|
||||||
|
Juei-ray Tseng
|
||||||
|
Juhapekka Piiroinen
|
||||||
|
Kaffeine
|
||||||
|
Kai Köhne
|
||||||
|
Kevin Krammer
|
||||||
|
Karsten Heimrich
|
||||||
|
Knut Petter Svendsen
|
||||||
|
Konstantin Ritt
|
||||||
|
Konstantin Tokarev
|
||||||
|
Leandro Melo
|
||||||
|
Leena Miettinen
|
||||||
|
Lukas Geyer
|
||||||
|
Lukas Holecek
|
||||||
|
Marc Mutz
|
||||||
|
Marco Bubke
|
||||||
|
Marius Storm-Olsen
|
||||||
|
Martin Aumüller
|
||||||
|
Mathias Hasselmann
|
||||||
|
Mehdi Fekari
|
||||||
|
Montel Laurent
|
||||||
|
Morten Johan Sorvig
|
||||||
|
Nicolas Arnaud-Cormos
|
||||||
|
Nikolai Kosjar
|
||||||
|
Orgad Shaneh
|
||||||
|
Oswald Buddenhagen
|
||||||
|
Oto Magaldadze
|
||||||
|
Peter Kümmel
|
||||||
|
Pierre Rossi
|
||||||
|
Przemyslaw Gorszkowski
|
||||||
|
raidsan
|
||||||
|
Robert Löhning
|
||||||
|
Ryan May
|
||||||
|
Sergey Belyashov
|
||||||
|
Sergey Shambir
|
||||||
|
Sergio Ahumada
|
||||||
|
Simjees Abraham
|
||||||
|
Stephen Kelly
|
||||||
|
Takumi Asaki
|
||||||
|
Theo J.A. de Vries
|
||||||
|
Thiago Macieira
|
||||||
|
Thomas Hartmann
|
||||||
|
Thorbjørn Lindeijer
|
||||||
|
Tim Jenssen
|
||||||
|
Tobias Hunger
|
||||||
|
Tobias Nätterlund
|
||||||
|
Tommi Asp
|
||||||
|
Tyler Mandry
|
||||||
|
Vladislav Navrocky
|
||||||
|
Yuchen Deng
|
@@ -19,9 +19,12 @@ OTHER_FILES += dist/copyright_template.txt \
|
|||||||
qtcreator.qbp \
|
qtcreator.qbp \
|
||||||
qbs/pluginspec/pluginspec.qbs
|
qbs/pluginspec/pluginspec.qbs
|
||||||
|
|
||||||
|
contains(QT_ARCH, i386): ARCHITECTURE = x86
|
||||||
|
else: ARCHITECTURE = $$QT_ARCH
|
||||||
|
|
||||||
macx: PLATFORM = "mac"
|
macx: PLATFORM = "mac"
|
||||||
else:win32: PLATFORM = "windows"
|
else:win32: PLATFORM = "windows"
|
||||||
else:linux-*: PLATFORM = "linux-$${QT_ARCH}"
|
else:linux-*: PLATFORM = "linux-$${ARCHITECTURE}"
|
||||||
else: PLATFORM = "unknown"
|
else: PLATFORM = "unknown"
|
||||||
|
|
||||||
PATTERN = $${PLATFORM}$(INSTALL_EDITION)-$${QTCREATOR_VERSION}$(INSTALL_POSTFIX)
|
PATTERN = $${PLATFORM}$(INSTALL_EDITION)-$${QTCREATOR_VERSION}$(INSTALL_POSTFIX)
|
||||||
|
@@ -71,7 +71,7 @@ void AndroidRunControl::start()
|
|||||||
|
|
||||||
RunControl::StopResult AndroidRunControl::stop()
|
RunControl::StopResult AndroidRunControl::stop()
|
||||||
{
|
{
|
||||||
m_runner->stop();
|
m_runner->stop(true);
|
||||||
return StoppedSynchronously;
|
return StoppedSynchronously;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -68,7 +68,7 @@ AndroidRunner::AndroidRunner(QObject *parent, AndroidRunConfiguration *runConfig
|
|||||||
|
|
||||||
AndroidRunner::~AndroidRunner()
|
AndroidRunner::~AndroidRunner()
|
||||||
{
|
{
|
||||||
stop();
|
stop(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidRunner::checkPID()
|
void AndroidRunner::checkPID()
|
||||||
@@ -248,7 +248,7 @@ void AndroidRunner::startLogcat()
|
|||||||
emit remoteProcessStarted(5039);
|
emit remoteProcessStarted(5039);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidRunner::stop()
|
void AndroidRunner::stop(bool async)
|
||||||
{
|
{
|
||||||
QMutexLocker locker(&m_mutex);
|
QMutexLocker locker(&m_mutex);
|
||||||
m_adbLogcatProcess.kill();
|
m_adbLogcatProcess.kill();
|
||||||
@@ -256,6 +256,14 @@ void AndroidRunner::stop()
|
|||||||
m_checkPIDTimer.stop();
|
m_checkPIDTimer.stop();
|
||||||
if (m_processPID == -1)
|
if (m_processPID == -1)
|
||||||
return; // don't emit another signal
|
return; // don't emit another signal
|
||||||
|
if (async)
|
||||||
|
QtConcurrent::run(this, &AndroidRunner::asyncStop);
|
||||||
|
else
|
||||||
|
asyncStop();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AndroidRunner::asyncStop()
|
||||||
|
{
|
||||||
killPID();
|
killPID();
|
||||||
emit remoteProcessFinished(tr("\n\n'%1' killed.").arg(m_packageName));
|
emit remoteProcessFinished(tr("\n\n'%1' killed.").arg(m_packageName));
|
||||||
}
|
}
|
||||||
|
@@ -55,7 +55,8 @@ public:
|
|||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void start();
|
void start();
|
||||||
void stop();
|
void stop(bool async);
|
||||||
|
void asyncStop();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void remoteProcessStarted(int gdbServerPort = -1, int qmlPort = -1);
|
void remoteProcessStarted(int gdbServerPort = -1, int qmlPort = -1);
|
||||||
|
@@ -218,7 +218,7 @@ public:
|
|||||||
bool open(QString *errorString, const QString &fileName, quint64 offset = 0) {
|
bool open(QString *errorString, const QString &fileName, quint64 offset = 0) {
|
||||||
QFile file(fileName);
|
QFile file(fileName);
|
||||||
quint64 size = static_cast<quint64>(file.size());
|
quint64 size = static_cast<quint64>(file.size());
|
||||||
if (size == 0) {
|
if (size == 0 && !fileName.isEmpty()) {
|
||||||
QString msg = tr("The Binary Editor cannot open empty files.");
|
QString msg = tr("The Binary Editor cannot open empty files.");
|
||||||
if (errorString)
|
if (errorString)
|
||||||
*errorString = msg;
|
*errorString = msg;
|
||||||
|
@@ -32,7 +32,11 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPlainTextEdit" name="txtComment"/>
|
<widget class="QPlainTextEdit" name="txtComment">
|
||||||
|
<property name="tabChangesFocus">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="chkReserved">
|
<widget class="QCheckBox" name="chkReserved">
|
||||||
|
@@ -343,7 +343,7 @@ void CppAssistProposalItem::applyContextualContent(TextEditor::BaseTextEditor *e
|
|||||||
if (!inEditor.isEmpty()) {
|
if (!inEditor.isEmpty()) {
|
||||||
preserveLength = toInsert.length() - (editor->position() - basePosition);
|
preserveLength = toInsert.length() - (editor->position() - basePosition);
|
||||||
const int inEditorLength = inEditor.length();
|
const int inEditorLength = inEditor.length();
|
||||||
while (preserveLength) {
|
while (preserveLength > 0) {
|
||||||
if (inEditor.startsWith(toInsert.right(preserveLength))
|
if (inEditor.startsWith(toInsert.right(preserveLength))
|
||||||
&& (inEditorLength == preserveLength
|
&& (inEditorLength == preserveLength
|
||||||
|| (!inEditor.at(preserveLength).isLetterOrNumber()
|
|| (!inEditor.at(preserveLength).isLetterOrNumber()
|
||||||
|
@@ -24,9 +24,9 @@ Alternatively, this plugin may be used under the terms of the GNU Lesser General
|
|||||||
<argumentList>
|
<argumentList>
|
||||||
<argument name=\"-debug\" parameter=\"pid\">Attach to local process</argument>
|
<argument name=\"-debug\" parameter=\"pid\">Attach to local process</argument>
|
||||||
<argument name=\"-debug\" parameter=\"executable\">Start and debug executable</argument>
|
<argument name=\"-debug\" parameter=\"executable\">Start and debug executable</argument>
|
||||||
<argument name=\"-debug [executable,]core=<corefile>[,sysroot=<sysroot>]\">
|
<argument name=\"-debug [executable,]core=<corefile>[,kit=<kit>]\">
|
||||||
Attach to core file</argument>
|
Attach to core file</argument>
|
||||||
<argument name=\"-debug <executable>,server=<server:port>[,sysroot=<sysroot>][,arch=<arch>]\">
|
<argument name=\"-debug <executable>,server=<server:port>[,kit=<kit>]\">
|
||||||
Attach to remote debug server</argument>
|
Attach to remote debug server</argument>
|
||||||
<argument name=\"-wincrashevent\"
|
<argument name=\"-wincrashevent\"
|
||||||
parameter=\"eventhandle:pid\">
|
parameter=\"eventhandle:pid\">
|
||||||
|
@@ -1276,6 +1276,9 @@ static void showQtDumperLibraryWarning(const QString &details)
|
|||||||
"expand the Details section and click Build All."));
|
"expand the Details section and click Build All."));
|
||||||
if (!details.isEmpty())
|
if (!details.isEmpty())
|
||||||
dialog.setDetailedText(details);
|
dialog.setDetailedText(details);
|
||||||
|
#if defined(Q_OS_MAC) && QT_VERSION >= 0x050000
|
||||||
|
dialog.setWindowModality(Qt::WindowModal);
|
||||||
|
#endif
|
||||||
dialog.exec();
|
dialog.exec();
|
||||||
if (dialog.clickedButton() == qtPref) {
|
if (dialog.clickedButton() == qtPref) {
|
||||||
Core::ICore::showOptionsDialog(
|
Core::ICore::showOptionsDialog(
|
||||||
|
@@ -153,7 +153,7 @@ QString AbstractMsvcToolChain::makeCommand(const Utils::Environment &environment
|
|||||||
|
|
||||||
Utils::FileName AbstractMsvcToolChain::compilerCommand() const
|
Utils::FileName AbstractMsvcToolChain::compilerCommand() const
|
||||||
{
|
{
|
||||||
Utils::Environment env;
|
Utils::Environment env = Utils::Environment::systemEnvironment();
|
||||||
addToEnvironment(env);
|
addToEnvironment(env);
|
||||||
return Utils::FileName::fromString(env.searchInPath(QLatin1String("cl.exe")));
|
return Utils::FileName::fromString(env.searchInPath(QLatin1String("cl.exe")));
|
||||||
}
|
}
|
||||||
|
@@ -135,6 +135,8 @@ void DeviceManager::copy(const DeviceManager *source, DeviceManager *target, boo
|
|||||||
|
|
||||||
void DeviceManager::save()
|
void DeviceManager::save()
|
||||||
{
|
{
|
||||||
|
if (d->clonedInstance == this)
|
||||||
|
return;
|
||||||
QVariantMap data;
|
QVariantMap data;
|
||||||
data.insert(QLatin1String(DeviceManagerKey), toMap());
|
data.insert(QLatin1String(DeviceManagerKey), toMap());
|
||||||
d->writer->save(data, Core::ICore::mainWindow());
|
d->writer->save(data, Core::ICore::mainWindow());
|
||||||
@@ -341,7 +343,8 @@ DeviceManager::DeviceManager(bool isInstance) : d(new DeviceManagerPrivate)
|
|||||||
|
|
||||||
DeviceManager::~DeviceManager()
|
DeviceManager::~DeviceManager()
|
||||||
{
|
{
|
||||||
delete d->writer;
|
if (d->clonedInstance != this)
|
||||||
|
delete d->writer;
|
||||||
delete d;
|
delete d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -89,8 +89,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
KitManagerPrivate::KitManagerPrivate()
|
KitManagerPrivate::KitManagerPrivate()
|
||||||
: m_defaultKit(0), m_initialized(false),
|
: m_defaultKit(0), m_initialized(false), m_writer(0)
|
||||||
m_writer(0)
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
KitManagerPrivate::~KitManagerPrivate()
|
KitManagerPrivate::~KitManagerPrivate()
|
||||||
@@ -131,7 +130,15 @@ KitManager::KitManager(QObject *parent) :
|
|||||||
|
|
||||||
void KitManager::restoreKits()
|
void KitManager::restoreKits()
|
||||||
{
|
{
|
||||||
QTC_ASSERT(!d->m_writer, return);
|
QTC_ASSERT(!d->m_initialized, return);
|
||||||
|
static bool initializing = false;
|
||||||
|
|
||||||
|
if (initializing) // kits will call kits() to check their display names, which will trigger another
|
||||||
|
// call to restoreKits, which ...
|
||||||
|
return;
|
||||||
|
|
||||||
|
initializing = true;
|
||||||
|
|
||||||
QList<Kit *> kitsToRegister;
|
QList<Kit *> kitsToRegister;
|
||||||
QList<Kit *> kitsToValidate;
|
QList<Kit *> kitsToValidate;
|
||||||
QList<Kit *> kitsToCheck;
|
QList<Kit *> kitsToCheck;
|
||||||
@@ -203,6 +210,7 @@ void KitManager::restoreKits()
|
|||||||
setDefaultKit(k);
|
setDefaultKit(k);
|
||||||
|
|
||||||
d->m_writer = new Utils::PersistentSettingsWriter(settingsFileName(), QLatin1String("QtCreatorProfiles"));
|
d->m_writer = new Utils::PersistentSettingsWriter(settingsFileName(), QLatin1String("QtCreatorProfiles"));
|
||||||
|
d->m_initialized = true;
|
||||||
emit kitsChanged();
|
emit kitsChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,10 +328,8 @@ KitManager::KitList KitManager::restoreKits(const Utils::FileName &fileName)
|
|||||||
|
|
||||||
QList<Kit *> KitManager::kits(const KitMatcher *m) const
|
QList<Kit *> KitManager::kits(const KitMatcher *m) const
|
||||||
{
|
{
|
||||||
if (!d->m_initialized) {
|
if (!d->m_initialized)
|
||||||
d->m_initialized = true;
|
|
||||||
const_cast<KitManager *>(this)->restoreKits();
|
const_cast<KitManager *>(this)->restoreKits();
|
||||||
}
|
|
||||||
|
|
||||||
QList<Kit *> result;
|
QList<Kit *> result;
|
||||||
foreach (Kit *k, d->m_kitList) {
|
foreach (Kit *k, d->m_kitList) {
|
||||||
@@ -351,12 +357,10 @@ Kit *KitManager::find(const KitMatcher *m) const
|
|||||||
return matched.isEmpty() ? 0 : matched.first();
|
return matched.isEmpty() ? 0 : matched.first();
|
||||||
}
|
}
|
||||||
|
|
||||||
Kit *KitManager::defaultKit()
|
Kit *KitManager::defaultKit() const
|
||||||
{
|
{
|
||||||
if (!d->m_initialized) {
|
if (!d->m_initialized)
|
||||||
d->m_initialized = true;
|
const_cast<KitManager *>(this)->restoreKits();
|
||||||
restoreKits();
|
|
||||||
}
|
|
||||||
return d->m_defaultKit;
|
return d->m_defaultKit;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -378,7 +382,7 @@ void KitManager::notifyAboutUpdate(ProjectExplorer::Kit *k)
|
|||||||
{
|
{
|
||||||
if (!k)
|
if (!k)
|
||||||
return;
|
return;
|
||||||
if (kits().contains(k))
|
if (kits().contains(k) && d->m_initialized)
|
||||||
emit kitUpdated(k);
|
emit kitUpdated(k);
|
||||||
else
|
else
|
||||||
emit unmanagedKitUpdated(k);
|
emit unmanagedKitUpdated(k);
|
||||||
@@ -395,7 +399,8 @@ bool KitManager::registerKit(ProjectExplorer::Kit *k)
|
|||||||
|
|
||||||
// make sure we have all the information in our kits:
|
// make sure we have all the information in our kits:
|
||||||
addKit(k);
|
addKit(k);
|
||||||
emit kitAdded(k);
|
if (d->m_initialized)
|
||||||
|
emit kitAdded(k);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -415,7 +420,8 @@ void KitManager::deregisterKit(Kit *k)
|
|||||||
}
|
}
|
||||||
setDefaultKit(newDefault);
|
setDefaultKit(newDefault);
|
||||||
}
|
}
|
||||||
emit kitRemoved(k);
|
if (d->m_initialized)
|
||||||
|
emit kitRemoved(k);
|
||||||
delete k;
|
delete k;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -426,7 +432,8 @@ void KitManager::setDefaultKit(Kit *k)
|
|||||||
if (k && !kits().contains(k))
|
if (k && !kits().contains(k))
|
||||||
return;
|
return;
|
||||||
d->m_defaultKit = k;
|
d->m_defaultKit = k;
|
||||||
emit defaultkitChanged();
|
if (d->m_initialized)
|
||||||
|
emit defaultkitChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void KitManager::validateKits()
|
void KitManager::validateKits()
|
||||||
@@ -440,12 +447,14 @@ void KitManager::addKit(Kit *k)
|
|||||||
if (!k)
|
if (!k)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
KitGuard g(k);
|
{
|
||||||
foreach (KitInformation *ki, d->m_informationList) {
|
KitGuard g(k);
|
||||||
if (!k->hasValue(ki->dataId()))
|
foreach (KitInformation *ki, d->m_informationList) {
|
||||||
k->setValue(ki->dataId(), ki->defaultValue(k));
|
if (!k->hasValue(ki->dataId()))
|
||||||
else
|
k->setValue(ki->dataId(), ki->defaultValue(k));
|
||||||
ki->fix(k);
|
else
|
||||||
|
ki->fix(k);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
d->m_kitList.append(k);
|
d->m_kitList.append(k);
|
||||||
|
@@ -112,7 +112,7 @@ public:
|
|||||||
QList<Kit *> kits(const KitMatcher *m = 0) const;
|
QList<Kit *> kits(const KitMatcher *m = 0) const;
|
||||||
Kit *find(const Core::Id &id) const;
|
Kit *find(const Core::Id &id) const;
|
||||||
Kit *find(const KitMatcher *m) const;
|
Kit *find(const KitMatcher *m) const;
|
||||||
Kit *defaultKit();
|
Kit *defaultKit() const;
|
||||||
|
|
||||||
QList<KitInformation *> kitInformation() const;
|
QList<KitInformation *> kitInformation() const;
|
||||||
|
|
||||||
|
@@ -439,6 +439,19 @@ QString MsvcToolChainFactory::id() const
|
|||||||
return QLatin1String(Constants::MSVC_TOOLCHAIN_ID);
|
return QLatin1String(Constants::MSVC_TOOLCHAIN_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MsvcToolChainFactory::checkForVisualStudioInstallation(const QString &vsName)
|
||||||
|
{
|
||||||
|
const QSettings vsRegistry(
|
||||||
|
#ifdef Q_OS_WIN64
|
||||||
|
QLatin1String("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\SxS\\VS7"),
|
||||||
|
#else
|
||||||
|
QLatin1String("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VS7"),
|
||||||
|
#endif
|
||||||
|
QSettings::NativeFormat);
|
||||||
|
|
||||||
|
return vsRegistry.contains(vsName);
|
||||||
|
}
|
||||||
|
|
||||||
QList<ToolChain *> MsvcToolChainFactory::autoDetect()
|
QList<ToolChain *> MsvcToolChainFactory::autoDetect()
|
||||||
{
|
{
|
||||||
QList<ToolChain *> results;
|
QList<ToolChain *> results;
|
||||||
@@ -500,6 +513,8 @@ QList<ToolChain *> MsvcToolChainFactory::autoDetect()
|
|||||||
const int dotPos = vsName.indexOf(QLatin1Char('.'));
|
const int dotPos = vsName.indexOf(QLatin1Char('.'));
|
||||||
if (dotPos == -1)
|
if (dotPos == -1)
|
||||||
continue;
|
continue;
|
||||||
|
if (!checkForVisualStudioInstallation(vsName))
|
||||||
|
continue;
|
||||||
|
|
||||||
const QString path = vsRegistry.value(vsName).toString();
|
const QString path = vsRegistry.value(vsName).toString();
|
||||||
const int version = vsName.left(dotPos).toInt();
|
const int version = vsName.left(dotPos).toInt();
|
||||||
|
@@ -106,6 +106,8 @@ public:
|
|||||||
{ return MsvcToolChain::readFromMap(data); }
|
{ return MsvcToolChain::readFromMap(data); }
|
||||||
|
|
||||||
ToolChainConfigWidget *configurationWidget(ToolChain *);
|
ToolChainConfigWidget *configurationWidget(ToolChain *);
|
||||||
|
private:
|
||||||
|
static bool checkForVisualStudioInstallation(const QString &vsName);
|
||||||
};
|
};
|
||||||
|
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
@@ -573,6 +573,8 @@ bool ToolChainOptionsPage::matches(const QString &s) const
|
|||||||
|
|
||||||
void ToolChainOptionsPage::toolChainSelectionChanged()
|
void ToolChainOptionsPage::toolChainSelectionChanged()
|
||||||
{
|
{
|
||||||
|
if (!m_container)
|
||||||
|
return;
|
||||||
QModelIndex current = currentIndex();
|
QModelIndex current = currentIndex();
|
||||||
(void)m_container->takeWidget(); // Prevent deletion.
|
(void)m_container->takeWidget(); // Prevent deletion.
|
||||||
QWidget *currentTcWidget = current.isValid() ? m_model->widget(current) : 0;
|
QWidget *currentTcWidget = current.isValid() ? m_model->widget(current) : 0;
|
||||||
|
@@ -33,6 +33,7 @@
|
|||||||
#include "qmakekitconfigwidget.h"
|
#include "qmakekitconfigwidget.h"
|
||||||
|
|
||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
|
#include <projectexplorer/toolchainmanager.h>
|
||||||
|
|
||||||
#include <qtsupport/baseqtversion.h>
|
#include <qtsupport/baseqtversion.h>
|
||||||
#include <qtsupport/qtkitinformation.h>
|
#include <qtsupport/qtkitinformation.h>
|
||||||
@@ -83,6 +84,30 @@ QList<ProjectExplorer::Task> QmakeKitInformation::validate(const ProjectExplorer
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QmakeKitInformation::fix(ProjectExplorer::Kit *k)
|
||||||
|
{
|
||||||
|
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k);
|
||||||
|
if (!version)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Utils::FileName spec = QmakeKitInformation::mkspec(k);
|
||||||
|
if (spec.isEmpty())
|
||||||
|
spec = version->mkspec();
|
||||||
|
|
||||||
|
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(k);
|
||||||
|
|
||||||
|
if (!tc || !tc->suggestedMkspecList().contains(spec)) {
|
||||||
|
QList<ProjectExplorer::ToolChain *> tcList = ProjectExplorer::ToolChainManager::instance()->toolChains();
|
||||||
|
foreach (ProjectExplorer::ToolChain *current, tcList) {
|
||||||
|
if (version->qtAbis().contains(current->targetAbi())
|
||||||
|
&& current->suggestedMkspecList().contains(spec)) {
|
||||||
|
ProjectExplorer::ToolChainKitInformation::setToolChain(k, current);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ProjectExplorer::KitConfigWidget *
|
ProjectExplorer::KitConfigWidget *
|
||||||
QmakeKitInformation::createConfigWidget(ProjectExplorer::Kit *k) const
|
QmakeKitInformation::createConfigWidget(ProjectExplorer::Kit *k) const
|
||||||
{
|
{
|
||||||
|
@@ -50,6 +50,7 @@ public:
|
|||||||
QVariant defaultValue(ProjectExplorer::Kit *k) const;
|
QVariant defaultValue(ProjectExplorer::Kit *k) const;
|
||||||
|
|
||||||
QList<ProjectExplorer::Task> validate(const ProjectExplorer::Kit *k) const;
|
QList<ProjectExplorer::Task> validate(const ProjectExplorer::Kit *k) const;
|
||||||
|
void fix(ProjectExplorer::Kit *k);
|
||||||
|
|
||||||
ProjectExplorer::KitConfigWidget *createConfigWidget(ProjectExplorer::Kit *k) const;
|
ProjectExplorer::KitConfigWidget *createConfigWidget(ProjectExplorer::Kit *k) const;
|
||||||
|
|
||||||
|
@@ -2023,6 +2023,7 @@ QStringList Qt4ProFileNode::includePaths(QtSupport::ProFileReader *reader) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
paths.append(reader->absolutePathValues(QLatin1String("INCLUDEPATH"), m_projectDir));
|
paths.append(reader->absolutePathValues(QLatin1String("INCLUDEPATH"), m_projectDir));
|
||||||
|
paths.append(reader->absolutePathValues(QLatin1String("QMAKE_INCDIR"), m_projectDir));
|
||||||
// paths already contains moc dir and ui dir, due to corrrectly parsing uic.prf and moc.prf
|
// paths already contains moc dir and ui dir, due to corrrectly parsing uic.prf and moc.prf
|
||||||
// except if those directories don't exist at the time of parsing
|
// except if those directories don't exist at the time of parsing
|
||||||
// thus we add those directories manually (without checking for existence)
|
// thus we add those directories manually (without checking for existence)
|
||||||
|
@@ -285,22 +285,27 @@ bool BasicProposalItemListModel::keepPerfectMatch(AssistReason reason) const
|
|||||||
|
|
||||||
QString BasicProposalItemListModel::proposalPrefix() const
|
QString BasicProposalItemListModel::proposalPrefix() const
|
||||||
{
|
{
|
||||||
if (m_currentItems.size() >= kMaxPrefixFilter)
|
if (m_currentItems.size() >= kMaxPrefixFilter || m_currentItems.isEmpty())
|
||||||
return QString();
|
return QString();
|
||||||
|
|
||||||
// Compute common prefix
|
// Compute common prefix
|
||||||
QString firstKey = m_currentItems.first()->text();
|
QString commonPrefix = m_currentItems.first()->text();
|
||||||
QString lastKey = m_currentItems.last()->text();
|
for (int i = 1, ei = m_currentItems.size(); i < ei; ++i) {
|
||||||
const int length = qMin(firstKey.length(), lastKey.length());
|
QString nextItem = m_currentItems.at(i)->text();
|
||||||
firstKey.truncate(length);
|
const int length = qMin(commonPrefix.length(), nextItem.length());
|
||||||
lastKey.truncate(length);
|
commonPrefix.truncate(length);
|
||||||
|
nextItem.truncate(length);
|
||||||
|
|
||||||
while (firstKey != lastKey) {
|
while (commonPrefix != nextItem) {
|
||||||
firstKey.chop(1);
|
commonPrefix.chop(1);
|
||||||
lastKey.chop(1);
|
nextItem.chop(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (commonPrefix.isEmpty()) // there is no common prefix, so return.
|
||||||
|
return commonPrefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
return firstKey;
|
return commonPrefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
IAssistProposalItem *BasicProposalItemListModel::proposalItem(int index) const
|
IAssistProposalItem *BasicProposalItemListModel::proposalItem(int index) const
|
||||||
|
@@ -40,6 +40,7 @@ def main():
|
|||||||
installLazySignalHandler(":QWebPage","loadFinished(bool)", "webPageContentLoaded")
|
installLazySignalHandler(":QWebPage","loadFinished(bool)", "webPageContentLoaded")
|
||||||
installLazySignalHandler(":*Qt Creator_Help::Internal::HelpViewer", "loadFinished(bool)",
|
installLazySignalHandler(":*Qt Creator_Help::Internal::HelpViewer", "loadFinished(bool)",
|
||||||
"webPageContentLoaded")
|
"webPageContentLoaded")
|
||||||
|
addHelpDocumentationFromSDK()
|
||||||
setAlwaysStartFullHelp()
|
setAlwaysStartFullHelp()
|
||||||
if not test.verify(checkIfObjectExists(getQmlItem("Text", ":Qt Creator_QDeclarativeView", False,
|
if not test.verify(checkIfObjectExists(getQmlItem("Text", ":Qt Creator_QDeclarativeView", False,
|
||||||
"text='Getting Started'")),
|
"text='Getting Started'")),
|
||||||
|
@@ -82,10 +82,12 @@ def testSaveChangesAndMakeWritable(modifiedFiles, readOnlyFiles):
|
|||||||
clickButton(waitForObject("{text='Make Writable' type='QPushButton' unnamed='1' "
|
clickButton(waitForObject("{text='Make Writable' type='QPushButton' unnamed='1' "
|
||||||
"visible='1' window=%s}" % readOnlyMBoxStr))
|
"visible='1' window=%s}" % readOnlyMBoxStr))
|
||||||
try:
|
try:
|
||||||
waitForObject(cannotResetStr, 3000)
|
# avoid an AUT crash that happens frequently on the testing machines
|
||||||
# should not be possible
|
if currentApplicationContext().isRunning:
|
||||||
test.fail("Could not reset file '%s' to writable state." % currentFile)
|
waitForObject(cannotResetStr, 3000)
|
||||||
clickButton("{text='OK' type='QPushButton' window=%s}" % cannotResetStr)
|
# should not be possible
|
||||||
|
test.fail("Could not reset file '%s' to writable state." % currentFile)
|
||||||
|
clickButton("{text='OK' type='QPushButton' window=%s}" % cannotResetStr)
|
||||||
except:
|
except:
|
||||||
if isWritable(currentFile):
|
if isWritable(currentFile):
|
||||||
test.passes("File '%s' resetted to writable state and saved." % currentFile)
|
test.passes("File '%s' resetted to writable state and saved." % currentFile)
|
||||||
|
Reference in New Issue
Block a user