From 3b1154b02e63ffc508729edd7ad0faeb3c752365 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 19 Dec 2012 11:02:21 +0100 Subject: [PATCH 01/20] Add changes file for 2.6.1 Change-Id: I0ea5f140fa6f973813d55bed0009dfb800466c40 Reviewed-by: Leena Miettinen --- dist/changes-2.6.1 | 166 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 dist/changes-2.6.1 diff --git a/dist/changes-2.6.1 b/dist/changes-2.6.1 new file mode 100644 index 00000000000..3e148d3eccd --- /dev/null +++ b/dist/changes-2.6.1 @@ -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 From 13e88eeb1aa2741e424a36afb331cafaf93c5cf6 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 19 Dec 2012 16:14:23 +0100 Subject: [PATCH 02/20] Version bump. Change-Id: I01a2e4c61e9bfcd4cb460a7c84949b848d67bac2 Reviewed-by: Eike Ziller --- qtcreator.pri | 2 +- qtcreator.qbs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/qtcreator.pri b/qtcreator.pri index ed620d1ced0..784fca03f8b 100644 --- a/qtcreator.pri +++ b/qtcreator.pri @@ -1,7 +1,7 @@ !isEmpty(QTCREATOR_PRI_INCLUDED):error("qtcreator.pri already included") QTCREATOR_PRI_INCLUDED = 1 -QTCREATOR_VERSION = 2.6.1 +QTCREATOR_VERSION = 2.6.2 isEqual(QT_MAJOR_VERSION, 5) { diff --git a/qtcreator.qbs b/qtcreator.qbs index 0157e201a66..0b4b579df7e 100644 --- a/qtcreator.qbs +++ b/qtcreator.qbs @@ -4,7 +4,7 @@ import qbs.fileinfo 1.0 as FileInfo Project { property string ide_version_major: '2' property string ide_version_minor: '6' - property string ide_version_release: '1' + property string ide_version_release: '2' property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.' + ide_version_release property var additionalCppDefines: [ 'IDE_LIBRARY_BASENAME="lib"', From 75efa76ed062cf68187c19e221677ed4eb205bdc Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 18 Dec 2012 12:50:53 +0100 Subject: [PATCH 03/20] Packaging: Use x86 instead of i386 for file names. Change-Id: I56cb84c45e2c9e9410f59a8c8602286242731a19 Reviewed-by: Kai Koehne --- qtcreator.pro | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/qtcreator.pro b/qtcreator.pro index 82c8a75a7b5..a35f884d101 100644 --- a/qtcreator.pro +++ b/qtcreator.pro @@ -19,9 +19,12 @@ OTHER_FILES += dist/copyright_template.txt \ qtcreator.qbp \ qbs/pluginspec/pluginspec.qbs +contains(QT_ARCH, i386): ARCHITECTURE = x86 +else: ARCHITECTURE = $$QT_ARCH + macx: PLATFORM = "mac" else:win32: PLATFORM = "windows" -else:linux-*: PLATFORM = "linux-$${QT_ARCH}" +else:linux-*: PLATFORM = "linux-$${ARCHITECTURE}" else: PLATFORM = "unknown" PATTERN = $${PLATFORM}$(INSTALL_EDITION)-$${QTCREATOR_VERSION}$(INSTALL_POSTFIX) From c708944af9a572d94c937cda301cfc879d29c7ae Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 19 Dec 2012 11:35:36 +0100 Subject: [PATCH 04/20] Kit: Only emit signals from KitManager after all kits are restored Change-Id: Iab5a951a3cec37328b5bcd9d8c3f9c1a31c3d85b Reviewed-by: Eike Ziller --- src/plugins/projectexplorer/kitmanager.cpp | 37 +++++++++++++--------- src/plugins/projectexplorer/kitmanager.h | 2 +- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index 7d4a08dad30..e8486709bbb 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -89,8 +89,7 @@ public: }; KitManagerPrivate::KitManagerPrivate() - : m_defaultKit(0), m_initialized(false), - m_writer(0) + : m_defaultKit(0), m_initialized(false), m_writer(0) { } KitManagerPrivate::~KitManagerPrivate() @@ -131,7 +130,15 @@ KitManager::KitManager(QObject *parent) : 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 kitsToRegister; QList kitsToValidate; QList kitsToCheck; @@ -203,6 +210,7 @@ void KitManager::restoreKits() setDefaultKit(k); d->m_writer = new Utils::PersistentSettingsWriter(settingsFileName(), QLatin1String("QtCreatorProfiles")); + d->m_initialized = true; } KitManager::~KitManager() @@ -319,10 +327,8 @@ KitManager::KitList KitManager::restoreKits(const Utils::FileName &fileName) QList KitManager::kits(const KitMatcher *m) const { - if (!d->m_initialized) { - d->m_initialized = true; + if (!d->m_initialized) const_cast(this)->restoreKits(); - } QList result; foreach (Kit *k, d->m_kitList) { @@ -350,12 +356,10 @@ Kit *KitManager::find(const KitMatcher *m) const return matched.isEmpty() ? 0 : matched.first(); } -Kit *KitManager::defaultKit() +Kit *KitManager::defaultKit() const { - if (!d->m_initialized) { - d->m_initialized = true; - restoreKits(); - } + if (!d->m_initialized) + const_cast(this)->restoreKits(); return d->m_defaultKit; } @@ -377,7 +381,7 @@ void KitManager::notifyAboutUpdate(ProjectExplorer::Kit *k) { if (!k) return; - if (kits().contains(k)) + if (kits().contains(k) && d->m_initialized) emit kitUpdated(k); else emit unmanagedKitUpdated(k); @@ -394,7 +398,8 @@ bool KitManager::registerKit(ProjectExplorer::Kit *k) // make sure we have all the information in our kits: addKit(k); - emit kitAdded(k); + if (d->m_initialized) + emit kitAdded(k); return true; } @@ -414,7 +419,8 @@ void KitManager::deregisterKit(Kit *k) } setDefaultKit(newDefault); } - emit kitRemoved(k); + if (d->m_initialized) + emit kitRemoved(k); delete k; } @@ -425,7 +431,8 @@ void KitManager::setDefaultKit(Kit *k) if (k && !kits().contains(k)) return; d->m_defaultKit = k; - emit defaultkitChanged(); + if (d->m_initialized) + emit defaultkitChanged(); } void KitManager::validateKits() diff --git a/src/plugins/projectexplorer/kitmanager.h b/src/plugins/projectexplorer/kitmanager.h index 88bbcbd6a57..fb52aefb17e 100644 --- a/src/plugins/projectexplorer/kitmanager.h +++ b/src/plugins/projectexplorer/kitmanager.h @@ -110,7 +110,7 @@ public: QList kits(const KitMatcher *m = 0) const; Kit *find(const Core::Id &id) const; Kit *find(const KitMatcher *m) const; - Kit *defaultKit(); + Kit *defaultKit() const; QList kitInformation() const; From 1bff9f82db34a096415ee212d0f8e977977d1536 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Wed, 19 Dec 2012 16:02:47 +0100 Subject: [PATCH 05/20] Devicemanager: Do not ruin device settings when closing optionspage Change-Id: I3684422f9d41eba3bda8532c58242eca7edef67b Reviewed-by: Orgad Shaneh Reviewed-by: Eike Ziller --- src/plugins/projectexplorer/devicesupport/devicemanager.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp index bd4c4cf6bc5..fe2b638eeaf 100644 --- a/src/plugins/projectexplorer/devicesupport/devicemanager.cpp +++ b/src/plugins/projectexplorer/devicesupport/devicemanager.cpp @@ -135,6 +135,8 @@ void DeviceManager::copy(const DeviceManager *source, DeviceManager *target, boo void DeviceManager::save() { + if (d->clonedInstance == this) + return; QVariantMap data; data.insert(QLatin1String(DeviceManagerKey), toMap()); d->writer->save(data, Core::ICore::mainWindow()); @@ -342,7 +344,8 @@ DeviceManager::DeviceManager(bool isInstance) : d(new DeviceManagerPrivate) DeviceManager::~DeviceManager() { - delete d->writer; + if (d->clonedInstance != this) + delete d->writer; delete d; } From 06de43a2f9999ef05d6349932e8e3e302a99ff53 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 17 Dec 2012 16:26:14 +0100 Subject: [PATCH 06/20] Kits: Mkspec will fix the ToolChain now if possible Change-Id: I142063e7c1158f013b4e5005fa4263df0f025124 Reviewed-by: Erik Verbruggen --- .../qt4projectmanager/qmakekitinformation.cpp | 25 +++++++++++++++++++ .../qt4projectmanager/qmakekitinformation.h | 1 + 2 files changed, 26 insertions(+) diff --git a/src/plugins/qt4projectmanager/qmakekitinformation.cpp b/src/plugins/qt4projectmanager/qmakekitinformation.cpp index f4c2f8e42b5..65dc5d1acc4 100644 --- a/src/plugins/qt4projectmanager/qmakekitinformation.cpp +++ b/src/plugins/qt4projectmanager/qmakekitinformation.cpp @@ -33,6 +33,7 @@ #include "qmakekitconfigwidget.h" #include +#include #include #include @@ -83,6 +84,30 @@ QList QmakeKitInformation::validate(const ProjectExplorer 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 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 * QmakeKitInformation::createConfigWidget(ProjectExplorer::Kit *k) const { diff --git a/src/plugins/qt4projectmanager/qmakekitinformation.h b/src/plugins/qt4projectmanager/qmakekitinformation.h index 59a43d4a2f2..e1c630f5884 100644 --- a/src/plugins/qt4projectmanager/qmakekitinformation.h +++ b/src/plugins/qt4projectmanager/qmakekitinformation.h @@ -50,6 +50,7 @@ public: QVariant defaultValue(ProjectExplorer::Kit *k) const; QList validate(const ProjectExplorer::Kit *k) const; + void fix(ProjectExplorer::Kit *k); ProjectExplorer::KitConfigWidget *createConfigWidget(ProjectExplorer::Kit *k) const; From bfd609185f86b3664eed3bbe51ab3b0b61b9944e Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Thu, 20 Dec 2012 22:50:45 +0200 Subject: [PATCH 07/20] BinEditor: Do not warn about empty file for memory editor Change-Id: I124bf33a2b4ea4f81e8a6af21c1ccda0e0901ad2 Reviewed-by: hjk --- src/plugins/bineditor/bineditorplugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/bineditor/bineditorplugin.cpp b/src/plugins/bineditor/bineditorplugin.cpp index 77b47bdeaac..5c7bdc5020a 100644 --- a/src/plugins/bineditor/bineditorplugin.cpp +++ b/src/plugins/bineditor/bineditorplugin.cpp @@ -222,7 +222,7 @@ public: bool open(QString *errorString, const QString &fileName, quint64 offset = 0) { QFile file(fileName); quint64 size = static_cast(file.size()); - if (size == 0) { + if (size == 0 && !fileName.isEmpty()) { QString msg = tr("The Binary Editor cannot open empty files."); if (errorString) *errorString = msg; From 9eff13479bce7312ade305c67f4e9f43dcb69f1d Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Mon, 24 Dec 2012 10:49:42 +0200 Subject: [PATCH 08/20] ClearCase: Make Tab change focus on Check Out dialog Change-Id: Id517ff1b33fcde6fd49565b182e907757ac122fd Reviewed-by: Tobias Hunger --- src/plugins/clearcase/checkoutdialog.ui | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/clearcase/checkoutdialog.ui b/src/plugins/clearcase/checkoutdialog.ui index 3af4fa0eeb3..ecbe69cff56 100644 --- a/src/plugins/clearcase/checkoutdialog.ui +++ b/src/plugins/clearcase/checkoutdialog.ui @@ -32,7 +32,11 @@ - + + + true + + From 0ba7f48d0729c3631a709ac1ea6b26b59a063eae Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 14 Dec 2012 10:13:05 +0100 Subject: [PATCH 09/20] Squish: Try to fix test for testing machines Change-Id: I3213594c9ad7b947c5863d22f87e62adf418d983 Reviewed-by: Robert Loehning --- tests/system/suite_editors/tst_modify_readonly/test.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/system/suite_editors/tst_modify_readonly/test.py b/tests/system/suite_editors/tst_modify_readonly/test.py index c5de75a8536..389ee0574a3 100644 --- a/tests/system/suite_editors/tst_modify_readonly/test.py +++ b/tests/system/suite_editors/tst_modify_readonly/test.py @@ -82,10 +82,12 @@ def testSaveChangesAndMakeWritable(modifiedFiles, readOnlyFiles): clickButton(waitForObject("{text='Make Writable' type='QPushButton' unnamed='1' " "visible='1' window=%s}" % readOnlyMBoxStr)) try: - waitForObject(cannotResetStr, 3000) - # should not be possible - test.fail("Could not reset file '%s' to writable state." % currentFile) - clickButton("{text='OK' type='QPushButton' window=%s}" % cannotResetStr) + # avoid an AUT crash that happens frequently on the testing machines + if currentApplicationContext().isRunning: + waitForObject(cannotResetStr, 3000) + # should not be possible + test.fail("Could not reset file '%s' to writable state." % currentFile) + clickButton("{text='OK' type='QPushButton' window=%s}" % cannotResetStr) except: if isWritable(currentFile): test.passes("File '%s' resetted to writable state and saved." % currentFile) From 17bf3e3d17fb56428692da505a978920c361861b Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 11 Jan 2013 12:47:10 +0100 Subject: [PATCH 10/20] Debugger: Fix visibility of Debugging Helper Dialog Task-number: QTCREATORBUG-8440 Done-with: David Schulz Change-Id: Iccd252cc743df37216884cbc0e5a51c96ac382b4 Reviewed-by: hjk --- src/plugins/debugger/gdb/classicgdbengine.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/debugger/gdb/classicgdbengine.cpp b/src/plugins/debugger/gdb/classicgdbengine.cpp index 669374e10b3..0184f06cbef 100644 --- a/src/plugins/debugger/gdb/classicgdbengine.cpp +++ b/src/plugins/debugger/gdb/classicgdbengine.cpp @@ -1278,6 +1278,9 @@ static void showQtDumperLibraryWarning(const QString &details) "expand the Details section and click Build All.")); if (!details.isEmpty()) dialog.setDetailedText(details); +#if defined(Q_OS_MAC) && QT_VERSION >= 0x050000 + dialog.setWindowModality(Qt::WindowModal); +#endif dialog.exec(); if (dialog.clickedButton() == qtPref) { Core::ICore::showOptionsDialog( From 1675beebf3310ee0b59999d8ba7a027e202fc346 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Fri, 11 Jan 2013 13:19:15 +0100 Subject: [PATCH 11/20] Squish: Fix WELP03 Change-Id: I811c394b95029addb84a727632cf2ab6901258a5 Reviewed-by: Christian Stenger --- tests/system/suite_WELP/tst_WELP03/test.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/system/suite_WELP/tst_WELP03/test.py b/tests/system/suite_WELP/tst_WELP03/test.py index 38e270cb9e2..7eea26b0912 100644 --- a/tests/system/suite_WELP/tst_WELP03/test.py +++ b/tests/system/suite_WELP/tst_WELP03/test.py @@ -40,6 +40,7 @@ def main(): installLazySignalHandler(":QWebPage","loadFinished(bool)", "webPageContentLoaded") installLazySignalHandler(":*Qt Creator_Help::Internal::HelpViewer", "loadFinished(bool)", "webPageContentLoaded") + addHelpDocumentationFromSDK() setAlwaysStartFullHelp() if not test.verify(checkIfObjectExists(getQmlItem("Text", ":Qt Creator_QDeclarativeView", False, "text='Getting Started'")), From 6ce9a80afa43b3a40b0244ebef3b41ba03cc76a0 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Thu, 10 Jan 2013 16:41:14 +0100 Subject: [PATCH 12/20] C++: fix invalid common prefix calculation. This was the indirect cause for "random" freezes when using code-completion. The direct cause was a while loop counting down to 0, but starting with a negative value. Both are fixed now. Task-number: QTCREATORBUG-8472 Task-number: QTCREATORBUG-8532 Change-Id: I782a46be3ac8282d7484d0bf0c6fd30be6b171c8 Reviewed-by: Christian Kandeler Reviewed-by: Kai Koehne --- src/plugins/cpptools/cppcompletionassist.cpp | 2 +- .../codeassist/basicproposalitemlistmodel.cpp | 25 +++++++++++-------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp index 8dd911aac85..f3a6a08f9e3 100644 --- a/src/plugins/cpptools/cppcompletionassist.cpp +++ b/src/plugins/cpptools/cppcompletionassist.cpp @@ -344,7 +344,7 @@ void CppAssistProposalItem::applyContextualContent(TextEditor::BaseTextEditor *e if (!inEditor.isEmpty()) { preserveLength = toInsert.length() - (editor->position() - basePosition); const int inEditorLength = inEditor.length(); - while (preserveLength) { + while (preserveLength > 0) { if (inEditor.startsWith(toInsert.right(preserveLength)) && (inEditorLength == preserveLength || (!inEditor.at(preserveLength).isLetterOrNumber() diff --git a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp index 9a488dfaa6f..84657911c79 100644 --- a/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp +++ b/src/plugins/texteditor/codeassist/basicproposalitemlistmodel.cpp @@ -271,22 +271,27 @@ bool BasicProposalItemListModel::keepPerfectMatch(AssistReason reason) const QString BasicProposalItemListModel::proposalPrefix() const { - if (m_currentItems.size() >= kMaxPrefixFilter) + if (m_currentItems.size() >= kMaxPrefixFilter || m_currentItems.isEmpty()) return QString(); // Compute common prefix - QString firstKey = m_currentItems.first()->text(); - QString lastKey = m_currentItems.last()->text(); - const int length = qMin(firstKey.length(), lastKey.length()); - firstKey.truncate(length); - lastKey.truncate(length); + QString commonPrefix = m_currentItems.first()->text(); + for (int i = 1, ei = m_currentItems.size(); i < ei; ++i) { + QString nextItem = m_currentItems.at(i)->text(); + const int length = qMin(commonPrefix.length(), nextItem.length()); + commonPrefix.truncate(length); + nextItem.truncate(length); - while (firstKey != lastKey) { - firstKey.chop(1); - lastKey.chop(1); + while (commonPrefix != nextItem) { + commonPrefix.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 From 104c1f3757b0dc60b3dd2cd3ee9fe4dc09f05557 Mon Sep 17 00:00:00 2001 From: Daniel Teske Date: Mon, 14 Jan 2013 15:31:49 +0100 Subject: [PATCH 13/20] Only show Visual Studio compilers if VS is installed Task-number: QTCREATORBUG-8487 Change-Id: Ibc812f14cd8e4de765cabf27d23451c06611d372 Reviewed-by: Friedemann Kleint Reviewed-by: Daniel Teske --- src/plugins/projectexplorer/msvctoolchain.cpp | 15 +++++++++++++++ src/plugins/projectexplorer/msvctoolchain.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index a47d1039e05..00aa65d994f 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -440,6 +440,19 @@ QString MsvcToolChainFactory::id() const 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 MsvcToolChainFactory::autoDetect() { QList results; @@ -501,6 +514,8 @@ QList MsvcToolChainFactory::autoDetect() const int dotPos = vsName.indexOf(QLatin1Char('.')); if (dotPos == -1) continue; + if (!checkForVisualStudioInstallation(vsName)) + continue; const QString path = vsRegistry.value(vsName).toString(); const int version = vsName.left(dotPos).toInt(); diff --git a/src/plugins/projectexplorer/msvctoolchain.h b/src/plugins/projectexplorer/msvctoolchain.h index 8afbf6ebb72..21a0582aaa1 100644 --- a/src/plugins/projectexplorer/msvctoolchain.h +++ b/src/plugins/projectexplorer/msvctoolchain.h @@ -106,6 +106,8 @@ public: { return MsvcToolChain::readFromMap(data); } ToolChainConfigWidget *configurationWidget(ToolChain *); +private: + static bool checkForVisualStudioInstallation(const QString &vsName); }; // -------------------------------------------------------------------------- From b7ba74d80c293982bd0b4739f722c36ef245a360 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 13 Jan 2013 21:11:38 +0200 Subject: [PATCH 14/20] Debugger: Update command-line arguments Change-Id: I0d6a674766f4cb7c6e002125e91a3df940b1e1b9 Reviewed-by: hjk --- src/plugins/debugger/Debugger.pluginspec.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/debugger/Debugger.pluginspec.in b/src/plugins/debugger/Debugger.pluginspec.in index 2debe9b93f5..153529f8512 100644 --- a/src/plugins/debugger/Debugger.pluginspec.in +++ b/src/plugins/debugger/Debugger.pluginspec.in @@ -24,9 +24,9 @@ Alternatively, this plugin may be used under the terms of the GNU Lesser General Attach to local process Start and debug executable - + Attach to core file - + Attach to remote debug server From 0f026bd9d29256fa23555321453244eac7f0ffb9 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Fri, 7 Dec 2012 19:53:32 +0200 Subject: [PATCH 15/20] Fix crash when pressing stop button Change-Id: If1902153404c49516cf4e535655dbbb5a8135b1c Reviewed-by: Daniel Teske --- src/plugins/android/androidruncontrol.cpp | 2 +- src/plugins/android/androidrunner.cpp | 9 ++++++--- src/plugins/android/androidrunner.h | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/plugins/android/androidruncontrol.cpp b/src/plugins/android/androidruncontrol.cpp index 5ad51c5fc24..45dfdf391f3 100644 --- a/src/plugins/android/androidruncontrol.cpp +++ b/src/plugins/android/androidruncontrol.cpp @@ -71,7 +71,7 @@ void AndroidRunControl::start() RunControl::StopResult AndroidRunControl::stop() { - m_runner->stop(); + m_runner->stop(true); return StoppedSynchronously; } diff --git a/src/plugins/android/androidrunner.cpp b/src/plugins/android/androidrunner.cpp index 57439c857d4..dbb3850201f 100644 --- a/src/plugins/android/androidrunner.cpp +++ b/src/plugins/android/androidrunner.cpp @@ -68,7 +68,7 @@ AndroidRunner::AndroidRunner(QObject *parent, AndroidRunConfiguration *runConfig AndroidRunner::~AndroidRunner() { - stop(); + stop(false); } void AndroidRunner::checkPID() @@ -232,7 +232,7 @@ void AndroidRunner::startLogcat() emit remoteProcessStarted(5039); } -void AndroidRunner::stop() +void AndroidRunner::stop(bool async) { QMutexLocker locker(&m_mutex); m_adbLogcatProcess.terminate(); @@ -240,7 +240,10 @@ void AndroidRunner::stop() m_checkPIDTimer.stop(); if (m_processPID == -1) return; // don't emit another signal - QtConcurrent::run(this, &AndroidRunner::asyncStop); + if (async) + QtConcurrent::run(this, &AndroidRunner::asyncStop); + else + asyncStop(); } void AndroidRunner::asyncStop() { diff --git a/src/plugins/android/androidrunner.h b/src/plugins/android/androidrunner.h index dbec6f68c57..09474e16014 100644 --- a/src/plugins/android/androidrunner.h +++ b/src/plugins/android/androidrunner.h @@ -55,7 +55,7 @@ public: public slots: void start(); - void stop(); + void stop(bool async); signals: void remoteProcessStarted(int gdbServerPort = -1, int qmlPort = -1); From f841f3743d990921b15f7bc87d492056c8912d0d Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Fri, 7 Dec 2012 19:53:38 +0200 Subject: [PATCH 16/20] Add QMAKE_INCDIR to headers search paths Change-Id: I482d16efc93d9786d4a66846f6991c168d612a63 Reviewed-by: Oswald Buddenhagen Reviewed-by: Daniel Teske --- src/plugins/qt4projectmanager/qt4nodes.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index 02b573e2b57..e24d5c5a77a 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -2148,6 +2148,7 @@ QStringList Qt4ProFileNode::includePaths(QtSupport::ProFileReader *reader) const } 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 // except if those directories don't exist at the time of parsing // thus we add those directories manually (without checking for existence) From b437b988e504b20440f1fdf7ef72157a5e616ae3 Mon Sep 17 00:00:00 2001 From: Aurindam Jana Date: Wed, 16 Jan 2013 15:13:47 +0100 Subject: [PATCH 17/20] KitManager: Scope KitGuard Scope KitGuard correctly to avoid emitting kitUpdated signal when adding a kit. Change-Id: Id9b0f92c7c2be8adaf7490cfbecfaceb8717b80f Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/kitmanager.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index e8486709bbb..1daf4953492 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -446,12 +446,14 @@ void KitManager::addKit(Kit *k) if (!k) return; - KitGuard g(k); - foreach (KitInformation *ki, d->m_informationList) { - if (!k->hasValue(ki->dataId())) - k->setValue(ki->dataId(), ki->defaultValue(k)); - else - ki->fix(k); + { + KitGuard g(k); + foreach (KitInformation *ki, d->m_informationList) { + if (!k->hasValue(ki->dataId())) + k->setValue(ki->dataId(), ki->defaultValue(k)); + else + ki->fix(k); + } } d->m_kitList.append(k); From 02871cb80529055931b9c542ad877413b43272bc Mon Sep 17 00:00:00 2001 From: Aurindam Jana Date: Wed, 16 Jan 2013 15:18:37 +0100 Subject: [PATCH 18/20] ToolChainOptionsPage: Check for null pointer Change-Id: I33ec41f3f1bd58bd236bceac71d4c709957c8332 Reviewed-by: Tobias Hunger --- src/plugins/projectexplorer/toolchainoptionspage.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/projectexplorer/toolchainoptionspage.cpp b/src/plugins/projectexplorer/toolchainoptionspage.cpp index 839ecb0cdd5..ea95436013e 100644 --- a/src/plugins/projectexplorer/toolchainoptionspage.cpp +++ b/src/plugins/projectexplorer/toolchainoptionspage.cpp @@ -570,6 +570,8 @@ bool ToolChainOptionsPage::matches(const QString &s) const void ToolChainOptionsPage::toolChainSelectionChanged() { + if (!m_container) + return; QModelIndex current = currentIndex(); (void)m_container->takeWidget(); // Prevent deletion. QWidget *currentTcWidget = current.isValid() ? m_model->widget(current) : 0; From 1dbc5e98298bf8126d35f84bd1e2d35145a3cdc5 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 15 Jan 2013 17:06:35 +0100 Subject: [PATCH 19/20] SDKtool: Create group/world readable files Task-number: QTCREATORBUG-8458 Change-Id: I69234f0056ff4a3b00d217f7aad57b78db2096fc Reviewed-by: Tim Jenssen Reviewed-by: Tobias Hunger --- src/tools/sdktool/operation.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/tools/sdktool/operation.cpp b/src/tools/sdktool/operation.cpp index 13faf1172e5..46fddb32671 100644 --- a/src/tools/sdktool/operation.cpp +++ b/src/tools/sdktool/operation.cpp @@ -34,6 +34,7 @@ #include "utils/persistentsettings.h" #include +#include #include @@ -124,5 +125,8 @@ bool Operation::save(const QVariantMap &map, const QString &file) const QDir(dir.toString()).mkpath(dir.toString()); Utils::PersistentSettingsWriter writer(path, QLatin1String("unknown")); - return writer.save(map, 0); + return writer.save(map, 0) + && QFile::setPermissions(path.toString(), + QFile::ReadOwner | QFile::WriteOwner + | QFile::ReadGroup | QFile::ReadOther); } From 6ec9dd10a5d8e232687c850b83d89c1746dc34e5 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 16 Jan 2013 15:26:39 +0100 Subject: [PATCH 20/20] Fix warning about running processes with empty environment. When detecting MSVC installations. Change-Id: I1d136c6815fe928541620f3e004be4afc0aef39b Reviewed-by: Daniel Teske --- src/plugins/projectexplorer/abstractmsvctoolchain.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp index bd23cb8fe4f..ba30d803b5d 100644 --- a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp +++ b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp @@ -152,7 +152,7 @@ QString AbstractMsvcToolChain::makeCommand(const Utils::Environment &environment Utils::FileName AbstractMsvcToolChain::compilerCommand() const { - Utils::Environment env; + Utils::Environment env = Utils::Environment::systemEnvironment(); addToEnvironment(env); return Utils::FileName::fromString(env.searchInPath("cl.exe")); }