From bc5cda03e481637bd93ff61f957774e2aa4e3bf7 Mon Sep 17 00:00:00 2001 From: Aurindam Jana Date: Thu, 8 Nov 2012 09:40:56 +0100 Subject: [PATCH 01/15] Inspector: Do not disable Locals and Expressions Inspector follows a different cycle and its contents are always valid during a debug session. Show the values in Locals and Expressions as valid for user to interact with them. Task-number: QTCREATORBUG-8167 Change-Id: If2f622de5b8bf6da78571bc007efd19602a5f389 Reviewed-by: hjk Reviewed-by: Robert Loehning Reviewed-by: Eike Ziller Reviewed-by: Kai Koehne --- src/plugins/debugger/watchhandler.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 86a47c9b869..8b1d3a6583c 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -731,10 +731,10 @@ bool WatchModel::canFetchMore(const QModelIndex &idx) const { if (!idx.isValid()) return false; - if (!contentIsValid()) - return false; WatchItem *item = watchItem(idx); QTC_ASSERT(item, return false); + if (!contentIsValid() && !item->isInspect()) + return false; if (!item->iname.contains('.')) return false; return !m_fetchTriggered.contains(item->iname); @@ -1032,7 +1032,7 @@ QVariant WatchModel::data(const QModelIndex &idx, int role) const static const QVariant red(QColor(200, 0, 0)); static const QVariant gray(QColor(140, 140, 140)); if (idx.column() == 1) { - if (!data.valueEnabled || !contentIsValid()) + if (!data.valueEnabled || (!contentIsValid() && !data.isInspect())) return gray; if (data.value != m_valueCache.value(data.iname)) return red; @@ -1152,10 +1152,11 @@ bool WatchModel::setData(const QModelIndex &idx, const QVariant &value, int role Qt::ItemFlags WatchModel::flags(const QModelIndex &idx) const { - if (!contentIsValid()) + if (!idx.isValid()) return Qt::ItemFlags(); - if (!idx.isValid()) + const WatchData &data = *watchItem(idx); + if (!contentIsValid() && !data.isInspect()) return Qt::ItemFlags(); // Enabled, editable, selectable, checkable, and can be used both as the @@ -1166,7 +1167,6 @@ Qt::ItemFlags WatchModel::flags(const QModelIndex &idx) const static const Qt::ItemFlags editable = notEditable | Qt::ItemIsEditable; // Disable editing if debuggee is positively running except for Inspector data - const WatchData &data = *watchItem(idx); const bool isRunning = engine() && engine()->state() == InferiorRunOk; if (isRunning && engine() && !engine()->hasCapability(AddWatcherWhileRunningCapability) && !data.isInspect()) From 2394ceef6c1bf78ffc665d9a1680561679d4bf09 Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Fri, 19 Oct 2012 17:07:26 +0200 Subject: [PATCH 02/15] Updated strings after target -> kit renaming Change-Id: Ia686fdb377e2267c7687d6804c02b209402d6275 Reviewed-by: Tobias Hunger Reviewed-by: Daniel Teske --- src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp | 2 +- src/plugins/cmakeprojectmanager/makestep.cpp | 4 ++-- src/plugins/projectexplorer/buildmanager.cpp | 2 +- src/plugins/projectexplorer/miniprojecttargetselector.cpp | 2 +- src/plugins/projectexplorer/projectexplorer.cpp | 6 +++--- src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp | 2 +- src/plugins/qtsupport/qtoptionspage.cpp | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp index ff7a870f1d1..a0601d8476d 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp @@ -199,7 +199,7 @@ bool CMakeRunConfiguration::fromMap(const QVariantMap &map) QString CMakeRunConfiguration::defaultDisplayName() const { if (m_title.isEmpty()) - return tr("Run CMake target"); + return tr("Run CMake kit"); return m_title + (m_enabled ? "" : tr(" (disabled)")); } diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp index 66fb55ba908..74070d8c374 100644 --- a/src/plugins/cmakeprojectmanager/makestep.cpp +++ b/src/plugins/cmakeprojectmanager/makestep.cpp @@ -343,7 +343,7 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) m_buildTargetsList = new QListWidget; m_buildTargetsList->setMinimumHeight(200); - fl->addRow(tr("Targets:"), m_buildTargetsList); + fl->addRow(tr("Kits:"), m_buildTargetsList); // TODO update this list also on rescans of the CMakeLists.txt CMakeProject *pro = static_cast(m_makeStep->target()->project()); @@ -403,7 +403,7 @@ void MakeStepConfigWidget::updateDetails() if (!bc) bc = static_cast(m_makeStep->target()->activeBuildConfiguration()); if (!bc) { - m_summaryText = tr("No build configuration found on this target."); + m_summaryText = tr("No build configuration found on this kit."); updateSummary(); return; } diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp index b09305bfc01..e42f7d28dd4 100644 --- a/src/plugins/projectexplorer/buildmanager.cpp +++ b/src/plugins/projectexplorer/buildmanager.cpp @@ -401,7 +401,7 @@ void BuildManager::nextBuildQueue() // Build Failure const QString projectName = d->m_currentBuildStep->project()->displayName(); const QString targetName = d->m_currentBuildStep->target()->displayName(); - addToOutputWindow(tr("Error while building/deploying project %1 (target: %2)").arg(projectName, targetName), BuildStep::ErrorOutput); + addToOutputWindow(tr("Error while building/deploying project %1 (kit: %2)").arg(projectName, targetName), BuildStep::ErrorOutput); addToOutputWindow(tr("When executing step '%1'").arg(d->m_currentBuildStep->displayName()), BuildStep::ErrorOutput); // NBS TODO fix in qtconcurrent d->m_progressFutureInterface->setProgressValueAndText(d->m_progress*100, tr("Error while building/deploying project %1 (target: %2)").arg(projectName, targetName)); diff --git a/src/plugins/projectexplorer/miniprojecttargetselector.cpp b/src/plugins/projectexplorer/miniprojecttargetselector.cpp index 71f38f5749f..47953852834 100644 --- a/src/plugins/projectexplorer/miniprojecttargetselector.cpp +++ b/src/plugins/projectexplorer/miniprojecttargetselector.cpp @@ -1414,7 +1414,7 @@ void MiniProjectTargetSelector::updateActionAndSummary() QStringList lines; lines << tr("Project: %1").arg(projectName); if (!targetName.isEmpty()) - lines << tr("Target: %1").arg(targetName); + lines << tr("Kit: %1").arg(targetName); if (!buildConfig.isEmpty()) lines << tr("Build: %1").arg(buildConfig); if (!deployConfig.isEmpty()) diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index c7dc84bbe93..c9a7aac6f44 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -876,7 +876,7 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er d->m_projectSelectorActionQuick = new QAction(this); d->m_projectSelectorActionQuick->setEnabled(false); - d->m_projectSelectorActionQuick->setText(tr("Quick Switch Target Selector")); + d->m_projectSelectorActionQuick->setText(tr("Quick Switch Kit Selector")); connect(d->m_projectSelectorActionQuick, SIGNAL(triggered()), d->m_targetSelector, SLOT(nextOrShow())); cmd = Core::ActionManager::registerAction(d->m_projectSelectorActionQuick, ProjectExplorer::Constants::SELECTTARGETQUICK, globalcontext); cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+T"))); @@ -2343,10 +2343,10 @@ QString ProjectExplorerPlugin::cannotRunReason(Project *project, RunMode runMode return tr("The project %1 is not configured.").arg(project->displayName()); if (!project->activeTarget()) - return tr("The project '%1' has no active target.").arg(project->displayName()); + return tr("The project '%1' has no active kit.").arg(project->displayName()); if (!project->activeTarget()->activeRunConfiguration()) - return tr("The target '%1' for the project '%2' has no active run configuration.") + return tr("The kit '%1' for the project '%2' has no active run configuration.") .arg(project->activeTarget()->displayName(), project->displayName()); diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index f57ffd7961f..8f89331089f 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -216,7 +216,7 @@ void Qt4ProjectConfigWidget::updateProblemLabel() // Check for Qt version: QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k); if (!version) { - setProblemLabel(tr("This target cannot build this project since it does not define a Qt version.")); + setProblemLabel(tr("This kit cannot build this project since it does not define a Qt version.")); return; } diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp index 764dc7dfce0..af5d0480bc8 100644 --- a/src/plugins/qtsupport/qtoptionspage.cpp +++ b/src/plugins/qtsupport/qtoptionspage.cpp @@ -703,7 +703,7 @@ void QtOptionsPageWidget::editPath() if (current->type() != version->type()) { // not the same type, error out QMessageBox::critical(this, tr("Incompatible Qt Versions"), - tr("The Qt version selected must be for the same target."), + tr("The Qt version selected must be for the same device type."), QMessageBox::Ok); delete version; return; From 53388c40401dd7236bc0ef5c85ac8f31096c8631 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 11 Nov 2012 14:47:52 +0200 Subject: [PATCH 03/15] Improve message when loading .shared with future version Change-Id: I00b5d4bdc202a087fb37d2b0b7c7c01f2764e4e4 Reviewed-by: Leena Miettinen --- src/plugins/projectexplorer/settingsaccessor.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/plugins/projectexplorer/settingsaccessor.cpp b/src/plugins/projectexplorer/settingsaccessor.cpp index ea2666e8620..0439aafed0d 100644 --- a/src/plugins/projectexplorer/settingsaccessor.cpp +++ b/src/plugins/projectexplorer/settingsaccessor.cpp @@ -686,13 +686,11 @@ QVariantMap SettingsAccessor::restoreSettings() const QApplication::translate("ProjectExplorer::SettingsAccessor", "Unsupported Shared Settings File"), QApplication::translate("ProjectExplorer::SettingsAccessor", - "The version of your .shared file is not yet " + "The version of your .shared file is not " "supported by this Qt Creator version. " "Only settings that are still compatible " "will be taken into account.\n\n" - "Do you want to continue?\n\n" - "If you choose not to continue Qt Creator will " - "not try to load the .shared file."), + "Do you want to try loading it?"), QMessageBox::Yes | QMessageBox::No, Core::ICore::mainWindow()); msgBox.setDefaultButton(QMessageBox::No); From e6ebf1629f148a431682f6adc7b9716e4033a186 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 5 Nov 2012 09:51:17 +0100 Subject: [PATCH 04/15] BaseQtVersion: Use first possible toolchain in autodetection. Autodetected toolchain lists usually have the preferred ones at the front. This fixes MSVC toolchain detection on Windows 64 to use 'amd64' instead of 'x86_amd64'. Change-Id: I37aa1aee21136c1fa550551755d4c588beab1f7c Reviewed-by: Tobias Hunger Reviewed-by: Eike Ziller --- src/plugins/qtsupport/baseqtversion.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index aed2748a660..3cb7d90a5d8 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -409,7 +409,8 @@ ProjectExplorer::ToolChain *BaseQtVersion::preferredToolChain(const Utils::FileN continue; if (tc->suggestedMkspecList().contains(spec)) return tc; // perfect match - possibleTc = tc; // possible match + if (!possibleTc) + possibleTc = tc; // first possible match } return possibleTc; } From 0f7039251f06d573b831098b4a7fe0ef068c47f2 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Tue, 13 Nov 2012 18:17:50 +0100 Subject: [PATCH 05/15] Add zh_TW into LANGUAGES in translations.pro Change-Id: I46ad31d8e1a1161edbd443424be61d288f6f7ccb Reviewed-by: Oswald Buddenhagen --- share/qtcreator/translations/translations.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/translations/translations.pro b/share/qtcreator/translations/translations.pro index dfaf7c471bc..d73fe3b4b4d 100644 --- a/share/qtcreator/translations/translations.pro +++ b/share/qtcreator/translations/translations.pro @@ -1,6 +1,6 @@ include(../../../qtcreator.pri) -LANGUAGES = cs de fr ja pl ru sl zh_CN +LANGUAGES = cs de fr ja pl ru sl zh_CN zh_TW # *don't* re-enable these without a prior rework BAD_LANGUAGES = hu From 5443df18475aa52546d2957a4658b219f4b3cea5 Mon Sep 17 00:00:00 2001 From: Kai Koehne Date: Tue, 13 Nov 2012 11:55:29 +0100 Subject: [PATCH 06/15] QML: Add Qt Quick 2 file wizard Have two file wizards, one "QML File (Qt Quick 1)", and one "QML File (Qt Quick 2)". Task-number: QTCREATORBUG-8236 Change-Id: Ibcbf7e6a13b47b1971afdde460a62bed52537f72 Reviewed-by: Eike Ziller --- src/plugins/qmljseditor/qmlfilewizard.cpp | 9 ++++++-- .../qmljseditor/qmljseditorconstants.h | 3 +++ src/plugins/qmljseditor/qmljseditorplugin.cpp | 22 +++++++++++++------ 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/plugins/qmljseditor/qmlfilewizard.cpp b/src/plugins/qmljseditor/qmlfilewizard.cpp index 32376002477..b8e43608821 100644 --- a/src/plugins/qmljseditor/qmlfilewizard.cpp +++ b/src/plugins/qmljseditor/qmlfilewizard.cpp @@ -28,6 +28,7 @@ ****************************************************************************/ #include "qmlfilewizard.h" +#include "qmljseditorconstants.h" #include @@ -61,9 +62,13 @@ QString QmlFileWizard::fileContents(const QString &) const QString contents; QTextStream str(&contents); + if (baseFileWizardParameters().id() == QLatin1String(Constants::WIZARD_QML1FILE)) + str << QLatin1String("import QtQuick 1.1\n"); + else + str << QLatin1String("import QtQuick 2.0\n"); + // 100:62 is the 'golden ratio' - str << QLatin1String("import QtQuick 1.1\n") - << QLatin1String("\n") + str << QLatin1String("\n") << QLatin1String("Rectangle {\n") << QLatin1String(" width: 100\n") << QLatin1String(" height: 62\n") diff --git a/src/plugins/qmljseditor/qmljseditorconstants.h b/src/plugins/qmljseditor/qmljseditorconstants.h index d119afb626d..eb68b762b3f 100644 --- a/src/plugins/qmljseditor/qmljseditorconstants.h +++ b/src/plugins/qmljseditor/qmljseditorconstants.h @@ -45,6 +45,9 @@ const char TASK_SEARCH[] = "QmlJSEditor.TaskSearch"; const char SETTINGS_CATEGORY_QML[] = "J.QtQuick"; const char SETTINGS_TR_CATEGORY_QML[] = QT_TRANSLATE_NOOP("QmlJSEditor", "Qt Quick"); +const char WIZARD_QML1FILE[] = "Q.Qml.1"; +const char WIZARD_QML2FILE[] = "Q.Qml.2"; + const char FIND_USAGES[] = "QmlJSEditor.FindUsages"; const char RENAME_USAGES[] = "QmlJSEditor.RenameUsages"; const char RUN_SEMANTIC_SCAN[] = "QmlJSEditor.RunSemanticScan"; diff --git a/src/plugins/qmljseditor/qmljseditorplugin.cpp b/src/plugins/qmljseditor/qmljseditorplugin.cpp index db86d7564a9..ab5f760e302 100644 --- a/src/plugins/qmljseditor/qmljseditorplugin.cpp +++ b/src/plugins/qmljseditor/qmljseditorplugin.cpp @@ -140,13 +140,21 @@ bool QmlJSEditorPlugin::initialize(const QStringList & /*arguments*/, QString *e addObject(m_editor); QObject *core = Core::ICore::instance(); - Core::BaseFileWizardParameters qmlWizardParameters(Core::IWizard::FileWizard); - qmlWizardParameters.setCategory(QLatin1String(Core::Constants::WIZARD_CATEGORY_QT)); - qmlWizardParameters.setDisplayCategory(QCoreApplication::translate("QmlJsEditor", Core::Constants::WIZARD_TR_CATEGORY_QT)); - qmlWizardParameters.setDescription(tr("Creates a QML file.")); - qmlWizardParameters.setDisplayName(tr("QML File")); - qmlWizardParameters.setId(QLatin1String("Q.Qml")); - addAutoReleasedObject(new QmlFileWizard(qmlWizardParameters, core)); + Core::BaseFileWizardParameters qml1WizardParameters(Core::IWizard::FileWizard); + qml1WizardParameters.setCategory(QLatin1String(Core::Constants::WIZARD_CATEGORY_QT)); + qml1WizardParameters.setDisplayCategory(QCoreApplication::translate("QmlJsEditor", Core::Constants::WIZARD_TR_CATEGORY_QT)); + qml1WizardParameters.setDescription(tr("Creates a QML file with boilerplate code, starting with \"import QtQuick 1.1\".")); + qml1WizardParameters.setDisplayName(tr("QML File (Qt Quick 1)")); + qml1WizardParameters.setId(QLatin1String(Constants::WIZARD_QML1FILE)); + addAutoReleasedObject(new QmlFileWizard(qml1WizardParameters, core)); + + Core::BaseFileWizardParameters qml2WizardParameters(Core::IWizard::FileWizard); + qml2WizardParameters.setCategory(QLatin1String(Core::Constants::WIZARD_CATEGORY_QT)); + qml2WizardParameters.setDisplayCategory(QCoreApplication::translate("QmlJsEditor", Core::Constants::WIZARD_TR_CATEGORY_QT)); + qml2WizardParameters.setDescription(tr("Creates a QML file with boilerplate code, starting with \"import QtQuick 2.0\".")); + qml2WizardParameters.setDisplayName(tr("QML File (Qt Quick 2)")); + qml2WizardParameters.setId(QLatin1String(Constants::WIZARD_QML2FILE)); + addAutoReleasedObject(new QmlFileWizard(qml2WizardParameters, core)); Core::BaseFileWizardParameters jsWizardParameters(Core::IWizard::FileWizard); jsWizardParameters.setCategory(QLatin1String(Core::Constants::WIZARD_CATEGORY_QT)); From 0ae621ba4ebc664c1fbf2829b38b37eb10a67ab6 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 15 Nov 2012 10:32:59 +0100 Subject: [PATCH 07/15] Version bump. Change-Id: Ifea253aaa719d020926a17498dc23b76134e0534 --- qtcreator.pri | 2 +- qtcreator.qbs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/qtcreator.pri b/qtcreator.pri index 63b48569f0b..977f47ef1fc 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.0 +QTCREATOR_VERSION = 2.6.1 isEqual(QT_MAJOR_VERSION, 5) { diff --git a/qtcreator.qbs b/qtcreator.qbs index 40c5ce938c5..0157e201a66 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: '0' + property string ide_version_release: '1' property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.' + ide_version_release property var additionalCppDefines: [ 'IDE_LIBRARY_BASENAME="lib"', From 72c2a73bcb51b2a4339420268eb01097de72068d Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 1 Nov 2012 10:36:07 +0100 Subject: [PATCH 08/15] debugger: handle gdb.TYPE_CODE_FUNC as "generic" type This seems not to have been used in the past. Change-Id: I6e6ce80b8cdd1f20477cde2718e5283a886bb87a Reviewed-by: Eike Ziller Reviewed-by: hjk --- share/qtcreator/dumper/dumper.py | 1 + 1 file changed, 1 insertion(+) diff --git a/share/qtcreator/dumper/dumper.py b/share/qtcreator/dumper/dumper.py index 57fd20d535d..52aad054ca7 100644 --- a/share/qtcreator/dumper/dumper.py +++ b/share/qtcreator/dumper/dumper.py @@ -1652,6 +1652,7 @@ class Dumper: if type.code == MethodPointerCode \ or type.code == MethodCode \ + or type.code == FunctionCode \ or type.code == MemberPointerCode: self.putType(typeName) self.putAddress(value.address) From abddfe7b1481ca43f336567eaff51320fb62d524 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 6 Nov 2012 11:34:31 +0100 Subject: [PATCH 09/15] Editor: Fix infinite loop in BaseTextFind Searching in a blockselection for the regular expressions start of line '^' or line end '$' results in an infinite loop. Only occures when the blockselection didn't contain the searched regular expression. Task-number: QTCREATORBUG-8159 Change-Id: I36412387ecce381300b75d0cd0a452ce5bf1094e Reviewed-by: Eike Ziller --- src/plugins/find/basetextfind.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/plugins/find/basetextfind.cpp b/src/plugins/find/basetextfind.cpp index c89bdd08f48..e567769d1e2 100644 --- a/src/plugins/find/basetextfind.cpp +++ b/src/plugins/find/basetextfind.cpp @@ -338,7 +338,18 @@ QTextCursor BaseTextFind::findOne(const QRegExp &expr, const QTextCursor &from, Q_ARG(QTextCursor, candidate)); if (inVerticalFindScope) return candidate; - candidate = document()->find(expr, candidate, options); + + QTextCursor newCandidate = document()->find(expr, candidate, options); + if (newCandidate == candidate) { + // When searching for regular expressions that match "zero length" strings (like ^ or \b) + // we need to move away from the match before searching for the next one. + candidate.movePosition(options & QTextDocument::FindBackward + ? QTextCursor::PreviousCharacter + : QTextCursor::NextCharacter); + candidate = document()->find(expr, candidate, options); + } else { + candidate = newCandidate; + } } return candidate; } From 4ddb9d15ce641901fa90ceaa6d426bbbc1f4b9a8 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Wed, 14 Nov 2012 17:26:16 +0100 Subject: [PATCH 10/15] Distinguish chinese translations in settings Task-number: QTCREATORBUG-8252 Change-Id: Iccf75baf05fe76cf0fd17e2e76af5b84674bbe34 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/generalsettings.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/generalsettings.cpp b/src/plugins/coreplugin/generalsettings.cpp index 30baff30abc..23bca0e5a3b 100644 --- a/src/plugins/coreplugin/generalsettings.cpp +++ b/src/plugins/coreplugin/generalsettings.cpp @@ -91,7 +91,10 @@ void GeneralSettings::fillLanguageBox() const const QString locale = languageFile.mid(start, end-start); // no need to show a language that creator will not load anyway if (hasQmFilesForLocale(locale, creatorTrPath)) { - m_page->languageBox->addItem(QLocale::languageToString(QLocale(locale).language()), locale); + QLocale tmpLocale(locale); + QString languageItem = QLocale::languageToString(tmpLocale.language()) + QLatin1String(" (") + + QLocale::countryToString(tmpLocale.country()) + QLatin1Char(')'); + m_page->languageBox->addItem(languageItem, locale); if (locale == currentLocale) m_page->languageBox->setCurrentIndex(m_page->languageBox->count() - 1); } From 691ade174771141b6c5efb0d7f2e983826c6670c Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Thu, 15 Nov 2012 13:45:48 +0200 Subject: [PATCH 11/15] ClearCase: Fix "Check In Activity" Change-Id: I69a416b8e3366c2054e3d0208a5eb50b82f4c597 Reviewed-by: Knut Petter Svendsen Reviewed-by: Tobias Hunger --- src/plugins/clearcase/clearcaseplugin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index 963bb1a3d55..99ce042a5e8 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -973,7 +973,7 @@ void ClearCasePlugin::startCheckInActivity() last = file; } } - startCheckIn(state.currentProjectPath(), files); + startCheckIn(topLevel, files); } /* Start check in of files of a single repository by displaying From 3f44c6d0becc704538523a84593efb4e1719c84c Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Mon, 12 Nov 2012 16:48:26 +0200 Subject: [PATCH 12/15] ClearCase: Fix race condition setStatus() is invoked in the main thread, but the status change is tested for in the sync thread... Change-Id: Ib322e12e7d40dafa6b60f3a73a202e8e1dcbfb53 Reviewed-by: Tobias Hunger --- src/plugins/clearcase/clearcaseplugin.cpp | 8 +++----- src/plugins/clearcase/clearcaseplugin.h | 6 ++---- src/plugins/clearcase/clearcasesync.cpp | 12 ++++++------ src/plugins/clearcase/clearcasesync.h | 1 - 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index 99ce042a5e8..b37aa68be07 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -81,6 +81,7 @@ #include #include #include +#include #include #include #include @@ -88,7 +89,6 @@ #include #include #include -#include #include #include #include @@ -642,11 +642,11 @@ void ClearCasePlugin::addCurrentFile() vcsAdd(state.currentFileTopLevel(), state.relativeCurrentFile()); } -void ClearCasePlugin::setStatus(const QString &file, ClearCase::Internal::FileStatus::Status status, bool update) +void ClearCasePlugin::setStatus(const QString &file, FileStatus::Status status, bool update) { m_statusMap->insert(file, FileStatus(status, QFileInfo(currentState().topLevel(), file).permissions())); if (update && (currentState().relativeCurrentFile() == file)) - updateStatusActions(); + QMetaObject::invokeMethod(this, "updateStatusActions"); } void ClearCasePlugin::undoCheckOutCurrent() @@ -1940,8 +1940,6 @@ void ClearCasePlugin::sync(QFutureInterface &future, QString topLevel, QSt ClearCasePlugin *plugin = ClearCasePlugin::instance(); ClearCaseSync ccSync(plugin, plugin->m_statusMap); connect(&ccSync, SIGNAL(updateStreamAndView()), plugin, SLOT(updateStreamAndView())); - connect(&ccSync, SIGNAL(setStatus(QString, ClearCase::Internal::FileStatus::Status, bool)), - plugin, SLOT(setStatus(QString, ClearCase::Internal::FileStatus::Status, bool))); ccSync.run(future, topLevel, files); } diff --git a/src/plugins/clearcase/clearcaseplugin.h b/src/plugins/clearcase/clearcaseplugin.h index d4f94511ae1..9c9a1a9159f 100644 --- a/src/plugins/clearcase/clearcaseplugin.h +++ b/src/plugins/clearcase/clearcaseplugin.h @@ -147,6 +147,7 @@ public: QString currentView() const { return m_view; } void refreshActivities(); inline bool isUcm() const { return m_isUcm; } + void setStatus(const QString &file, FileStatus::Status status, bool update = true); bool ccCheckUcm(const QString &viewname, const QString &workingDir) const; @@ -155,7 +156,6 @@ public slots: const QString &revision = QString(), int lineNumber = -1) const; bool newActivity(); void updateStreamAndView(); - void setStatus(const QString &file, ClearCase::Internal::FileStatus::Status status, bool update = true); private slots: void checkOutCurrentFile(); @@ -180,6 +180,7 @@ private slots: void tasksFinished(const QString &type); void syncSlot(); void closing(); + void updateStatusActions(); protected: void updateActions(VcsBase::VcsBasePlugin::ActionState); @@ -210,7 +211,6 @@ private: inline ClearCaseControl *clearCaseControl() const; QString ccGetFileActivity(const QString &workingDir, const QString &file); QStringList ccGetActivityVersions(const QString &workingDir, const QString &activity); - void updateStatusActions(); void diffGraphical(const QString &file1, const QString &file2 = QString()); QString diffExternal(QString file1, QString file2 = QString(), bool keep = false); QString getFile(const QString &nativeFile, const QString &prefix); @@ -264,6 +264,4 @@ private: } // namespace Internal } // namespace ClearCase -Q_DECLARE_METATYPE(ClearCase::Internal::FileStatus::Status) - #endif // CLEARCASEPLUGIN_H diff --git a/src/plugins/clearcase/clearcasesync.cpp b/src/plugins/clearcase/clearcasesync.cpp index 1e954b59890..865b94b634f 100644 --- a/src/plugins/clearcase/clearcasesync.cpp +++ b/src/plugins/clearcase/clearcasesync.cpp @@ -87,7 +87,7 @@ void ClearCaseSync::run(QFutureInterface &future, const QString &topLevel, args << files; } else { foreach (const QString &file, files) - emit setStatus(topLevelDir.relativeFilePath(file), FileStatus::Unknown, false); + m_plugin->setStatus(topLevelDir.relativeFilePath(file), FileStatus::Unknown, false); args << QLatin1String("-recurse"); args << vobs; } @@ -120,15 +120,15 @@ void ClearCaseSync::run(QFutureInterface &future, const QString &topLevel, if (reState.indexIn(buffer, wspos + 1, QRegExp::CaretAtOffset) != -1) { ccState = reState.cap(); if (ccState.indexOf(QLatin1String("hijacked")) != -1) - emit setStatus(file, FileStatus::Hijacked, true); + m_plugin->setStatus(file, FileStatus::Hijacked, true); else if (ccState.indexOf(QLatin1String("loaded but missing")) != -1) - emit setStatus(file, FileStatus::Missing, false); + m_plugin->setStatus(file, FileStatus::Missing, false); } else if (buffer.lastIndexOf(QLatin1String("CHECKEDOUT"), wspos) != -1) - emit setStatus(file, FileStatus::CheckedOut, true); + m_plugin->setStatus(file, FileStatus::CheckedOut, true); // don't care about checked-in files not listed in project else if (m_statusMap->contains(file)) - emit setStatus(file, FileStatus::CheckedIn, true); + m_plugin->setStatus(file, FileStatus::CheckedIn, true); } buffer.clear(); future.setProgressValue(qMin(total, ++processed)); @@ -140,7 +140,7 @@ void ClearCaseSync::run(QFutureInterface &future, const QString &topLevel, foreach (const QString &file, files) { QString relFile = topLevelDir.relativeFilePath(file); if (m_statusMap->value(relFile).status == FileStatus::Unknown) - emit setStatus(relFile, FileStatus::NotManaged, false); + m_plugin->setStatus(relFile, FileStatus::NotManaged, false); } future.setProgressValue(total + 1); if (!hot) { diff --git a/src/plugins/clearcase/clearcasesync.h b/src/plugins/clearcase/clearcasesync.h index 6ae2a0829cc..286a1341bb3 100644 --- a/src/plugins/clearcase/clearcasesync.h +++ b/src/plugins/clearcase/clearcasesync.h @@ -44,7 +44,6 @@ public: signals: void updateStreamAndView(); - void setStatus(const QString &file, ClearCase::Internal::FileStatus::Status status, bool update); private: ClearCasePlugin *m_plugin; From 80b5a427aa5eabd4dde802d3965787028fdfaf54 Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Sun, 11 Nov 2012 13:53:35 +0200 Subject: [PATCH 13/15] Do not warn when opening a pro.user file without EnvId Change-Id: I8884a444f148d22391f2a5b0fc16dd9fc3c832a7 Reviewed-by: Tobias Hunger --- .../projectexplorer/settingsaccessor.cpp | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/src/plugins/projectexplorer/settingsaccessor.cpp b/src/plugins/projectexplorer/settingsaccessor.cpp index 0439aafed0d..696445ddbe6 100644 --- a/src/plugins/projectexplorer/settingsaccessor.cpp +++ b/src/plugins/projectexplorer/settingsaccessor.cpp @@ -630,25 +630,27 @@ QVariantMap SettingsAccessor::restoreSettings() const QString backup = fn + QLatin1Char('.') + fileId.mid(1, 7); QFile::copy(fn, backup); - // TODO tr, casing check - QMessageBox msgBox( - QMessageBox::Question, - QApplication::translate("ProjectExplorer::SettingsAccessor", - "Project Settings File from a different Environment?"), - QApplication::translate("ProjectExplorer::SettingsAccessor", - "Qt Creator has found a .user settings file which was " - "created for another development setup, maybe " - "originating from another machine.\n\n" - "The .user settings files contain environment specific " - "settings. They should not be copied to a different " - "environment. \n\n" - "Do you still want to load the settings file?"), - QMessageBox::Yes | QMessageBox::No, - Core::ICore::mainWindow()); - msgBox.setDefaultButton(QMessageBox::No); - msgBox.setEscapeButton(QMessageBox::No); - if (msgBox.exec() == QMessageBox::No) - return QVariantMap(); + if (!fileId.isEmpty()) { + // TODO tr, casing check + QMessageBox msgBox( + QMessageBox::Question, + QApplication::translate("ProjectExplorer::SettingsAccessor", + "Project Settings File from a different Environment?"), + QApplication::translate("ProjectExplorer::SettingsAccessor", + "Qt Creator has found a .user settings file which was " + "created for another development setup, maybe " + "originating from another machine.\n\n" + "The .user settings files contain environment specific " + "settings. They should not be copied to a different " + "environment. \n\n" + "Do you still want to load the settings file?"), + QMessageBox::Yes | QMessageBox::No, + Core::ICore::mainWindow()); + msgBox.setDefaultButton(QMessageBox::No); + msgBox.setEscapeButton(QMessageBox::No); + if (msgBox.exec() == QMessageBox::No) + return QVariantMap(); + } } // Do we need to generate a backup? From 0a6b47a7370eda9ee33318133493804941c07a81 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Fri, 16 Nov 2012 15:08:42 +0100 Subject: [PATCH 14/15] Fix detection of post-beta2 Qt5 versions Change-Id: Ie85c5d2bbcc7ee35a343e0bc306e446d103a5925 Reviewed-by: Eike Ziller --- src/plugins/qtsupport/baseqtversion.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 3cb7d90a5d8..2869a769c88 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -1363,7 +1363,9 @@ Utils::FileName BaseQtVersion::qtCorePath(const QHash &versionI } if (info.isReadable()) { if (file.startsWith(QLatin1String("libQtCore")) - || file.startsWith(QLatin1String("QtCore"))) { + || file.startsWith(QLatin1String("libQt5Core")) + || file.startsWith(QLatin1String("QtCore")) + || file.startsWith(QLatin1String("Qt5Core"))) { // Only handle static libs if we can not find dynamic ones: if (file.endsWith(QLatin1String(".a")) || file.endsWith(QLatin1String(".lib"))) staticLibs.append(info); From 5981b1e5509395bc0eb0ff7071e63a529b31fb11 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 16 Nov 2012 11:01:37 +0100 Subject: [PATCH 15/15] ProjectExplorer: handle environment files with non-latin contents Task-number: QTCREATORBUG-8265 Change-Id: Idc69b8d886b8162fbe38e340b9794e9ffca4ad79 Reviewed-by: Oswald Buddenhagen --- src/libs/utils/process_stub_win.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/utils/process_stub_win.c b/src/libs/utils/process_stub_win.c index f109f61e9f7..4d214a0900c 100644 --- a/src/libs/utils/process_stub_win.c +++ b/src/libs/utils/process_stub_win.c @@ -141,7 +141,7 @@ int main() if (*argv[ArgEnv]) { FILE *envFd; long size; - if (!(envFd = _wfopen(argv[ArgEnv], L"r"))) { + if (!(envFd = _wfopen(argv[ArgEnv], L"rb"))) { fprintf(stderr, "Cannot read creator env file %S: %s\n", argv[ArgEnv], strerror(errno)); doExit(1);