From d8343b4b465b48cfaa0ea52dccc01b93415f004d Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 7 Dec 2022 09:32:03 +0100 Subject: [PATCH 01/22] Fix crash after closing preferences opened from indexing progress The preferences dialog is modal and creates an event loop that would be running within the mouse event handler of the widget. When the dialog is closed after the widget is destroyed (i.e. after indexing finished), control would be passed back to the destroyed widget, and crash. Fixes: QTCREATORBUG-28566 Change-Id: I71efa683822b5682ad1b38c39ce8f73c89bdd610 Reviewed-by: Christian Kandeler --- src/plugins/clangcodemodel/clangdclient.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 329b91b6318..eec93aa46c9 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -394,7 +394,12 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir) project ? tr("Indexing %1 with clangd").arg(project->displayName()) : tr("Indexing session with clangd")); setClickHandlerForToken(indexingToken(), [] { - ICore::showOptionsDialog(CppEditor::Constants::CPP_CLANGD_SETTINGS_ID); + // don't directly open modal dialog from click handler, because that would mess + // up the stack + QMetaObject::invokeMethod( + ICore::instance(), + [] { ICore::showOptionsDialog(CppEditor::Constants::CPP_CLANGD_SETTINGS_ID); }, + Qt::QueuedConnection); }); setCurrentProject(project); setDocumentChangeUpdateThreshold(d->settings.documentUpdateThreshold); From e2155a91df81e812c4f086d4558ead70c0ed2551 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 7 Dec 2022 11:28:12 +0100 Subject: [PATCH 02/22] CppTypeHierarchy: Don't create/store QIcon in non-GUI thread Store Utils::CodeModelIcon::Type enum instead. Drop unneeded CPlusPlus::Symbol *declaration from CppDeclarableElement. Remove unused CppClass::operator==(). Task-number: QTCREATORBUG-28529 Change-Id: Ie3487fa5f73d714ef375c42f1e64023ccc4194ee Reviewed-by: Christian Kandeler --- src/plugins/cppeditor/cppelementevaluator.cpp | 8 +------- src/plugins/cppeditor/cppelementevaluator.h | 6 ++---- src/plugins/cppeditor/cpptypehierarchy.cpp | 2 +- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/plugins/cppeditor/cppelementevaluator.cpp b/src/plugins/cppeditor/cppelementevaluator.cpp index 281083f6ebd..04fd19a0105 100644 --- a/src/plugins/cppeditor/cppelementevaluator.cpp +++ b/src/plugins/cppeditor/cppelementevaluator.cpp @@ -94,8 +94,7 @@ public: // CppDeclarableElement CppDeclarableElement::CppDeclarableElement(Symbol *declaration) : CppElement() - , declaration(declaration) - , icon(Icons::iconForSymbol(declaration)) + , iconType(Icons::iconTypeForSymbol(declaration)) { Overview overview; overview.showArgumentNames = true; @@ -135,11 +134,6 @@ CppClass::CppClass(Symbol *declaration) : CppDeclarableElement(declaration) tooltip = qualifiedName; } -bool CppClass::operator==(const CppClass &other) -{ - return this->declaration == other.declaration; -} - CppClass *CppClass::toCppClass() { return this; diff --git a/src/plugins/cppeditor/cppelementevaluator.h b/src/plugins/cppeditor/cppelementevaluator.h index 0b77dda08c8..5e710ea5f85 100644 --- a/src/plugins/cppeditor/cppelementevaluator.h +++ b/src/plugins/cppeditor/cppelementevaluator.h @@ -5,6 +5,7 @@ #include #include +#include #include @@ -76,11 +77,10 @@ public: explicit CppDeclarableElement(CPlusPlus::Symbol *declaration); public: - CPlusPlus::Symbol *declaration; + Utils::CodeModelIcon::Type iconType; QString name; QString qualifiedName; QString type; - QIcon icon; }; class CppClass : public CppDeclarableElement @@ -89,8 +89,6 @@ public: CppClass(); explicit CppClass(CPlusPlus::Symbol *declaration); - bool operator==(const CppClass &other); - CppClass *toCppClass() final; void lookupBases(QFutureInterfaceBase &futureInterface, diff --git a/src/plugins/cppeditor/cpptypehierarchy.cpp b/src/plugins/cppeditor/cpptypehierarchy.cpp index efb956a132d..f93a89d8c01 100644 --- a/src/plugins/cppeditor/cpptypehierarchy.cpp +++ b/src/plugins/cppeditor/cpptypehierarchy.cpp @@ -44,7 +44,7 @@ QStandardItem *itemForClass(const CppClass &cppClass) item->setData(cppClass.name, Qt::DisplayRole); if (cppClass.name != cppClass.qualifiedName) item->setData(cppClass.qualifiedName, AnnotationRole); - item->setData(cppClass.icon, Qt::DecorationRole); + item->setData(iconForType(cppClass.iconType), Qt::DecorationRole); QVariant link; link.setValue(Link(cppClass.link)); item->setData(link, LinkRole); From 0c9706ada92d838e2c0ef0c300e27567d5ef183f Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 6 Dec 2022 22:41:17 +0100 Subject: [PATCH 03/22] CppTypeHierarchy: Don't keep pointers to temp objects When building type hierarchy the pointers to list elements were put into queue. Later, the list was modified and it was possible that list detaches causing stored pointers to be invalid. Simplify building type hierarchy by adding helper recursive methods. Fixes: QTCREATORBUG-28529 Change-Id: I240513fc097536d2175e2242766127b92aaa6a82 Reviewed-by: Christian Kandeler --- src/libs/cplusplus/LookupContext.cpp | 2 +- src/plugins/cppeditor/cppelementevaluator.cpp | 76 ++++++++----------- src/plugins/cppeditor/cppelementevaluator.h | 15 +++- 3 files changed, 45 insertions(+), 48 deletions(-) diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index dee9e65d21a..14d7f922efa 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -433,7 +433,7 @@ QList LookupContext::lookup(const Name *name, Scope *scope) const { QList candidates; - if (! name) + if (!name) return candidates; for (; scope; scope = scope->enclosingScope()) { diff --git a/src/plugins/cppeditor/cppelementevaluator.cpp b/src/plugins/cppeditor/cppelementevaluator.cpp index 04fd19a0105..56677c7b29f 100644 --- a/src/plugins/cppeditor/cppelementevaluator.cpp +++ b/src/plugins/cppeditor/cppelementevaluator.cpp @@ -142,32 +142,30 @@ CppClass *CppClass::toCppClass() void CppClass::lookupBases(QFutureInterfaceBase &futureInterface, Symbol *declaration, const LookupContext &context) { - using Data = QPair; + ClassOrNamespace *hierarchy = context.lookupType(declaration); + if (!hierarchy) + return; + QSet visited; + addBaseHierarchy(futureInterface, context, hierarchy, &visited); +} - if (ClassOrNamespace *clazz = context.lookupType(declaration)) { - QSet visited; - - QQueue q; - q.enqueue({clazz, this}); - while (!q.isEmpty()) { - if (futureInterface.isCanceled()) - return; - Data current = q.dequeue(); - clazz = current.first; - visited.insert(clazz); - const QList &bases = clazz->usings(); - for (ClassOrNamespace *baseClass : bases) { - const QList &symbols = baseClass->symbols(); - for (Symbol *symbol : symbols) { - if (symbol->asClass() && ( - clazz = context.lookupType(symbol)) && - !visited.contains(clazz)) { - CppClass baseCppClass(symbol); - CppClass *cppClass = current.second; - cppClass->bases.append(baseCppClass); - q.enqueue({clazz, &cppClass->bases.last()}); - } - } +void CppClass::addBaseHierarchy(QFutureInterfaceBase &futureInterface, const LookupContext &context, + ClassOrNamespace *hierarchy, QSet *visited) +{ + if (futureInterface.isCanceled()) + return; + visited->insert(hierarchy); + const QList &baseClasses = hierarchy->usings(); + for (ClassOrNamespace *baseClass : baseClasses) { + const QList &symbols = baseClass->symbols(); + for (Symbol *symbol : symbols) { + if (!symbol->asClass()) + continue; + ClassOrNamespace *baseHierarchy = context.lookupType(symbol); + if (baseHierarchy && !visited->contains(baseHierarchy)) { + CppClass classSymbol(symbol); + classSymbol.addBaseHierarchy(futureInterface, context, baseHierarchy, visited); + bases.append(classSymbol); } } } @@ -176,28 +174,20 @@ void CppClass::lookupBases(QFutureInterfaceBase &futureInterface, void CppClass::lookupDerived(QFutureInterfaceBase &futureInterface, Symbol *declaration, const Snapshot &snapshot) { - using Data = QPair; - snapshot.updateDependencyTable(futureInterface); if (futureInterface.isCanceled()) return; - const TypeHierarchy &completeHierarchy - = TypeHierarchyBuilder::buildDerivedTypeHierarchy(futureInterface, declaration, snapshot); + addDerivedHierarchy(TypeHierarchyBuilder::buildDerivedTypeHierarchy( + futureInterface, declaration, snapshot)); +} - QQueue q; - q.enqueue({this, completeHierarchy}); - while (!q.isEmpty()) { - if (futureInterface.isCanceled()) - return; - const Data ¤t = q.dequeue(); - CppClass *clazz = current.first; - const TypeHierarchy &classHierarchy = current.second; - const QList hierarchy = classHierarchy.hierarchy(); - for (const TypeHierarchy &derivedHierarchy : hierarchy) { - clazz->derived.append(CppClass(derivedHierarchy.symbol())); - q.enqueue({&clazz->derived.last(), derivedHierarchy}); - } - } +void CppClass::addDerivedHierarchy(const TypeHierarchy &hierarchy) +{ + CppClass classSymbol(hierarchy.symbol()); + const QList derivedHierarchies = hierarchy.hierarchy(); + for (const TypeHierarchy &derivedHierarchy : derivedHierarchies) + classSymbol.addDerivedHierarchy(derivedHierarchy); + derived.append(classSymbol); } class CppFunction : public CppDeclarableElement diff --git a/src/plugins/cppeditor/cppelementevaluator.h b/src/plugins/cppeditor/cppelementevaluator.h index 5e710ea5f85..14f2659b864 100644 --- a/src/plugins/cppeditor/cppelementevaluator.h +++ b/src/plugins/cppeditor/cppelementevaluator.h @@ -3,14 +3,14 @@ #pragma once +#include "typehierarchybuilder.h" + #include +#include #include #include -#include - #include -#include #include #include #include @@ -19,6 +19,7 @@ #include namespace CPlusPlus { +class ClassOrNamespace; class LookupItem; class LookupContext; } @@ -96,9 +97,15 @@ public: void lookupDerived(QFutureInterfaceBase &futureInterface, CPlusPlus::Symbol *declaration, const CPlusPlus::Snapshot &snapshot); -public: QList bases; QList derived; + +private: + void addBaseHierarchy(QFutureInterfaceBase &futureInterface, + const CPlusPlus::LookupContext &context, + CPlusPlus::ClassOrNamespace *hierarchy, + QSet *visited); + void addDerivedHierarchy(const TypeHierarchy &hierarchy); }; } // namespace Internal From e620299fda0ff234b4935781653d42533a95a304 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 1 Dec 2022 10:52:24 +0100 Subject: [PATCH 04/22] McuSupport: Fix tests on Windows Change-Id: I465fa2dc93ddeed2b3ef3d754b3992f88973862f Reviewed-by: Yasser Grimes Reviewed-by: Reviewed-by: hjk --- src/plugins/mcusupport/mcusupportoptions.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/mcusupport/mcusupportoptions.cpp b/src/plugins/mcusupport/mcusupportoptions.cpp index d2d57973b11..96ed4cd654a 100644 --- a/src/plugins/mcusupport/mcusupportoptions.cpp +++ b/src/plugins/mcusupport/mcusupportoptions.cpp @@ -111,10 +111,12 @@ void McuSdkRepository::expandVariablesAndWildcards() continue; } // drop empty_split_entry(linux)|root(windows) - pathComponents.pop_front(); + QString root = pathComponents.takeFirst(); + if (root.isEmpty()) // Linux + root = "/"; package->setPath( - expandWildcards(FilePath::fromString(QDir::rootPath()), + expandWildcards(FilePath::fromString(root), {pathComponents.constBegin(), pathComponents.constEnd()}) .first); } From ea01c74d50c2ef9f96a8aea6cf9bdf30f3c7156d Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 2 Dec 2022 14:15:22 +0100 Subject: [PATCH 05/22] Squish: Ensure using correct case while debugging Especially on non-casesensitive OS we may get the information regarding break point locations with a wrong case which would try to set a break point and silently fail as the files are internally used with their correct case. Change-Id: I32a780629e1b10ea075d669b8eca812fbd994600 Reviewed-by: David Schulz --- src/plugins/squish/squishtools.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/squish/squishtools.cpp b/src/plugins/squish/squishtools.cpp index 4a33d45cf3a..a788ce2810e 100644 --- a/src/plugins/squish/squishtools.cpp +++ b/src/plugins/squish/squishtools.cpp @@ -1021,7 +1021,7 @@ Utils::Links SquishTools::setBreakpoints() continue; const Utils::FilePath filePath = Utils::FilePath::fromString( gb->data(BreakpointFileColumn, Qt::DisplayRole).toString()); - auto fileName = filePath.toUserOutput(); + auto fileName = filePath.canonicalPath().toUserOutput(); if (fileName.isEmpty()) continue; if (!fileName.endsWith(extension)) From b4015fc345416f2c15a1d95e36287936e9438b02 Mon Sep 17 00:00:00 2001 From: Kwangsub Kim Date: Wed, 9 Nov 2022 16:51:43 +0100 Subject: [PATCH 06/22] BareMetal: Auto-detection of IAR toolchain version 9 The Windows registry node containing the installation path of IAR workbench changed since version 9 that is the same as the one for 32-bit Windows host. Multiple registry keys will be used to identify the latest IAR toolchain as well. Task-number: QTCREATORBUG-28245 Change-Id: I92ed0c10a38e081ca45fcf9e543d902a3e98efc2 Reviewed-by: Denis Shienkov Reviewed-by: hjk --- src/plugins/baremetal/iarewtoolchain.cpp | 50 ++++++++++++------------ 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/src/plugins/baremetal/iarewtoolchain.cpp b/src/plugins/baremetal/iarewtoolchain.cpp index 6972a92bd9b..d75610681c3 100644 --- a/src/plugins/baremetal/iarewtoolchain.cpp +++ b/src/plugins/baremetal/iarewtoolchain.cpp @@ -415,10 +415,10 @@ Toolchains IarToolChainFactory::autoDetect(const ToolchainDetector &detector) co #ifdef Q_OS_WIN + QStringList registryNodes; + registryNodes << "HKEY_LOCAL_MACHINE\\SOFTWARE\\IAR Systems\\Embedded Workbench"; #ifdef Q_OS_WIN64 - static const char kRegistryNode[] = "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\IAR Systems\\Embedded Workbench"; -#else - static const char kRegistryNode[] = "HKEY_LOCAL_MACHINE\\SOFTWARE\\IAR Systems\\Embedded Workbench"; + registryNodes << "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\IAR Systems\\Embedded Workbench"; #endif // Dictionary for know toolchains. @@ -446,33 +446,35 @@ Toolchains IarToolChainFactory::autoDetect(const ToolchainDetector &detector) co {{"EWCR16C"}, {"/cr16c/bin/icccr16c.exe"}}, }; - QSettings registry(kRegistryNode, QSettings::NativeFormat); - const auto oneLevelGroups = registry.childGroups(); - for (const QString &oneLevelKey : oneLevelGroups) { - registry.beginGroup(oneLevelKey); - const auto twoLevelGroups = registry.childGroups(); - for (const Entry &entry : knowToolchains) { - if (twoLevelGroups.contains(entry.registryKey)) { - registry.beginGroup(entry.registryKey); - const auto threeLevelGroups = registry.childGroups(); - for (const QString &threeLevelKey : threeLevelGroups) { - registry.beginGroup(threeLevelKey); - QString compilerPath = registry.value("InstallPath").toString(); - if (!compilerPath.isEmpty()) { - // Build full compiler path. - compilerPath += entry.subExePath; - const FilePath fn = FilePath::fromString(compilerPath); - if (compilerExists(fn)) { - // Note: threeLevelKey is a guessed toolchain version. - candidates.push_back({fn, threeLevelKey}); + for (const QString ®istryNode : registryNodes) { + QSettings registry(registryNode, QSettings::NativeFormat); + const auto oneLevelGroups = registry.childGroups(); + for (const QString &oneLevelKey : oneLevelGroups) { + registry.beginGroup(oneLevelKey); + const auto twoLevelGroups = registry.childGroups(); + for (const Entry &entry : knowToolchains) { + if (twoLevelGroups.contains(entry.registryKey)) { + registry.beginGroup(entry.registryKey); + const auto threeLevelGroups = registry.childGroups(); + for (const QString &threeLevelKey : threeLevelGroups) { + registry.beginGroup(threeLevelKey); + QString compilerPath = registry.value("InstallPath").toString(); + if (!compilerPath.isEmpty()) { + // Build full compiler path. + compilerPath += entry.subExePath; + const FilePath fn = FilePath::fromString(compilerPath); + if (compilerExists(fn)) { + // Note: threeLevelKey is a guessed toolchain version. + candidates.push_back({fn, threeLevelKey}); + } } + registry.endGroup(); } registry.endGroup(); } - registry.endGroup(); } + registry.endGroup(); } - registry.endGroup(); } #endif // Q_OS_WIN From deb454d8fbe24ca68a0c7024207537834fcecae8 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 7 Dec 2022 15:56:07 +0100 Subject: [PATCH 07/22] SaveItemsDialog: Fix default button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changed when removing .ui file. Call order is important here. Amends b3e3de517d4688a94427ddf50e8bb86b419f6696 Task-number: QTCREATORBUG-28536 Change-Id: I04d9351f8bb7f2ed170f3643ba84af5f8afe35ab Reviewed-by: Reviewed-by: André Hartmann --- src/plugins/coreplugin/dialogs/saveitemsdialog.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp b/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp index 25e77a77785..57b43c92933 100644 --- a/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp +++ b/src/plugins/coreplugin/dialogs/saveitemsdialog.cpp @@ -55,7 +55,6 @@ SaveItemsDialog::SaveItemsDialog(QWidget *parent, const QList &item } m_buttonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Save); QPushButton *discardButton = m_buttonBox->addButton(tr("Do &Not Save"), discardButtonRole); - m_buttonBox->button(QDialogButtonBox::Save)->setDefault(true); m_treeWidget->setFocus(); m_saveBeforeBuildCheckBox->setVisible(false); @@ -103,6 +102,8 @@ SaveItemsDialog::SaveItemsDialog(QWidget *parent, const QList &item &SaveItemsDialog::collectItemsToSave); connect(discardButton, &QAbstractButton::clicked, this, &SaveItemsDialog::discardAll); connect(m_treeWidget, &QTreeWidget::itemSelectionChanged, this, &SaveItemsDialog::updateButtons); + + m_buttonBox->button(QDialogButtonBox::Save)->setDefault(true); } void SaveItemsDialog::setMessage(const QString &msg) From 6bef53a81882b61308e987569f3254e8a4aa4775 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 6 Dec 2022 15:31:46 +0100 Subject: [PATCH 08/22] PE: Add ability to skip vcvarsall.bat /clean_env By defining QTC_NO_MSVC_CLEAN_ENV one can skip the vcvarsall.bat / clean_env functionality. Task-number: QTCREATORBUG-28561 Change-Id: I6392b2278008607042a43a38a2c38669b4b52183 Reviewed-by: Reviewed-by: David Schulz --- src/plugins/projectexplorer/msvctoolchain.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 8a598c2624a..468c408adf5 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -2098,7 +2098,9 @@ std::optional MsvcToolChain::generateEnvironmentSettings(const Utils::E saver.write("set CLINK_NOAUTORUN=1\r\n"); saver.write("setlocal enableextensions\r\n"); saver.write("if defined VCINSTALLDIR (\r\n"); - saver.write(" call \"%VCINSTALLDIR%/Auxiliary/Build/vcvarsall.bat\" /clean_env\r\n"); + saver.write(" if not defined QTC_NO_MSVC_CLEAN_ENV (\r\n"); + saver.write(" call \"%VCINSTALLDIR%/Auxiliary/Build/vcvarsall.bat\" /clean_env\r\n"); + saver.write(" )\r\n"); saver.write(")\r\n"); saver.write(call + "\r\n"); saver.write("@echo " + marker.toLocal8Bit() + "\r\n"); From b0e694349143bb88047755a94e808a33725f92ee Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 7 Dec 2022 16:55:38 +0100 Subject: [PATCH 09/22] TextEditorWidget: Ensure non-null source is passed to insertFromMimeData Detected by clazy analyzer. The possible context was TextEditorWidget::dropEvent(). In some branches we ensure that mime is not null, but later we call insertFromMimeData() unconditionally. Change-Id: Iee5138bc19d405050eafc9617d3c2ed123b767c7 Reviewed-by: Reviewed-by: David Schulz --- src/plugins/texteditor/texteditor.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 3594493013b..303c5884667 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -7847,7 +7847,7 @@ struct MappedText void TextEditorWidget::insertFromMimeData(const QMimeData *source) { - if (isReadOnly()) + if (!source || isReadOnly()) return; QString text = source->text(); @@ -7857,7 +7857,6 @@ void TextEditorWidget::insertFromMimeData(const QMimeData *source) if (d->m_codeAssistant.hasContext()) d->m_codeAssistant.destroyContext(); - if (d->m_snippetOverlay->isVisible() && (text.contains('\n') || text.contains('\t'))) d->m_snippetOverlay->accept(); From 154e3df17e4f417c728dd96cf8a569e1fbe63553 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 7 Dec 2022 17:15:10 +0100 Subject: [PATCH 10/22] CppQuickFixes: Fix possible null dereference It may happen that we dereference null inside the following condition: if (declarator->postfix_declarator_list) This may happen in case we entered the "if (!declarator)" condition, but didn't fulfill the nested "if (path.at(n - i++)->asPointer())" condition. Detected by clazy analyzer. Change-Id: I47135bc5648459e91664a4f65f9752b58248a496 Reviewed-by: David Schulz Reviewed-by: --- src/plugins/cppeditor/cppquickfixes.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index 0c33c377332..6392917b6c2 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -4310,6 +4310,8 @@ void GenerateGetterSetter::match(const CppQuickFixInterface &interface, QuickFix return; declarator = path.at(n - i++)->asDeclarator(); } + if (!declarator) + return; } const auto variableDecl = path.at(n - i++)->asSimpleDeclaration(); const auto classSpecifier = path.at(n - i++)->asClassSpecifier(); From 6a7f5be0eae128eaa16c4459b81cda0302957e85 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 7 Dec 2022 18:18:48 +0100 Subject: [PATCH 11/22] PluginGenerator: Fix returning the error message I bet the original intention was to return a new message, so we should assing a new value into the passed pointer rather than change the local copy of a pointer so that it start pointing to the local variable. Amends aaa8beab88dddd7218f6d3c30fb29c04679e2098 Change-Id: I1fdc8f3f4ea43e4814f02dbf615ad128bfc9a059 Reviewed-by: Christian Kandeler --- .../customwidgetwizard/plugingenerator.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.cpp b/src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.cpp index c3475fd1334..4795c77509f 100644 --- a/src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.cpp +++ b/src/plugins/qmakeprojectmanager/customwidgetwizard/plugingenerator.cpp @@ -295,20 +295,17 @@ QString PluginGenerator::processTemplate(const QString &tmpl, { Utils::FileReader reader; if (!reader.fetch(Utils::FilePath::fromString(tmpl), errorMessage)) - return QString(); - + return {}; QString cont = QString::fromUtf8(reader.data()); // Expander needed to handle extra variable "Cpp:PragmaOnce" Utils::MacroExpander *expander = Utils::globalMacroExpander(); - QString errMsg; - cont = Utils::TemplateEngine::processText(expander, cont, &errMsg); - if (!errMsg.isEmpty()) { + cont = Utils::TemplateEngine::processText(expander, cont, errorMessage); + if (!errorMessage->isEmpty()) { qWarning("Error processing custom plugin file: %s\nFile:\n%s", - qPrintable(errMsg), qPrintable(cont)); - errorMessage = &errMsg; - return QString(); + qPrintable(*errorMessage), qPrintable(cont)); + return {}; } const QChar atChar = QLatin1Char('@'); From 823eafcda9e469b325d095c0a55efc76c3dfe949 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 8 Dec 2022 15:52:00 +0100 Subject: [PATCH 12/22] Add change log for 9.0.1 And move change log for 8.0.2 to the right location Change-Id: I135018524eccb3601d6371558c07a8a07d963c94 Reviewed-by: Leena Miettinen --- dist/{ => changelog}/changes-8.0.2.md | 0 dist/changelog/changes-9.0.1.md | 99 +++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) rename dist/{ => changelog}/changes-8.0.2.md (100%) create mode 100644 dist/changelog/changes-9.0.1.md diff --git a/dist/changes-8.0.2.md b/dist/changelog/changes-8.0.2.md similarity index 100% rename from dist/changes-8.0.2.md rename to dist/changelog/changes-8.0.2.md diff --git a/dist/changelog/changes-9.0.1.md b/dist/changelog/changes-9.0.1.md new file mode 100644 index 00000000000..09feba57648 --- /dev/null +++ b/dist/changelog/changes-9.0.1.md @@ -0,0 +1,99 @@ +Qt Creator 9.0.1 +================ + +Qt Creator version 9.0.1 contains bug fixes. + +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://code.qt.io/qt-creator/qt-creator.git + git log --cherry-pick --pretty=oneline origin/v9.0.0..v9.0.1 + +General +------- + +* Improved performance in the context of file path handling +* Fixed missing `No updates found.` message after looking for updates +* Fixed loading of custom external tools definitions + +Editing +------- + +* Fixed double `*` sign at end of long document names in dropdown + +### C++ + +* Fixed jumping to wrong symbol with `Follow Symbol` (QTCREATORBUG-28452) +* Fixed display of tab size in code style settings (QTCREATORBUG-28450) +* Fixed crash after closing settings when opened from indexing progress + (QTCREATORBUG-28566) +* Fixed crash when opening type hierarchy (QTCREATORBUG-28529) + +Projects +-------- + +### CMake + +* Fixed that build environment was not migrated to the new configuration + environment (QTCREATORBUG-28372) +* Fixed handling of `inherits` for deeper hierarchies (QTCREATORBUG-28498) + +Debugging +--------- + +* Fixed handling of macros in source path mapping (QTCREATORBUG-28484) + +### GDB + +* Fixed pretty printer of `std::string` from `libc++` (QTCREATORBUG-28511) + +### CDB + +* Fixed source path mapping (QTCREATORBUG-28521) + +Analyzer +-------- + +### Clang + +* Fixed crash when clearing selection in settings (QTCREATORBUG-28524) + +Test Integration +---------------- + +### Google Test + +* Fixed debugging (QTCREATORBUG-28504) + +Platforms +--------- + +### Linux + +* Fixed wrong colors with GTK3 platform theme (QTCREATORBUG-28497) + +### Docker + +* Fixed that working directory for remote processes was not made reachable + +Credits for these changes go to: +-------------------------------- +Alessandro Portale +André Pönitz +Artem Sokolovskii +Christian Kandeler +Christian Stenger +Cristian Adam +David Schulz +Eike Ziller +Jaroslaw Kobus +Kai Köhne +Kwangsub Kim +Leena Miettinen +Marcus Tillmanns +Orgad Shaneh +Riitta-Leena Miettinen +Thomas Hartmann +Tim Jenssen +Ulf Hermann From 69abc39aead7414fc20f55680de0a88ae4b846ea Mon Sep 17 00:00:00 2001 From: Artem Sokolovskii Date: Thu, 8 Dec 2022 14:15:23 +0100 Subject: [PATCH 13/22] CodeStyle: Fix save settings without applying Change-Id: Iebe4c4fb6f3279592e7933981aba69087db558f9 Reviewed-by: Christian Kandeler --- .../cppeditor/cppcodestylesettingspage.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/plugins/cppeditor/cppcodestylesettingspage.cpp b/src/plugins/cppeditor/cppcodestylesettingspage.cpp index 6493c13589f..67a785809d5 100644 --- a/src/plugins/cppeditor/cppcodestylesettingspage.cpp +++ b/src/plugins/cppeditor/cppcodestylesettingspage.cpp @@ -253,11 +253,6 @@ void CppCodeStylePreferencesWidget::slotCodeStyleSettingsChanged() if (m_blockUpdates) return; - if (m_preferences) { - auto current = qobject_cast(m_preferences->currentPreferences()); - if (current) - current->setCodeStyleSettings(cppCodeStyleSettings()); - } emit codeStyleSettingsChanged(cppCodeStyleSettings()); updatePreview(); } @@ -267,12 +262,6 @@ void CppCodeStylePreferencesWidget::slotTabSettingsChanged(const TabSettings &se if (m_blockUpdates) return; - if (m_preferences) { - auto current = qobject_cast(m_preferences->currentPreferences()); - if (current) - current->setTabSettings(settings); - } - emit tabSettingsChanged(settings); updatePreview(); } @@ -355,6 +344,14 @@ void CppCodeStylePreferencesWidget::addTab(CppCodeStyleWidget *page, QString tab void CppCodeStylePreferencesWidget::apply() { + if (m_preferences) { + auto current = qobject_cast(m_preferences->currentPreferences()); + if (current) { + current->setTabSettings(tabSettings()); + current->setCodeStyleSettings(cppCodeStyleSettings()); + } + } + emit applyEmitted(); } From 2596f39823737081de445248316f7c1161994427 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 9 Dec 2022 12:11:10 +0100 Subject: [PATCH 14/22] VcsBase: Fix connection in revertAll() The original intention was to connect to done signal of the executed command. Change-Id: I35e1f931a54bf763c3d9ffc71237b1d96cda1343 Reviewed-by: Orgad Shaneh --- src/plugins/vcsbase/vcsbaseclient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/vcsbase/vcsbaseclient.cpp b/src/plugins/vcsbase/vcsbaseclient.cpp index 0ba1497cf1e..7513c02e47d 100644 --- a/src/plugins/vcsbase/vcsbaseclient.cpp +++ b/src/plugins/vcsbase/vcsbaseclient.cpp @@ -437,7 +437,7 @@ void VcsBaseClient::revertAll(const FilePath &workingDir, if (cmd->result() == ProcessResult::FinishedWithSuccess) emit changed(files); }, Qt::QueuedConnection); - enqueueJob(createCommand(workingDir), args); + enqueueJob(cmd, args); } void VcsBaseClient::status(const FilePath &workingDir, From 218b19fe140a450eb036a720362145898583d6ca Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 9 Dec 2022 15:19:59 +0100 Subject: [PATCH 15/22] SshProcessInterface: Limit waiting for kill to finish This is just a workaround for 9.0 and not a proper fix! It looks like sometimes kill command may freeze. Don't blocking wait for it for 30 seconds - limit this time to 2 seconds. Do the same inside SimpleTargetRunner. Pretend the process finished after 2 seconds, otherwise the SimpleTargetRunner object gets leaked and we start receiving asserts from ProcessLauncher about destructing it when still some processes are being run. Task-number: QTCREATORBUG-28072 Change-Id: I9766e7ff6f0c2abf2010686027702d30d32c4318 Reviewed-by: Eike Ziller Reviewed-by: Qt CI Bot Reviewed-by: hjk --- src/plugins/projectexplorer/runcontrol.cpp | 6 +++++- src/plugins/remotelinux/linuxdevice.cpp | 6 ++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/plugins/projectexplorer/runcontrol.cpp b/src/plugins/projectexplorer/runcontrol.cpp index 0f24f238909..162ce90b45a 100644 --- a/src/plugins/projectexplorer/runcontrol.cpp +++ b/src/plugins/projectexplorer/runcontrol.cpp @@ -1320,7 +1320,11 @@ void SimpleTargetRunnerPrivate::stop() switch (m_state) { case Run: m_process.stop(); - m_process.waitForFinished(); + if (!m_process.waitForFinished(2000)) { // TODO: it may freeze on some devices + QTC_CHECK(false); // Shouldn't happen, just emergency handling + m_process.close(); + forwardDone(); + } break; case Inactive: break; diff --git a/src/plugins/remotelinux/linuxdevice.cpp b/src/plugins/remotelinux/linuxdevice.cpp index 84e0547acb0..9c8a884cc5d 100644 --- a/src/plugins/remotelinux/linuxdevice.cpp +++ b/src/plugins/remotelinux/linuxdevice.cpp @@ -492,8 +492,10 @@ bool SshProcessInterface::runInShell(const CommandLine &command, const QByteArra process.setCommand(cmd); process.setWriteData(data); process.start(); - QTC_CHECK(process.waitForFinished()); // otherwise we may start producing killers for killers - return process.exitCode() == 0; + bool isFinished = process.waitForFinished(2000); // TODO: it may freeze on some devices + // otherwise we may start producing killers for killers + QTC_CHECK(isFinished); + return isFinished; } void SshProcessInterface::start() From 8addb599a91f62036d040ac30368e65915c6077c Mon Sep 17 00:00:00 2001 From: Artem Sokolovskii Date: Mon, 12 Dec 2022 13:44:46 +0100 Subject: [PATCH 16/22] ProjectExplorer: Fix Add button alignment on Compilers tab Fixes: QTCREATORBUG-28367 Change-Id: I468729fc2fd46f7f55081a696ff9d8913f5823d0 Reviewed-by: Eike Ziller --- 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 9f8548aedb0..273f86e59f6 100644 --- a/src/plugins/projectexplorer/toolchainoptionspage.cpp +++ b/src/plugins/projectexplorer/toolchainoptionspage.cpp @@ -192,6 +192,8 @@ public: } } m_addButton->setMenu(addMenu); + if (HostOsInfo::isMacHost()) + m_addButton->setStyleSheet("text-align:center;"); m_cloneButton = new QPushButton(ToolChainOptionsPage::tr("Clone"), this); connect(m_cloneButton, &QAbstractButton::clicked, [this] { cloneToolChain(); }); From 168ff2c68c1aedd814dc3769b1b79cbe3ec6f86d Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 12 Dec 2022 09:52:28 +0100 Subject: [PATCH 17/22] CppTypeHierarchy: Fix showing type hierarchy Don't repeat the main symbol as its child inside derived hierarchy. The regression was introduced when addDerivedHierarchy() was added. Amends e2155a91df81e812c4f086d4558ead70c0ed2551 Change-Id: I34cd19be4307d355ea84fbdb64a06d0d3505e8a9 Reviewed-by: Reviewed-by: Christian Kandeler --- src/plugins/cppeditor/cppelementevaluator.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/plugins/cppeditor/cppelementevaluator.cpp b/src/plugins/cppeditor/cppelementevaluator.cpp index 56677c7b29f..98c31606e5f 100644 --- a/src/plugins/cppeditor/cppelementevaluator.cpp +++ b/src/plugins/cppeditor/cppelementevaluator.cpp @@ -183,11 +183,12 @@ void CppClass::lookupDerived(QFutureInterfaceBase &futureInterface, void CppClass::addDerivedHierarchy(const TypeHierarchy &hierarchy) { - CppClass classSymbol(hierarchy.symbol()); const QList derivedHierarchies = hierarchy.hierarchy(); - for (const TypeHierarchy &derivedHierarchy : derivedHierarchies) + for (const TypeHierarchy &derivedHierarchy : derivedHierarchies) { + CppClass classSymbol(derivedHierarchy.symbol()); classSymbol.addDerivedHierarchy(derivedHierarchy); - derived.append(classSymbol); + derived.append(classSymbol); + } } class CppFunction : public CppDeclarableElement From c8aca8a3abe33dd4e39e1a371b337b76866b91ad Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 9 Dec 2022 14:59:23 +0100 Subject: [PATCH 18/22] Beautifier/ClangFormat: Fix style check box states Broke when inlining the .ui file. Because the two checkboxes no longer have the same direct parent, "autoExclusive" does not work, and it needs an explicit button group. Amends 4933697d9a5b38299340e265d2f4e6c78dd1604a Fixes: QTCREATORBUG-28525 Change-Id: Ia6af5f6083975faa5a65cdc9dd0bd2b671af147b Reviewed-by: Reviewed-by: hjk --- .../beautifier/clangformat/clangformatoptionspage.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/plugins/beautifier/clangformat/clangformatoptionspage.cpp b/src/plugins/beautifier/clangformat/clangformatoptionspage.cpp index d6244eb466d..1e6a9f5c14a 100644 --- a/src/plugins/beautifier/clangformat/clangformatoptionspage.cpp +++ b/src/plugins/beautifier/clangformat/clangformatoptionspage.cpp @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -47,8 +48,10 @@ ClangFormatOptionsPageWidget::ClangFormatOptionsPageWidget(ClangFormatSettings * auto options = new QGroupBox(tr("Options")); options->setEnabled(false); + auto styleButtonGroup = new QButtonGroup(this); + auto useCustomizedStyle = new QRadioButton(tr("Use customized style:")); - useCustomizedStyle->setAutoExclusive(true); + styleButtonGroup->addButton(useCustomizedStyle); m_configurations = new ConfigurationPanel; m_configurations->setSettings(m_settings); @@ -57,7 +60,7 @@ ClangFormatOptionsPageWidget::ClangFormatOptionsPageWidget(ClangFormatSettings * m_usePredefinedStyle = new QRadioButton(tr("Use predefined style:")); m_usePredefinedStyle->setChecked(true); - m_usePredefinedStyle->setAutoExclusive(true); + styleButtonGroup->addButton(m_usePredefinedStyle); m_predefinedStyle = new QComboBox; m_predefinedStyle->addItems(m_settings->predefinedStyles()); From 938231cf0d94f6ff3e3e5ad86ef1f962969d38ce Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 13 Dec 2022 10:40:52 +0100 Subject: [PATCH 19/22] More change log for 9.0.1 Change-Id: I2bf9cc9f0cb47b3bdda05a9905e563f70ff6d75e Reviewed-by: Leena Miettinen --- dist/changelog/changes-9.0.1.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dist/changelog/changes-9.0.1.md b/dist/changelog/changes-9.0.1.md index 09feba57648..9436a7cead9 100644 --- a/dist/changelog/changes-9.0.1.md +++ b/dist/changelog/changes-9.0.1.md @@ -29,6 +29,8 @@ Editing * Fixed crash after closing settings when opened from indexing progress (QTCREATORBUG-28566) * Fixed crash when opening type hierarchy (QTCREATORBUG-28529) +* Fixed code style settings being saved even when canceling +* Fixed checkbox state in Beautifier settings (QTCREATORBUG-28525) Projects -------- From 75177f4c342220e0c0dbb3f73a261d8e1fac12a6 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 15 Nov 2022 09:49:39 +0100 Subject: [PATCH 20/22] SquishTests: Expect some more error message MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I33f359673e6d23f0188072db891db08dafa72ace Reviewed-by: Robert Löhning --- tests/system/suite_editors/tst_memberoperator/test.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/system/suite_editors/tst_memberoperator/test.py b/tests/system/suite_editors/tst_memberoperator/test.py index 18d5547f324..2e9980bf2b4 100644 --- a/tests/system/suite_editors/tst_memberoperator/test.py +++ b/tests/system/suite_editors/tst_memberoperator/test.py @@ -31,6 +31,8 @@ def __syntaxErrorDetected__(): "Expected ';' at end of declaration (fix available)", "Use of undeclared identifier 'syntaxError'"]: return True + if re.match(issue[3], "Declaration of reference variable '.+' requires an initializer"): + return True return False From e0b1f694e35d24ff4cc2741f1df0e7158790b3c3 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 13 Dec 2022 11:57:05 +0100 Subject: [PATCH 21/22] Editor: Fix deleting with numblock delete in multi text cursor Fixes: QTCREATORBUG-28584 Change-Id: Ib65a933b61536d9a6342e82c51779c2a91983ec8 Reviewed-by: Christian Stenger --- src/plugins/texteditor/texteditor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 303c5884667..285a13a588a 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -2695,7 +2695,8 @@ void TextEditorWidget::keyPressEvent(QKeyEvent *e) } break; case Qt::Key_Delete: - if (hasMultipleCursors && !ro && e->modifiers() == Qt::NoModifier) { + if (hasMultipleCursors && !ro + && (e->modifiers() == Qt::NoModifier || e->modifiers() == Qt::KeypadModifier)) { if (cursor.hasSelection()) { cursor.removeSelectedText(); } else { From 5cb1a29af25d9323668df4d383ae57ba93fb5354 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 12 Dec 2022 11:39:39 +0100 Subject: [PATCH 22/22] German translation: Some cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make some things more consistent: - Systemumgebung löschen -> bereinigen - Mitglied -> Member - gegenwärtig -> aktuell (or gerade) - Alles auf/einklappen -> Alle auf/einklappen - Tool-Tip -> Tooltip - some spezifisch -> abhängig - fix "_Run_ Without Deployment" to be a verb - make translation for "No updates found" shorter, because it appears in the status bar Change-Id: Ieb7b56f03883eb5c18d7de79e997b24a17c56001 Reviewed-by: Robert Löhning Reviewed-by: --- share/qtcreator/translations/qtcreator_de.ts | 60 ++++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 790c66800c7..eeb1f1091f4 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -212,7 +212,7 @@ Clear system environment - Systemumgebung löschen + Systemumgebung bereinigen Help @@ -2700,11 +2700,11 @@ Trotzdem fortfahren? Sort Members of Classes and Structs Alphabetically - Mitglieder von Klassen und Strukturen alphabetisch sortieren + Member von Klassen und Strukturen alphabetisch sortieren Sort members of classes and structs alphabetically - Mitglieder von Klassen und Strukturen alphabetisch sortieren + Member von Klassen und Strukturen alphabetisch sortieren Use Debugging Helpers @@ -5435,7 +5435,7 @@ Bitte wählen Sie einen 64-bit-Debugger in den Kit-Einstellungen für dieses Kit Debugging complex command lines is currently not supported on Windows. - Komplexe Kommandozeilen werden beim Debuggen unter Windows gegenwärtig nicht unterstützt. + Komplexe Kommandozeilen werden beim Debuggen unter Windows aktuell nicht unterstützt. Not enough free ports for QML debugging. @@ -6013,7 +6013,7 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl A debugging session is still in progress. Terminating the session in the current state can leave the target in an inconsistent state. Would you still like to terminate it? - Der Debugger läuft noch. Das Beenden im gegenwärtigen Zustand könnte zu einem inkonsistenten Zustand des untersuchten Prozesses führen. Möchten Sie ihn trotzdem beenden? + Der Debugger läuft noch. Das Beenden im aktuellen Zustand könnte zu einem inkonsistenten Zustand des untersuchten Prozesses führen. Möchten Sie ihn trotzdem beenden? Debugged executable @@ -8835,11 +8835,11 @@ Leer lassen, um das Dateisystem zu durchsuchen. Saves the current state of your work and resets the repository. - Speichert den gegenwärtigen Stand der Arbeit und setzt das Repository zurück. + Speichert den aktuellen Stand der Arbeit und setzt das Repository zurück. Saves the current state of your unstaged files and resets the repository to its staged state. - Speichert den gegenwärtigen Stand der nicht bereitgestellten Dateien und setzt das Repository auf den bereitgestellten Zustand zurück. + Speichert den aktuellen Stand der nicht bereitgestellten Dateien und setzt das Repository auf den bereitgestellten Zustand zurück. Take Snapshot... @@ -8847,7 +8847,7 @@ Leer lassen, um das Dateisystem zu durchsuchen. Saves the current state of your work. - Sichert den gegenwärtigen Arbeitsstand. + Sichert den aktuellen Arbeitsstand. Restores changes saved to the stash list using "Stash". @@ -10497,7 +10497,7 @@ Außer: %2 The build configuration <b>%1</b> is currently being built. - Die Build-Konfiguration <b>%1</b> wird gegenwärtig erstellt. + Die Build-Konfiguration <b>%1</b> wird gerade erstellt. Do you want to cancel the build process and remove the Build Configuration anyway? @@ -10855,7 +10855,7 @@ konnte dem Projekt "%2" nicht hinzugefügt werden. The deploy configuration <b>%1</b> is currently being built. - Die Deployment-Konfiguration <b>%1</b> wird gegenwärtig ausgeführt. + Die Deployment-Konfiguration <b>%1</b> wird gerade erstellt. Do you want to cancel the build process and remove the Deploy Configuration anyway? @@ -10992,7 +10992,7 @@ konnte dem Projekt "%2" nicht hinzugefügt werden. Run Without Deployment - Ausführung ohne Deployment + Ausführen ohne Deployment Cancel Build @@ -11548,7 +11548,7 @@ Bitte versuchen Sie es erneut. Expand All - Alles aufklappen + Alle aufklappen Quick Switch Kit Selector @@ -13755,7 +13755,7 @@ Was möchten Sie tun? Name of current build - Name der gegenwärtigen Build-Konfiguration + Name der aktuellen Build-Konfiguration Main file of current project @@ -13783,7 +13783,7 @@ Was möchten Sie tun? Type of current build - Typ der gegenwärtigen Build-Konfiguration + Typ der aktuellen Build-Konfiguration Type of the project's active build configuration @@ -14110,7 +14110,7 @@ Locked components cannot be modified or selected. Expand All - Alles aufklappen + Alle aufklappen Collapse All @@ -14355,7 +14355,7 @@ Locked components cannot be modified or selected. The following ABIs are currently not supported: %1 - Die folgenden ABIs werden gegenwärtig nicht unterstützt: %1 + Die folgenden ABIs werden aktuell nicht unterstützt: %1 Select a qmake Executable @@ -14475,7 +14475,7 @@ Locked components cannot be modified or selected. <p>The project you are about to open is located in the write-protected location:</p><blockquote>%1</blockquote><p>Please select a writable location below and click "Copy Project and Open" to open a modifiable copy of the project or click "Keep Project and Open" to open the project in location.</p><p><b>Note:</b> You will not be able to alter or compile your project in the current location.</p> - <p>Das zu öffnende Projekt befindet sich in einem schreibgeschützten Verzeichnis:</p><blockquote>%1</blockquote><p>Bitte geben Sie ein schreibbares Verzeichnis an und wählen dann "Kopieren und öffne Projekt", um eine modifizierbare Kopie des Projektes erhalten, oder "Öffne Projekt hier", um das Projekt im gegenwärtigen Verzeichnis zu öffnen</p><p><b>Hinweis:</b> Im gegenwärtigen.Verzeichnis kann das Projekt weder compiliert noch modifiziert werden.</p> + <p>Das zu öffnende Projekt befindet sich in einem schreibgeschützten Verzeichnis:</p><blockquote>%1</blockquote><p>Bitte geben Sie ein schreibbares Verzeichnis an und wählen dann "Kopieren und öffne Projekt", um eine modifizierbare Kopie des Projektes erhalten, oder "Öffne Projekt hier", um das Projekt im aktuellen Verzeichnis zu öffnen</p><p><b>Hinweis:</b> Im aktuellen Verzeichnis kann das Projekt weder compiliert noch modifiziert werden.</p> &Location: @@ -16678,7 +16678,7 @@ Möchten Sie sie überschreiben? Debugging complex shell commands in a terminal is currently not supported. - Das Debuggen komplexer Shell-Kommandos in einem Terminal wird gegenwärtig nicht unterstützt. + Das Debuggen komplexer Shell-Kommandos in einem Terminal wird aktuell nicht unterstützt. Quoting error in terminal command. @@ -16764,7 +16764,7 @@ konnte nicht unter Versionsverwaltung (%2) gestellt werden CppEditor::Internal::CppOutlineTreeView Expand All - Alles aufklappen + Alle aufklappen Collapse All @@ -21563,7 +21563,7 @@ Außer: %3 No updates found. - Es wurden keine Aktualisierungen gefunden. + Keine Aktualisierungen gefunden. Could not determine location of maintenance tool. Please check your installation if you did not enable this plugin manually. @@ -22675,7 +22675,7 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält. Pressing Alt displays context-sensitive help or type information as tooltips. - Drücken Sie die Alt-Taste um kontextabhängige Hilfe oder Typinformation als Tool-Tip anzuzeigen. + Drücken Sie die Alt-Taste um kontextabhängige Hilfe oder Typinformation als Tooltip anzuzeigen. Using Select Block Up / Down actions will now provide smarter selections. @@ -25135,7 +25135,7 @@ the manifest file by overriding your settings. Allow override? Scan only the currently edited document - Nur im gegenwärtig bearbeiteten Dokument suchen + Nur im aktuell bearbeiteten Dokument suchen Scan the current subproject @@ -25163,7 +25163,7 @@ the manifest file by overriding your settings. Allow override? Scan only the currently edited document. - Nur im gegenwärtig bearbeiteten Dokument suchen. + Nur im aktuell bearbeiteten Dokument suchen. Active Project @@ -25359,7 +25359,7 @@ the manifest file by overriding your settings. Allow override? Type Specific - typspezifisch + Typabhängig &Add... @@ -37198,11 +37198,11 @@ Warnung: Dies ist eine experimentelle Funktion und könnte dazu führen, dass di Expand All - Alles aufklappen + Alle aufklappen Collapse All - Alles einklappen + Alle einklappen Sort Alphabetically @@ -41490,7 +41490,7 @@ Wird benutzt um die Funktion zu markieren, die ein gesuchtes Symbol benutzt. Class' data members. - Mitgliedsvariablen von Klassen. + Membervariablen einer Klasse. Global @@ -48329,7 +48329,7 @@ Useful if build directory is corrupted or when rebuilding with a newer version o Clear system environment - Systemumgebung löschen + Systemumgebung bereinigen @@ -53840,7 +53840,7 @@ Use drag and drop to change the order of the parameters. Expand All - Alles aufklappen + Alle aufklappen Collapse All @@ -55510,7 +55510,7 @@ Hinweis: Dies macht Sie anfällig für Man-in-the-middle-Angriffe. Use context-specific margin - Kontextspezifischen Rand verwenden + Kontextabhängigen Rand verwenden If available, use a different margin. For example, the ColumnLimit from the ClangFormat plugin.