From 828f78ccd3cccb0eebe1da183a543cf3c716ba6c Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 13 Dec 2023 17:48:48 +0100 Subject: [PATCH 01/41] KillAppStep: Always finish the step with success Fixes: QTCREATORBUG-30024 Change-Id: I7f2f3167bd3620a5a313fe6359c4ee58ff0d9e03 Reviewed-by: Christian Kandeler --- src/plugins/remotelinux/killappstep.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/remotelinux/killappstep.cpp b/src/plugins/remotelinux/killappstep.cpp index b70e597fb84..80c86584200 100644 --- a/src/plugins/remotelinux/killappstep.cpp +++ b/src/plugins/remotelinux/killappstep.cpp @@ -58,7 +58,11 @@ GroupItem KillAppStep::deployRecipe() addProgressMessage(Tr::tr("Failed to kill remote application. " "Assuming it was not running.")); }; - return DeviceProcessKillerTask(setupHandler, doneHandler, errorHandler); + const Group root { + finishAllAndDone, + DeviceProcessKillerTask(setupHandler, doneHandler, errorHandler) + }; + return root; } KillAppStepFactory::KillAppStepFactory() From d24e5752782c037bb17090afd43c9b63fba1bc29 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 13 Dec 2023 10:10:15 +0100 Subject: [PATCH 02/41] LanguageClient: fix crash in completion assist Check m_processor again after starting. There is a callback resetting the processor and we cannot ensure that starting the processor does not result in calling this callback. Change-Id: I4dca31399fb5224234c81df36edcb7b75d9ceaef Reviewed-by: hjk Reviewed-by: Eike Ziller --- src/plugins/languageclient/languageclientcompletionassist.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp index 96aebde7850..56ac11bdede 100644 --- a/src/plugins/languageclient/languageclientcompletionassist.cpp +++ b/src/plugins/languageclient/languageclientcompletionassist.cpp @@ -317,7 +317,7 @@ public: }); setProposal(m_processor->start(std::move(interface)), prefix); - if (!m_processor->running()) { + if (m_processor && !m_processor->running()) { delete m_processor; m_processor = nullptr; } From 309d238f7ba4939c2e9ab1d7220355d3d0bcf927 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 15 Dec 2023 08:11:22 +0100 Subject: [PATCH 03/41] FakeVim: Persist fakevim settings when enabling globally Explicitly persist settings if enable FakeVim mode gets triggered using the global shortcuts, otherwise we would enable the FakeVim mode only temporarily and a restart of Qt Creator would use the former mode again. Fixes: QTCREATORBUG-29949 Change-Id: I457b32f8e5fe035e334ed51f358f374c85ab010b Reviewed-by: hjk --- src/plugins/fakevim/fakevimplugin.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp index f14cbbb2027..8cb623c0879 100644 --- a/src/plugins/fakevim/fakevimplugin.cpp +++ b/src/plugins/fakevim/fakevimplugin.cpp @@ -1048,6 +1048,7 @@ void FakeVimPluginPrivate::initialize() INSTALL_HANDLER, Context(Core::Constants::C_GLOBAL), true); cmd->setDefaultKeySequence(QKeySequence(useMacShortcuts ? Tr::tr("Meta+Shift+Y,Meta+Shift+Y") : Tr::tr("Alt+Y,Alt+Y"))); + connect(cmd->action(), &QAction::triggered, [this] { settings().writeSettings(); }); ActionContainer *advancedMenu = ActionManager::actionContainer(Core::Constants::M_EDIT_ADVANCED); From 859dd3a4140eabaebf3f63e293526b0cb294bd9b Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 18 Dec 2023 08:01:02 +0100 Subject: [PATCH 04/41] Doc: Fix supported macOS platform Qt 6.6 only supports macOS 11.0 or later Fixes: QTCREATORBUG-30084 Change-Id: Ic7e83633b8b3e47602d75c65657db88e9381c874 Reviewed-by: Leena Miettinen --- README.md | 2 +- .../src/overview/creator-only/creator-desktop-platforms.qdoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 70500da736d..6fc7918fd14 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ The standalone binary packages support the following platforms: * Windows 10 (64-bit) or later * (K)Ubuntu Linux 20.04 (64-bit) or later -* macOS 10.15 or later +* macOS 11 or later ## Contributing diff --git a/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc b/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc index 8e1722f59d0..9626d41f837 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc @@ -51,7 +51,7 @@ \section1 macOS - \macos 10.15 or later is supported with the Xcode tools for your \macos + \macos 11.0 or later is supported with the Xcode tools for your \macos version available in the Mac App Store. \section1 Windows From d27e905585623c73f1b4d6431b75d9d15ad76e54 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 18 Dec 2023 08:00:24 +0100 Subject: [PATCH 05/41] GitHub: Fix macOS deployment target Qt 6.6 only supports 11.0 or later Change-Id: I8d429bef61c75179a2b1ecefdb8b7de3c21e11a9 Reviewed-by: Cristian Adam Reviewed-by: --- .github/workflows/build_cmake.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_cmake.yml b/.github/workflows/build_cmake.yml index d866f1f6d70..c32b57e4c3c 100644 --- a/.github/workflows/build_cmake.yml +++ b/.github/workflows/build_cmake.yml @@ -8,7 +8,7 @@ on: env: QT_VERSION: 6.6.0 - MACOS_DEPLOYMENT_TARGET: 10.15 + MACOS_DEPLOYMENT_TARGET: 11.0 CLANG_VERSION: 17.0.1 ELFUTILS_VERSION: 0.175 CMAKE_VERSION: 3.21.1 From 38d185e363c19d2d24215c072bc22574a1f6a4cc Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 18 Dec 2023 13:49:56 +0100 Subject: [PATCH 06/41] tests/unit/tests/mocks/sqlitereadstatementmock.h: Fix warning sqlitereadstatementmock.h:267:25: note: default constructor of 'SqliteReadStatementMockBase' is implicitly deleted because field 'databaseMock' of reference type 'SqliteDatabaseMock &' would not be initialized SqliteDatabaseMock &databaseMock; ^ sqlitereadstatementmock.h:31:37: note: replace 'default' with 'delete' SqliteReadStatementMockBase() = default; ^~~~~~~ delete 1 warning generated. Change-Id: Ia0f9a3f2e692585f509048d35fb01b380e2af035 Reviewed-by: Eike Ziller --- tests/unit/tests/mocks/sqlitereadstatementmock.h | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/unit/tests/mocks/sqlitereadstatementmock.h b/tests/unit/tests/mocks/sqlitereadstatementmock.h index 615e3d23b14..ed23409b97d 100644 --- a/tests/unit/tests/mocks/sqlitereadstatementmock.h +++ b/tests/unit/tests/mocks/sqlitereadstatementmock.h @@ -28,7 +28,6 @@ class SqliteDatabaseMock; class SqliteReadStatementMockBase { public: - SqliteReadStatementMockBase() = default; SqliteReadStatementMockBase(Utils::SmallStringView sqlStatement, SqliteDatabaseMock &databaseMock); MOCK_METHOD(std::vector, valuesReturnStringVector, (std::size_t), ()); From 2632f991236663b281dccd43a2ccc47436677198 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 18 Dec 2023 13:38:00 +0100 Subject: [PATCH 07/41] Tracing: Fix compile error ff7d69daf in Qt base added a static assert. In file included from /data/dev/creator/src/libs/tracing/timelinetracemanager.cpp:6: In file included from /data/dev/creator/src/libs/tracing/timelinetracemanager.h:8: /data/dev/creator/src/libs/tracing/traceeventtype.h:45:1: error: static assertion failed due to requirement '!isRelocatable || std::is_copy_constructible_v || std::is_move_constructible_v': Timeline::TraceEventType is neither copy- nor move-constructible, so cannot be Q_RELOCATABLE_TYPE Q_DECLARE_TYPEINFO(Timeline::TraceEventType, Q_MOVABLE_TYPE); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /data/dev/qt-6/qtbase/include/QtCore/../../src/corelib/global/qtypeinfo.h:173:12: note: expanded from macro 'Q_DECLARE_TYPEINFO' template<> \ ^ /data/dev/qt-6/qtbase/include/QtCore/../../src/corelib/global/qtypeinfo.h:166:5: note: expanded from macro '\ Q_DECLARE_TYPEINFO_BODY' static_assert(!isRelocatable || \ ^ ~~~~~~~~~~~~~~~~~~~ /data/dev/creator/src/libs/tracing/traceeventtype.h:45:1: note: expression evaluates to 'false || false' Q_DECLARE_TYPEINFO(Timeline::TraceEventType, Q_MOVABLE_TYPE); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /data/dev/qt-6/qtbase/include/QtCore/../../src/corelib/global/qtypeinfo.h:173:12: note: expanded from macro 'Q_DECLARE_TYPEINFO' template<> \ ^ /data/dev/qt-6/qtbase/include/QtCore/../../src/corelib/global/qtypeinfo.h:167:55: note: expanded from macro '\ Q_DECLARE_TYPEINFO_BODY' std::is_copy_constructible_v || \ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~ 1 error generated. Change-Id: I68c963f6b2856e9aca3e8be65ac177456a02a875 Reviewed-by: Ulf Hermann --- src/libs/tracing/traceevent.h | 10 +++++----- src/libs/tracing/traceeventtype.h | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/libs/tracing/traceevent.h b/src/libs/tracing/traceevent.h index d9de9641797..99a17814a85 100644 --- a/src/libs/tracing/traceevent.h +++ b/src/libs/tracing/traceevent.h @@ -14,6 +14,11 @@ namespace Timeline { class TraceEvent : public SafeCastable { public: + TraceEvent(const TraceEvent &) = default; + TraceEvent(TraceEvent &&) = default; + TraceEvent &operator=(const TraceEvent &) = default; + TraceEvent &operator=(TraceEvent &&) = default; + qint64 timestamp() const { return m_timestamp; } void setTimestamp(qint64 timestamp) { m_timestamp = timestamp; } @@ -29,11 +34,6 @@ protected: : m_timestamp(timestamp), m_typeIndex(typeIndex), m_classId(classId) {} - TraceEvent(const TraceEvent &) = default; - TraceEvent(TraceEvent &&) = default; - TraceEvent &operator=(const TraceEvent &) = default; - TraceEvent &operator=(TraceEvent &&) = default; - private: qint64 m_timestamp; qint32 m_typeIndex; diff --git a/src/libs/tracing/traceeventtype.h b/src/libs/tracing/traceeventtype.h index 1a2be2694b8..fd87ba141a4 100644 --- a/src/libs/tracing/traceeventtype.h +++ b/src/libs/tracing/traceeventtype.h @@ -15,6 +15,11 @@ namespace Timeline { class TraceEventType : public SafeCastable { public: + TraceEventType(const TraceEventType &) = default; + TraceEventType(TraceEventType &&) = default; + TraceEventType &operator=(const TraceEventType &) = default; + TraceEventType &operator=(TraceEventType &&) = default; + const QString &displayName() const { return m_displayName; } void setDisplayName(const QString &displayName) { m_displayName = displayName; } @@ -28,11 +33,6 @@ protected: : m_displayName(displayName), m_classId(classId), m_feature(feature) {} - TraceEventType(const TraceEventType &) = default; - TraceEventType(TraceEventType &&) = default; - TraceEventType &operator=(const TraceEventType &) = default; - TraceEventType &operator=(TraceEventType &&) = default; - private: QString m_displayName; qint32 m_classId; From 92d1938ab42572b3f75782e4a183392abb0b7fc8 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 18 Dec 2023 17:39:19 +0100 Subject: [PATCH 08/41] Bump version to 12.0.2 Change-Id: Ia7514eccbb61380a502049cfa9f536981c0cac1f Reviewed-by: Eike Ziller --- cmake/QtCreatorIDEBranding.cmake | 4 ++-- qbs/modules/qtc/qtc.qbs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/QtCreatorIDEBranding.cmake b/cmake/QtCreatorIDEBranding.cmake index 33abd0e3f56..17ad5c2acae 100644 --- a/cmake/QtCreatorIDEBranding.cmake +++ b/cmake/QtCreatorIDEBranding.cmake @@ -1,6 +1,6 @@ -set(IDE_VERSION "12.0.1") # The IDE version. +set(IDE_VERSION "12.0.2") # The IDE version. set(IDE_VERSION_COMPAT "12.0.0") # The IDE Compatibility version. -set(IDE_VERSION_DISPLAY "12.0.1") # The IDE display version. +set(IDE_VERSION_DISPLAY "12.0.2") # The IDE display version. set(IDE_COPYRIGHT_YEAR "2023") # The IDE current copyright year. set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation. diff --git a/qbs/modules/qtc/qtc.qbs b/qbs/modules/qtc/qtc.qbs index 6007489259e..79a55ad8456 100644 --- a/qbs/modules/qtc/qtc.qbs +++ b/qbs/modules/qtc/qtc.qbs @@ -7,7 +7,7 @@ Module { property string qtcreator_display_version: '12.0.1' property string ide_version_major: '12' property string ide_version_minor: '0' - 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 From 1c59014d74c3b3347265f0fd44e36f4db9ecc22a Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 19 Dec 2023 12:39:41 +0100 Subject: [PATCH 09/41] PE: Break infinite loop if the location is empty The patch is taken from the bug report. Fixes: QTCREATORBUG-30067 Change-Id: If586c8d86fdd820fbc8ac83710a832a9888ef966 Reviewed-by: David Schulz Reviewed-by: --- src/plugins/projectexplorer/projectnodes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index 11ab5fe0561..41679601543 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -338,7 +338,7 @@ FilePath Node::pathOrDirectory(bool dir) const QTC_CHECK(!location.needsDevice()); QFileInfo fi = location.toFileInfo(); - while ((!fi.exists() || !fi.isDir()) && !fi.isRoot()) + while ((!fi.exists() || !fi.isDir()) && !fi.isRoot() && (fi.fileName() != fi.absolutePath())) fi.setFile(fi.absolutePath()); return FilePath::fromString(fi.absoluteFilePath()); } From 1ce56fe0b48c1162c33525e0104cc26f0cc2943b Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 19 Dec 2023 14:36:24 +0100 Subject: [PATCH 10/41] CMakePM: Fix library search path for special targets names (test) Fixes: QTCREATORBUG-30050 Change-Id: I1f0ad5db048976f347a363f3ed12e7881453930b Reviewed-by: Reviewed-by: Eike Ziller --- src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index 4c93e3150d9..ee2bbcf4a80 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -1623,7 +1623,9 @@ CMakeBuildConfiguration *CMakeBuildSystem::cmakeBuildConfiguration() const static FilePaths librarySearchPaths(const CMakeBuildSystem *bs, const QString &buildKey) { const CMakeBuildTarget cmakeBuildTarget - = Utils::findOrDefault(bs->buildTargets(), Utils::equal(&CMakeBuildTarget::title, buildKey)); + = Utils::findOrDefault(bs->buildTargets(), [buildKey](const auto &target) { + return target.title == buildKey && target.targetType != UtilityType; + }); return cmakeBuildTarget.libraryDirectories; } From 13efeb4c23717e37a14c3074249dc555dc177081 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 19 Dec 2023 19:34:18 +0100 Subject: [PATCH 11/41] CMakePM: Fix "cm" and "cmo" locator filters For "cm" (CMake Build) display all targets, including utility targets like "all", "clean", or "_lupdate" and "_lrelease". For "cmo" (CMake Open) display only the "real" targets, targets that are not utility targets and have a backtrace from CMake File-API. Fixes: QTCREATORBUG-29946 Change-Id: Ica53f4d38bd0c301b6dbfe0754e53c52d1b8d378 Reviewed-by: Eike Ziller Reviewed-by: --- .../cmakelocatorfilter.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp index 8d63ee0fa91..5ca776e99fb 100644 --- a/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakelocatorfilter.cpp @@ -48,10 +48,6 @@ static LocatorMatcherTasks cmakeMatchers(const BuildAcceptor &acceptor) continue; const int index = target.title.indexOf(input, 0, Qt::CaseInsensitive); if (index >= 0) { - const FilePath path = target.backtrace.isEmpty() - ? cmakeProject->projectFilePath() - : target.backtrace.last().path; - const int line = target.backtrace.isEmpty() ? 0 : target.backtrace.last().line; const FilePath projectPath = cmakeProject->projectFilePath(); const QString displayName = target.title; LocatorFilterEntry entry; @@ -62,11 +58,20 @@ static LocatorMatcherTasks cmakeMatchers(const BuildAcceptor &acceptor) return AcceptResult(); }; } - entry.linkForEditor = {path, line}; - entry.extraInfo = path.shortNativePath(); + bool realTarget = false; + if (!target.backtrace.isEmpty() && target.targetType != UtilityType) { + const FilePath path = target.backtrace.last().path; + const int line = target.backtrace.last().line; + entry.linkForEditor = {path, line}; + entry.extraInfo = path.shortNativePath(); + realTarget = true; + } else { + entry.extraInfo = projectPath.shortNativePath(); + } entry.highlightInfo = {index, int(input.length())}; entry.filePath = cmakeProject->projectFilePath(); - entries.append(entry); + if (acceptor || realTarget) + entries.append(entry); } } } From 06545a36255614a55592a4b89718fb203c0d013a Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 20 Dec 2023 08:59:25 +0100 Subject: [PATCH 12/41] Debugger: Fix a (harmless) use after free in manual test Change-Id: Ie7fdd9a5dbf3767faafead4ce85fb1c470e144cf Reviewed-by: Eike Ziller --- tests/manual/debugger/simple/simple_test_app.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/manual/debugger/simple/simple_test_app.cpp b/tests/manual/debugger/simple/simple_test_app.cpp index f32c1baaf15..066346c2ce7 100644 --- a/tests/manual/debugger/simple/simple_test_app.cpp +++ b/tests/manual/debugger/simple/simple_test_app.cpp @@ -3984,7 +3984,7 @@ namespace qstring { // Check string "HiDu" QString. // Continue. delete pstring; - dummyStatement(&str, &string, pstring); + dummyStatement(&str, &string, &pstring); } void testQString4() From bbf02473e0a656aa04ea0afabe30e5c19ca374b6 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 20 Dec 2023 10:37:00 +0100 Subject: [PATCH 13/41] COIN: Do not try to download qtquickcontrols2 It doesn't exist anymore Change-Id: I0bb50e0fc247022b563c370cd36cf046191c9c7f Reviewed-by: David Schulz --- coin/instructions/common_environment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coin/instructions/common_environment.yaml b/coin/instructions/common_environment.yaml index 0f651d187a8..6d4fe73802e 100644 --- a/coin/instructions/common_environment.yaml +++ b/coin/instructions/common_environment.yaml @@ -13,7 +13,7 @@ instructions: variableValue: "https://ci-files02-hki.ci.qt.io/packages/jenkins/archive/qt/6.6/6.6.0-released/Qt" - type: EnvironmentVariable variableName: QTC_QT_MODULES - variableValue: "qt5compat qtbase qtdeclarative qtimageformats qtquick3d qtquickcontrols2 qtquicktimeline qtserialport qtshadertools qtsvg qttools qttranslations qtwebengine" + variableValue: "qt5compat qtbase qtdeclarative qtimageformats qtquick3d qtquicktimeline qtserialport qtshadertools qtsvg qttools qttranslations qtwebengine" - type: EnvironmentVariable variableName: MACOSX_DEPLOYMENT_TARGET variableValue: 10.15 From a0cc2e3c3ee9f9156cb20d168be2b2b3d883016a Mon Sep 17 00:00:00 2001 From: Artem Sokolovskii Date: Mon, 18 Dec 2023 17:20:30 +0100 Subject: [PATCH 14/41] ClangFormat: Fix preview update Fixes: QTCREATORBUG-30089 Change-Id: Id89e8b2ee0439c5235755256e8410f42ad94b432 Reviewed-by: David Schulz --- src/plugins/clangformat/clangformatbaseindenter.cpp | 11 ++++++++++- src/plugins/clangformat/clangformatbaseindenter.h | 5 +++++ src/plugins/clangformat/clangformatconfigwidget.cpp | 6 ++++-- src/plugins/cppeditor/cppcodestylesettingspage.cpp | 5 +++++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/plugins/clangformat/clangformatbaseindenter.cpp b/src/plugins/clangformat/clangformatbaseindenter.cpp index 605ed2801c0..fcd8b799a41 100644 --- a/src/plugins/clangformat/clangformatbaseindenter.cpp +++ b/src/plugins/clangformat/clangformatbaseindenter.cpp @@ -782,7 +782,8 @@ void ClangFormatBaseIndenter::autoIndent(const QTextCursor &cursor, } } -clang::format::FormatStyle overrideStyle(const Utils::FilePath &fileName) +clang::format::FormatStyle ClangFormatBaseIndenter::overrideStyle( + const Utils::FilePath &fileName) const { const ProjectExplorer::Project *projectForFile = ProjectExplorer::ProjectManager::projectForFile(fileName); @@ -792,6 +793,9 @@ clang::format::FormatStyle overrideStyle(const Utils::FilePath &fileName) ? projectForFile->editorConfiguration()->codeStyle("Cpp")->currentPreferences() : TextEditor::TextEditorSettings::codeStyle("Cpp")->currentPreferences(); + if (m_overriddenPreferences) + preferences = m_overriddenPreferences->currentPreferences(); + Utils::FilePath filePath = filePathToCurrentSettings(preferences); if (!filePath.exists()) @@ -854,4 +858,9 @@ const clang::format::FormatStyle &ClangFormatBaseIndenter::styleForFile() const return m_cachedStyle.style; } +void ClangFormatBaseIndenter::setOverriddenPreferences(TextEditor::ICodeStylePreferences *preferences) +{ + m_overriddenPreferences = preferences; +} + } // namespace ClangFormat diff --git a/src/plugins/clangformat/clangformatbaseindenter.h b/src/plugins/clangformat/clangformatbaseindenter.h index 70d59661710..69eac8a3ba2 100644 --- a/src/plugins/clangformat/clangformatbaseindenter.h +++ b/src/plugins/clangformat/clangformatbaseindenter.h @@ -49,6 +49,8 @@ public: const clang::format::FormatStyle &styleForFile() const; + void setOverriddenPreferences(TextEditor::ICodeStylePreferences *preferences); + protected: virtual bool formatCodeInsteadOfIndent() const { return false; } virtual bool formatWhileTyping() const { return false; } @@ -84,6 +86,9 @@ private: }; mutable CachedStyle m_cachedStyle; + + clang::format::FormatStyle overrideStyle(const Utils::FilePath &fileName) const; + TextEditor::ICodeStylePreferences *m_overriddenPreferences = nullptr; }; } // namespace ClangFormat diff --git a/src/plugins/clangformat/clangformatconfigwidget.cpp b/src/plugins/clangformat/clangformatconfigwidget.cpp index e3328bb2695..4a1fe4955af 100644 --- a/src/plugins/clangformat/clangformatconfigwidget.cpp +++ b/src/plugins/clangformat/clangformatconfigwidget.cpp @@ -129,7 +129,9 @@ ClangFormatConfigWidget::ClangFormatConfigWidget(TextEditor::ICodeStylePreferenc displaySettings.m_visualizeWhitespace = true; d->preview->setDisplaySettings(displaySettings); d->preview->setPlainText(QLatin1String(CppEditor::Constants::DEFAULT_CODE_STYLE_SNIPPETS[0])); - d->preview->textDocument()->setIndenter(new ClangFormatIndenter(d->preview->document())); + auto *indenter = new ClangFormatIndenter(d->preview->document()); + indenter->setOverriddenPreferences(codeStyle); + d->preview->textDocument()->setIndenter(indenter); d->preview->textDocument()->setFontSettings(TextEditor::TextEditorSettings::fontSettings()); d->preview->textDocument()->setSyntaxHighlighter(new CppEditor::CppHighlighter); d->preview->textDocument()->indenter()->setFileName(fileName); @@ -271,7 +273,7 @@ void ClangFormatConfigWidget::updatePreview() QTextCursor cursor(d->preview->document()); cursor.setPosition(0); cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor); - d->preview->textDocument()->autoIndent(cursor); + d->preview->textDocument()->autoFormatOrIndent(cursor); } std::string ClangFormatConfigWidget::readFile(const QString &path) diff --git a/src/plugins/cppeditor/cppcodestylesettingspage.cpp b/src/plugins/cppeditor/cppcodestylesettingspage.cpp index 383efef58df..cea4e5c0bc4 100644 --- a/src/plugins/cppeditor/cppcodestylesettingspage.cpp +++ b/src/plugins/cppeditor/cppcodestylesettingspage.cpp @@ -605,6 +605,11 @@ public: m_codeStyleEditor->apply(); } + void finish() final + { + m_codeStyleEditor->finish(); + } + CppCodeStylePreferences *m_pageCppCodeStylePreferences = nullptr; CodeStyleEditorWidget *m_codeStyleEditor; }; From 298bd125c0109156e85fb2dd42e28f4feca639c8 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 3 Jan 2024 16:21:55 +0100 Subject: [PATCH 15/41] Markdown: Fix that file links were shown as blank in preview Handle links ourselves since QTextBrowser doesn't do what we want. - anchors without file path just jump to anchor - local files (potentially relative to the markdown file) open in Qt Creator (anchors ignored) - otherwise QDesktopServices is used Fixes: QTCREATORBUG-30120 Change-Id: I9a68607a0b32255ec075c698a1265cc6d1387e0c Reviewed-by: David Schulz --- src/plugins/texteditor/markdowneditor.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/markdowneditor.cpp b/src/plugins/texteditor/markdowneditor.cpp index 935d215f321..c8106692e3a 100644 --- a/src/plugins/texteditor/markdowneditor.cpp +++ b/src/plugins/texteditor/markdowneditor.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include #include @@ -70,9 +71,22 @@ public: // preview m_previewWidget = new QTextBrowser(); - m_previewWidget->setOpenExternalLinks(true); + m_previewWidget->setOpenLinks(false); // we want to open files in QtC, not the browser m_previewWidget->setFrameShape(QFrame::NoFrame); new Utils::MarkdownHighlighter(m_previewWidget->document()); + connect(m_previewWidget, &QTextBrowser::anchorClicked, this, [this](const QUrl &link) { + if (link.hasFragment() && link.path().isEmpty() && link.scheme().isEmpty()) { + // local anchor + m_previewWidget->scrollToAnchor(link.fragment(QUrl::FullyEncoded)); + } else if (link.isLocalFile() || link.scheme().isEmpty()) { + // absolute path or relative (to the document) + // open in Qt Creator + EditorManager::openEditor( + document()->filePath().parentDir().resolvePath(link.path())); + } else { + QDesktopServices::openUrl(link); + } + }); // editor m_textEditorWidget = new TextEditorWidget; From 6831e11c3e8b58fe0daf9ebc11ad0c491f076b7d Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 4 Jan 2024 10:47:58 +0100 Subject: [PATCH 16/41] Markdown: Add anchors for headings It looks like GitHub creates heading IDs by - converting spaces to '-' - removing anything that is not '-', '_', a number, or a letter - converting to lower case Task-number: QTBUG-120518 Change-Id: If09a8e2e0d964e751869eaebd3326a6f983ac495 Reviewed-by: David Schulz --- src/plugins/texteditor/markdowneditor.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/plugins/texteditor/markdowneditor.cpp b/src/plugins/texteditor/markdowneditor.cpp index c8106692e3a..877b032465a 100644 --- a/src/plugins/texteditor/markdowneditor.cpp +++ b/src/plugins/texteditor/markdowneditor.cpp @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -184,6 +185,26 @@ public: m_previewRestoreScrollPosition.reset(); m_previewWidget->setMarkdown(m_document->plainText()); + // Add anchors to headings. This should actually be done by Qt QTBUG-120518 + for (QTextBlock block = m_previewWidget->document()->begin(); block.isValid(); + block = block.next()) { + QTextBlockFormat fmt = block.blockFormat(); + if (fmt.hasProperty(QTextFormat::HeadingLevel)) { + QTextCharFormat cFormat = block.charFormat(); + QString anchor; + const QString text = block.text(); + for (const QChar &c : text) { + if (c == ' ') + anchor.append('-'); + else if (c == '_' || c == '-' || c.isDigit() || c.isLetter()) + anchor.append(c.toLower()); + } + cFormat.setAnchor(true); + cFormat.setAnchorNames({anchor}); + QTextCursor cursor(block); + cursor.setBlockCharFormat(cFormat); + } + } m_previewWidget->horizontalScrollBar()->setValue(positions.x()); m_previewWidget->verticalScrollBar()->setValue(positions.y()); From d8b8c1d8a684a4109f823cc811307befafb3fa3c Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 16 Oct 2023 15:07:08 +0200 Subject: [PATCH 17/41] Core: Use icon based on document's full path This makes a difference when one wants to e.g. mark non existing files. Fixes: QTCREATORBUG-29999 Change-Id: Id7c2a53fa91fb9638e9a08a746614a3f04da400f Reviewed-by: Eike Ziller (cherry picked from commit 13f5367611af2084eca5202428f1e0cacec9f0bf) Reviewed-by: David Schulz --- src/plugins/coreplugin/editormanager/documentmodel.cpp | 2 ++ src/plugins/coreplugin/editormanager/documentmodel.h | 2 ++ src/plugins/coreplugin/editormanager/openeditorsview.cpp | 6 ++++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/plugins/coreplugin/editormanager/documentmodel.cpp b/src/plugins/coreplugin/editormanager/documentmodel.cpp index e8183401bf6..d7eb164dd2e 100644 --- a/src/plugins/coreplugin/editormanager/documentmodel.cpp +++ b/src/plugins/coreplugin/editormanager/documentmodel.cpp @@ -307,6 +307,8 @@ QVariant DocumentModelPrivate::data(const QModelIndex &index, int role) const return QVariant(); case Qt::ToolTipRole: return entry->filePath().isEmpty() ? entry->displayName() : entry->filePath().toUserOutput(); + case DocumentModel::FilePathRole: + return entry->filePath().toVariant(); default: break; } diff --git a/src/plugins/coreplugin/editormanager/documentmodel.h b/src/plugins/coreplugin/editormanager/documentmodel.h index 6c7d0f0be32..3ac2a52c202 100644 --- a/src/plugins/coreplugin/editormanager/documentmodel.h +++ b/src/plugins/coreplugin/editormanager/documentmodel.h @@ -69,6 +69,8 @@ public: static QList editorsForDocuments(const QList &entries); static QList editorsForOpenedDocuments(); + static const int FilePathRole = Qt::UserRole + 23; + private: DocumentModel(); }; diff --git a/src/plugins/coreplugin/editormanager/openeditorsview.cpp b/src/plugins/coreplugin/editormanager/openeditorsview.cpp index ebf2d751ec9..34e58565a94 100644 --- a/src/plugins/coreplugin/editormanager/openeditorsview.cpp +++ b/src/plugins/coreplugin/editormanager/openeditorsview.cpp @@ -17,6 +17,8 @@ #include #include +using namespace Utils; + namespace Core::Internal { class ProxyModel : public QAbstractProxyModel @@ -253,8 +255,8 @@ QVariant ProxyModel::data(const QModelIndex &index, int role) const const QVariant sourceDecoration = QAbstractProxyModel::data(index, role); if (sourceDecoration.isValid()) return sourceDecoration; - const QString fileName = QAbstractProxyModel::data(index, Qt::DisplayRole).toString(); - return Utils::FileIconProvider::icon(Utils::FilePath::fromString(fileName)); + const QVariant filePath = QAbstractProxyModel::data(index, DocumentModel::FilePathRole); + return FileIconProvider::icon(FilePath::fromVariant(filePath)); } return QAbstractProxyModel::data(index, role); From f5fd5f1fd3ecbc87bb59257374df38ca3419d675 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 5 Dec 2023 21:05:58 +0100 Subject: [PATCH 18/41] CMakePM: Fix Conan iOS/macOS package manager auto-setup CMAKE_SYSROOT is used by Qt Creator for cross-compiling, and also selecting toolchain on macOS. Whilst for iOS CMAKE_OSX_SYSROOT is used for the same task. Make sure to pass these CMake variables to conan via the generated toolchain file. Qt Creator also uses for iOS the Xcode generator, which is a multi- configuration generator. This patchset will set the "Debug" and "Release" configurations that usually conan scripts use. Fixes: QTCREATORBUG-29978 Change-Id: I23c5d94f830aaf81c5d27f821c09545ddfd45df6 Reviewed-by: Eike Ziller --- .../3rdparty/package-manager/auto-setup.cmake | 86 ++++++++++++------- 1 file changed, 54 insertions(+), 32 deletions(-) diff --git a/src/share/3rdparty/package-manager/auto-setup.cmake b/src/share/3rdparty/package-manager/auto-setup.cmake index 59a43692dfb..2b14e4ae2b9 100644 --- a/src/share/3rdparty/package-manager/auto-setup.cmake +++ b/src/share/3rdparty/package-manager/auto-setup.cmake @@ -31,6 +31,13 @@ macro(qtc_auto_setup_compiler_standard toolchainFile) endif() endforeach() endforeach() + + foreach(osx_var CMAKE_SYSROOT CMAKE_OSX_SYSROOT CMAKE_OSX_ARCHITECTURES) + if (${osx_var}) + file(APPEND "${toolchainFile}" + "set(${osx_var} ${${osx_var}})\n") + endif() + endforeach() endmacro() # @@ -101,47 +108,61 @@ macro(qtc_auto_setup_conan) "include(\"${CMAKE_TOOLCHAIN_FILE}\")\n") endif() - file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" " - cmake_minimum_required(VERSION 3.15) + file(WRITE "${CMAKE_BINARY_DIR}/conan-dependencies/CMakeLists.txt" " + cmake_minimum_required(VERSION 3.15) - unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE) - project(conan-setup) + unset(CMAKE_PROJECT_INCLUDE_BEFORE CACHE) + project(conan-setup) - if (${conan_version} VERSION_GREATER_EQUAL 2.0) - set(CONAN_COMMAND \"${conan_program}\") - include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\") - conan_profile_detect_default() - detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\") + if (${conan_version} VERSION_GREATER_EQUAL 2.0) + set(CONAN_COMMAND \"${conan_program}\") + include(\"${CMAKE_CURRENT_LIST_DIR}/conan_provider.cmake\") + conan_profile_detect_default() + detect_host_profile(\"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\") + set(build_types \${CMAKE_BUILD_TYPE}) + if (CMAKE_CONFIGURATION_TYPES) + set(build_types \${CMAKE_CONFIGURATION_TYPES}) + endif() + + foreach(type \${build_types}) conan_install( -pr \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_host_profile\" --build=${QT_CREATOR_CONAN_BUILD_POLICY} - -s build_type=${CMAKE_BUILD_TYPE} + -s build_type=\${type} -g CMakeDeps) + endforeach() - get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) - if (CONAN_INSTALL_SUCCESS) - get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) - file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \" - list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") - list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") - list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH) - list(REMOVE_DUPLICATES CMAKE_MODULE_PATH) - set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE) - set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE) - \") - endif() - else() - include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\") - conan_cmake_run( - CONANFILE \"${conanfile_txt}\" - INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\" - GENERATORS cmake_paths cmake_find_package json - BUILD ${QT_CREATOR_CONAN_BUILD_POLICY} - ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\" - ) + get_property(CONAN_INSTALL_SUCCESS GLOBAL PROPERTY CONAN_INSTALL_SUCCESS) + if (CONAN_INSTALL_SUCCESS) + get_property(CONAN_GENERATORS_FOLDER GLOBAL PROPERTY CONAN_GENERATORS_FOLDER) + file(WRITE \"${CMAKE_BINARY_DIR}/conan-dependencies/conan_paths.cmake\" \" + list(PREPEND CMAKE_PREFIX_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + list(PREPEND CMAKE_MODULE_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + list(PREPEND CMAKE_FIND_ROOT_PATH \\\"\${CONAN_GENERATORS_FOLDER}\\\") + list(REMOVE_DUPLICATES CMAKE_PREFIX_PATH) + list(REMOVE_DUPLICATES CMAKE_MODULE_PATH) + list(REMOVE_DUPLICATES CMAKE_FIND_ROOT_PATH) + set(CMAKE_PREFIX_PATH \\\"\\\${CMAKE_PREFIX_PATH}\\\" CACHE STRING \\\"\\\" FORCE) + set(CMAKE_MODULE_PATH \\\"\\\${CMAKE_MODULE_PATH}\\\" CACHE STRING \\\"\\\" FORCE) + set(CMAKE_FIND_ROOT_PATH \\\"\\\${CMAKE_FIND_ROOT_PATH}\\\" CACHE STRING \\\"\\\" FORCE) + \") endif() - ") + else() + include(\"${CMAKE_CURRENT_LIST_DIR}/conan.cmake\") + conan_cmake_run( + CONANFILE \"${conanfile_txt}\" + INSTALL_FOLDER \"${CMAKE_BINARY_DIR}/conan-dependencies\" + GENERATORS cmake_paths cmake_find_package json + BUILD ${QT_CREATOR_CONAN_BUILD_POLICY} + ENV CONAN_CMAKE_TOOLCHAIN_FILE=\"${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake\" + ) + endif() + ") + + if (NOT DEFINED CMAKE_BUILD_TYPE AND NOT DEFINED CMAKE_CONFIGURATION_TYPES) + set(CMAKE_CONFIGURATION_TYPES "Debug;Release") + endif() execute_process(COMMAND ${CMAKE_COMMAND} -S "${CMAKE_BINARY_DIR}/conan-dependencies/" @@ -150,6 +171,7 @@ macro(qtc_auto_setup_conan) -D "CMAKE_TOOLCHAIN_FILE=${CMAKE_BINARY_DIR}/conan-dependencies/toolchain.cmake" -G ${CMAKE_GENERATOR} -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -D "CMAKE_CONFIGURATION_TYPES=${CMAKE_CONFIGURATION_TYPES}" RESULT_VARIABLE result ) if (result EQUAL 0) From 7aa57249b80824f355048b922c4657cc35001266 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 5 Jan 2024 15:00:21 +0100 Subject: [PATCH 19/41] Doc: Describe setting CLICOLOR_FORCE to 0 ...to disable the ANSI Escape codes support in CMake. Task-number: QTCREATORBUG-30147 Change-Id: Icbc5fa26652d85bbd89d827914b2c59051c69ab0 Reviewed-by: Cristian Adam --- ...-build-configuration-set-clicolor-force.webp | Bin 0 -> 17588 bytes .../cmake/creator-projects-cmake-building.qdoc | 12 +++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 doc/qtcreator/images/qtcreator-build-configuration-set-clicolor-force.webp diff --git a/doc/qtcreator/images/qtcreator-build-configuration-set-clicolor-force.webp b/doc/qtcreator/images/qtcreator-build-configuration-set-clicolor-force.webp new file mode 100644 index 0000000000000000000000000000000000000000..fcb66513a39143a07bd87bd68324fbfae1f75330 GIT binary patch literal 17588 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 NyW{i^EBr3$003&xbx!~Q literal 0 HcmV?d00001 diff --git a/doc/qtcreator/src/cmake/creator-projects-cmake-building.qdoc b/doc/qtcreator/src/cmake/creator-projects-cmake-building.qdoc index 9c971d24798..0ac1ae4ba96 100644 --- a/doc/qtcreator/src/cmake/creator-projects-cmake-building.qdoc +++ b/doc/qtcreator/src/cmake/creator-projects-cmake-building.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2023 The Qt Company Ltd. +// Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! @@ -183,6 +183,16 @@ To hide the output, select the \inlineimage icons/rightsidebaricon.png (\uicontrol {Hide/Show Right Sidebar}) button or press \key {Alt+Shift+0}. + \section1 CLICOLOR_FORCE Environment Variable + + \QC sets the environment variable \c CLICOLOR_FORCE to \e 1 to show + ANSI-colored output for CMake. This might affect the process output. + + If the output looks incorrect or different from earlier \QC versions, try + setting \c CLICOLOR_FORCE to \e 0 in \uicontrol {Use Build Environment}. + + \image qtcreator-build-configuration-set-clicolor-force.webp {Build Environment with CLICOLOR_FORCE set} + \section1 CMake Build Steps \QC builds CMake projects by running \c {cmake . --build}, which then runs From a213ce3875955f3b72f46f841899726ea179807e Mon Sep 17 00:00:00 2001 From: Mathias Hasselmann Date: Sat, 6 Jan 2024 16:23:51 +0100 Subject: [PATCH 20/41] TextEditor: Repair insertExtraToolBarWidget() New extra widgets for the right side were wrongly inserted between the buttons for line-ending text-encoding. Task-number: QTCREATORBUG-30166 Change-Id: I0f55c44344f9586e6aa97da20f5e25c28adf964c Reviewed-by: David Schulz --- src/plugins/texteditor/texteditor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index e59bc993fca..eb22736a4b3 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -8554,7 +8554,7 @@ QAction * TextEditorWidget::insertExtraToolBarWidget(TextEditorWidget::Side side findLeftMostAction); return d->m_toolBar->insertWidget(before, widget); } else { - return d->m_toolBar->insertWidget(d->m_fileEncodingLabelAction, widget); + return d->m_toolBar->insertWidget(d->m_fileLineEndingAction, widget); } } From a61f9162f10e54f31dcc5b0221e11b5ca81f186b Mon Sep 17 00:00:00 2001 From: David Faure Date: Wed, 29 Nov 2023 10:46:55 +0100 Subject: [PATCH 21/41] Fix TreeModel emitting nested QAbstractItemModel signals This led to an assert in QSFPM because it got confused by the nested reset signals. Detected by adding new QAbstractItemModelTester(this, QAbstractItemModelTester::FailureReportingMode::Fatal); to the OutlineModel constructor, and just opening QtCreator on a small qmake-based project. Fixes: QTCREATORBUG-30035 Change-Id: I41dbc81b5a2275521ece6b865115e1428e07ecf7 Reviewed-by: Reviewed-by: hjk (cherry picked from commit 9124833a63e9b933587a4df2aff9b5a7066568d2) Reviewed-by: David Faure --- src/libs/utils/treemodel.cpp | 20 ++++++++++++++++---- src/libs/utils/treemodel.h | 4 +++- src/plugins/cppeditor/cppoutlinemodel.cpp | 2 +- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/libs/utils/treemodel.cpp b/src/libs/utils/treemodel.cpp index fe96b9c83e4..4649bb43c86 100644 --- a/src/libs/utils/treemodel.cpp +++ b/src/libs/utils/treemodel.cpp @@ -604,7 +604,7 @@ TreeItem::~TreeItem() { QTC_CHECK(m_parent == nullptr); QTC_CHECK(m_model == nullptr); - removeChildren(); + removeChildrenSilently(); } TreeItem *TreeItem::childAt(int pos) const @@ -714,6 +714,13 @@ void TreeItem::removeChildren() } } +void TreeItem::removeChildrenSilently() +{ + if (childCount() == 0) + return; + clear(); +} + void TreeItem::sortChildren(const std::function &cmp) { if (m_model) { @@ -1060,6 +1067,13 @@ TreeItem *BaseTreeModel::rootItem() const } void BaseTreeModel::setRootItem(TreeItem *item) +{ + beginResetModel(); + setRootItemInternal(item); + endResetModel(); +} + +void BaseTreeModel::setRootItemInternal(TreeItem *item) { QTC_ASSERT(item, return); QTC_ASSERT(item->m_model == nullptr, return); @@ -1067,19 +1081,17 @@ void BaseTreeModel::setRootItem(TreeItem *item) QTC_ASSERT(item != m_root, return); QTC_CHECK(m_root); - beginResetModel(); if (m_root) { QTC_CHECK(m_root->m_parent == nullptr); QTC_CHECK(m_root->m_model == this); // needs to be done explicitly before setting the model to 0, otherwise it might lead to a // crash inside a view or proxy model, especially if there are selected items - m_root->removeChildren(); + m_root->removeChildrenSilently(); m_root->m_model = nullptr; delete m_root; } m_root = item; item->propagateModel(this); - endResetModel(); } void BaseTreeModel::setHeader(const QStringList &displays) diff --git a/src/libs/utils/treemodel.h b/src/libs/utils/treemodel.h index a8cc073fcff..fa960698b67 100644 --- a/src/libs/utils/treemodel.h +++ b/src/libs/utils/treemodel.h @@ -39,6 +39,7 @@ public: void removeChildAt(int pos); void removeChildren(); + void removeChildrenSilently(); void sortChildren(const std::function &cmp); void update(); void updateAll(); @@ -180,7 +181,8 @@ protected: void clear(); TreeItem *rootItem() const; - void setRootItem(TreeItem *item); + void setRootItem(TreeItem *item); // resets the model + void setRootItemInternal(TreeItem *item); TreeItem *itemForIndex(const QModelIndex &) const; QModelIndex indexForItem(const TreeItem *needle) const; diff --git a/src/plugins/cppeditor/cppoutlinemodel.cpp b/src/plugins/cppeditor/cppoutlinemodel.cpp index 068dc310b1e..c03236f274e 100644 --- a/src/plugins/cppeditor/cppoutlinemodel.cpp +++ b/src/plugins/cppeditor/cppoutlinemodel.cpp @@ -219,7 +219,7 @@ void OutlineModel::rebuild() auto root = new SymbolItem; if (m_cppDocument) buildTree(root, true); - setRootItem(root); + setRootItemInternal(root); endResetModel(); } From c4e938b407674b99b9570cc6986059ac2541e122 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 8 Jan 2024 20:57:01 +0100 Subject: [PATCH 22/41] Android: Resuscitate the "Configure Android options" InfoBar entry The restoring of Kits was moved to a later stage of the startup sequence. That is too late to connect to ICore::coreOpened. This change calls askUserAboutAndroidSetup directly instead of via connection. Fixes: QTCREATORBUG-30131 Change-Id: I9b33df42177de05f2f9132ff3126fe03ffb8df20 Reviewed-by: hjk --- src/plugins/android/androidplugin.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/plugins/android/androidplugin.cpp b/src/plugins/android/androidplugin.cpp index 9eeee4dad29..0430973b5df 100644 --- a/src/plugins/android/androidplugin.cpp +++ b/src/plugins/android/androidplugin.cpp @@ -126,10 +126,8 @@ void AndroidPlugin::kitsRestored() return v->targetDeviceTypes().contains(Android::Constants::ANDROID_DEVICE_TYPE); }).isEmpty(); - if (!AndroidConfigurations::currentConfig().sdkFullyConfigured() && qtForAndroidInstalled) { - connect(Core::ICore::instance(), &Core::ICore::coreOpened, this, - &AndroidPlugin::askUserAboutAndroidSetup, Qt::QueuedConnection); - } + if (!AndroidConfigurations::currentConfig().sdkFullyConfigured() && qtForAndroidInstalled) + askUserAboutAndroidSetup(); AndroidConfigurations::registerNewToolChains(); AndroidConfigurations::updateAutomaticKitList(); From 7942c36ace1e808366f545b2e0da22842c9b1bc5 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 8 Jan 2024 16:57:09 +0100 Subject: [PATCH 23/41] Debugger: Fix passing of solib search path Amends 92f7da917ea7e. Also, set it in all branches, not just remote execution, even if this is the primary and currently actively used way. Change-Id: I35149bd29b49dab419f83ec0cb424ae9b23827ed Reviewed-by: Christian Stenger --- src/plugins/debugger/gdb/gdbengine.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 09755f68e6d..70fccf669e1 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -4407,6 +4407,13 @@ void GdbEngine::setupInferior() if (rp.breakOnMain) runCommand({"tbreak " + mainFunction()}); + if (!rp.solibSearchPath.isEmpty()) { + DebuggerCommand cmd("appendSolibSearchPath"); + cmd.arg("path", transform(rp.solibSearchPath, &FilePath::path)); + cmd.arg("separator", HostOsInfo::pathListSeparator()); + runCommand(cmd); + } + if (rp.startMode == AttachToRemoteProcess) { handleInferiorPrepared(); @@ -4429,13 +4436,6 @@ void GdbEngine::setupInferior() // if (!remoteArch.isEmpty()) // postCommand("set architecture " + remoteArch); - if (!rp.solibSearchPath.isEmpty()) { - DebuggerCommand cmd("appendSolibSearchPath"); - for (const FilePath &filePath : rp.solibSearchPath) - cmd.arg("path", filePath.path()); - cmd.arg("separator", HostOsInfo::pathListSeparator()); - runCommand(cmd); - } if (!args.isEmpty()) runCommand({"-exec-arguments " + args}); From 99078778cc0783f0d093e46ddb36549c3fc395c4 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 9 Jan 2024 08:14:19 +0100 Subject: [PATCH 24/41] Terminal: Fix selection warning When quickly selection text via double-clicking and moving the mouse to the left it is possible that a selection is created where the start == end. This was incorrectly reported as a warning. Task-number: QTCREATORBUG-30144 Change-Id: I37b22f4ee725e5085ce0090c123ccfd9980b8a59 Reviewed-by: Reviewed-by: Christian Stenger --- src/libs/solutions/terminal/terminalview.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libs/solutions/terminal/terminalview.cpp b/src/libs/solutions/terminal/terminalview.cpp index 2244ea62d73..210ede1b794 100644 --- a/src/libs/solutions/terminal/terminalview.cpp +++ b/src/libs/solutions/terminal/terminalview.cpp @@ -386,10 +386,13 @@ QString TerminalView::textFromSelection() const if (!d->m_selection) return {}; + if (d->m_selection->start == d->m_selection->end) + return {}; + CellIterator it = d->m_surface->iteratorAt(d->m_selection->start); CellIterator end = d->m_surface->iteratorAt(d->m_selection->end); - if (it.position() >= end.position()) { + if (it.position() > end.position()) { qCWarning(selectionLog) << "Invalid selection: start >= end"; return {}; } From 060d4faed7c991ab3be9663d1b332bd7e84b535f Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 9 Jan 2024 08:19:40 +0100 Subject: [PATCH 25/41] Terminal: Fix nullopt access Fixes: QTCREATORBUG-30144 Change-Id: I9479d4cbfd8f930f405409c1c3f5252d23cca2da Reviewed-by: David Schulz --- src/libs/solutions/terminal/terminalview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/solutions/terminal/terminalview.cpp b/src/libs/solutions/terminal/terminalview.cpp index 210ede1b794..1d3779955af 100644 --- a/src/libs/solutions/terminal/terminalview.cpp +++ b/src/libs/solutions/terminal/terminalview.cpp @@ -1073,7 +1073,7 @@ void TerminalView::mousePressEvent(QMouseEvent *event) } if (event->button() == Qt::LeftButton) { - if (std::chrono::system_clock::now() - d->m_lastDoubleClick < 500ms) { + if (d->m_selection && std::chrono::system_clock::now() - d->m_lastDoubleClick < 500ms) { d->m_selectLineMode = true; const Selection newSelection{d->m_surface->gridToPos( {0, From 7fdfc2ac1df3c7d1ff5d19ad76ac0fe65bcb661c Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 9 Jan 2024 12:59:44 +0100 Subject: [PATCH 26/41] Auto-Setup: Forward CMAKE_MSVC_RUNTIME_LIBRARY to package manager Fixes: QTCREATORBUG-30169 Change-Id: Icfbb497e067c5a5a4b57e91c9fa50bc0a2816bc3 Reviewed-by: Alessandro Portale --- src/share/3rdparty/package-manager/auto-setup.cmake | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/share/3rdparty/package-manager/auto-setup.cmake b/src/share/3rdparty/package-manager/auto-setup.cmake index 2b14e4ae2b9..a2e30686f9f 100644 --- a/src/share/3rdparty/package-manager/auto-setup.cmake +++ b/src/share/3rdparty/package-manager/auto-setup.cmake @@ -32,10 +32,11 @@ macro(qtc_auto_setup_compiler_standard toolchainFile) endforeach() endforeach() - foreach(osx_var CMAKE_SYSROOT CMAKE_OSX_SYSROOT CMAKE_OSX_ARCHITECTURES) - if (${osx_var}) + # Forward important CMake variables to the package manager in the toolchain file + foreach(fwd_var CMAKE_MSVC_RUNTIME_LIBRARY CMAKE_SYSROOT CMAKE_OSX_SYSROOT CMAKE_OSX_ARCHITECTURES) + if (${fwd_var}) file(APPEND "${toolchainFile}" - "set(${osx_var} ${${osx_var}})\n") + "set(${fwd_var} ${${fwd_var}})\n") endif() endforeach() endmacro() From 72c0ff37fcb4b4cdcb07f3ca4b3ae8890c8ca2b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Thu, 4 Jan 2024 13:25:49 +0100 Subject: [PATCH 27/41] SquishTests: Expect symlinked compilers e.g. /usr/bin/clang links to ../lib/llvm-14/bin/clang on Ubuntu 22.04. Change-Id: I6facd3126045036124e6c79ee83bc7575cbb02d7 Reviewed-by: Christian Stenger --- tests/system/suite_general/tst_default_settings/test.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/system/suite_general/tst_default_settings/test.py b/tests/system/suite_general/tst_default_settings/test.py index 95391864c24..a91ddb5245d 100644 --- a/tests/system/suite_general/tst_default_settings/test.py +++ b/tests/system/suite_general/tst_default_settings/test.py @@ -207,7 +207,8 @@ def __getExpectedCompilers__(): for c in ('clang++', 'clang', 'afl-clang', 'clang-[0-9]', 'clang-[0-9].[0-9]', 'clang-1[0-9]', 'clang-1[0-9].[0-9]', '*g++*', '*gcc*'): - compilers.extend(findAllFilesInPATH(c)) + filesInPath = set(findAllFilesInPATH(c)) + compilers.extend(filesInPath | set(map(os.path.realpath, filesInPath))) if platform.system() == 'Darwin': for compilerExe in ('clang++', 'clang'): xcodeClang = getOutputFromCmdline(["xcrun", "--find", compilerExe]).strip("\n") From 7a46bbe66739015528696e0ff74359fc95a779f7 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 9 Jan 2024 18:59:33 +0100 Subject: [PATCH 28/41] CMakePM: Do not add files to utility targets On multi-config systems CMake is reporting "ALL_BUILD" or "ZERO_CHECK" as targets to add files to. When issued from menu File > Add New ... the selected target is the first target namely "ALL_BUILD", which is a utility target and cannot have source files. Fixes: QTCREATORBUG-30170 Change-Id: I7617978c01f0a2554a3ec7d52ef9baaa16ed7a84 Reviewed-by: Alessandro Portale --- src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp index ee2bbcf4a80..9ed58160eaf 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp @@ -216,7 +216,8 @@ void CMakeBuildSystem::requestDebugging() bool CMakeBuildSystem::supportsAction(Node *context, ProjectAction action, const Node *node) const { - if (dynamic_cast(context)) + const auto cmakeTarget = dynamic_cast(context); + if (cmakeTarget && cmakeTarget->productType() != ProductType::Other) return action == ProjectAction::AddNewFile || action == ProjectAction::AddExistingFile || action == ProjectAction::AddExistingDirectory || action == ProjectAction::Rename || action == ProjectAction::RemoveFile; From c07b45348625454d9d0eb9e90d765290e0b7de09 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 5 Jan 2024 15:27:45 +0100 Subject: [PATCH 29/41] Examples: Fix reading the category ordering from manifest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit qtcreator_tutorials.xml contains ordering information for the tutorials, and if we read that (first) we ignore any subsequent ordering that the set of Qt examples defines (in qtdoc/examples-manifest.xml). Only read the tutorials.xml if we are actually interested in tutorials. Amends 08bbe885b49d6782178f0bc7b19c1bb162633666 Change-Id: I9148cc9f1060500f46be2bbc9c9ef6c2512c2f6c Reviewed-by: Reviewed-by: Christian Stenger Reviewed-by: Kai Köhne --- src/plugins/qtsupport/exampleslistmodel.cpp | 12 ++++++++---- src/plugins/qtsupport/exampleslistmodel.h | 3 ++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index 3d67706b77f..d8593cb1fd8 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -363,7 +363,8 @@ void ExamplesViewController::updateExamples() const QStringList sources = m_exampleSetModel->exampleSources(&examplesInstallPath, &demosInstallPath, - &qtVersion); + &qtVersion, + m_isExamples); QStringList categoryOrder; QList items; for (const QString &exampleSource : sources) { @@ -493,12 +494,15 @@ QtVersion *ExampleSetModel::findHighestQtVersion(const QtVersions &versions) con QStringList ExampleSetModel::exampleSources(QString *examplesInstallPath, QString *demosInstallPath, - QVersionNumber *qtVersion) + QVersionNumber *qtVersion, + bool isExamples) { QStringList sources; - // Qt Creator shipped tutorials - sources << ":/qtsupport/qtcreator_tutorials.xml"; + if (!isExamples) { + // Qt Creator shipped tutorials + sources << ":/qtsupport/qtcreator_tutorials.xml"; + } QString examplesPath; QString demosPath; diff --git a/src/plugins/qtsupport/exampleslistmodel.h b/src/plugins/qtsupport/exampleslistmodel.h index 142f1c72f6c..a54ac8bc7b7 100644 --- a/src/plugins/qtsupport/exampleslistmodel.h +++ b/src/plugins/qtsupport/exampleslistmodel.h @@ -41,7 +41,8 @@ public: bool selectExampleSet(int index); QStringList exampleSources(QString *examplesInstallPath, QString *demosInstallPath, - QVersionNumber *qtVersion); + QVersionNumber *qtVersion, + bool isExamples); bool selectedQtSupports(const Utils::Id &target) const; signals: From 542ae405fcf8775d68218fd03f153b867f63ba18 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 20 Dec 2023 09:34:59 +0100 Subject: [PATCH 30/41] Welcome: Avoid duplicate examples when searching MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When adding examples for a category/section we also add them to the list of all examples. To avoid ownership issues we duplicate examples when they appear in multiple categories, but that means that the existing mechanism of filtering duplicates based on item pointer does no longer work. Filter duplicates based on name+description. It would possibly be nicer to give the examples IDs (serial numbers) when reading them and just using that for filtering duplicates, but that isn't possible in a binary compatible manner atm. Fixes: QTCREATORBUG-30069 Change-Id: I0ee9ef7b86955af5ee8ccdb9c5683ced81097671 Reviewed-by: Kai Köhne Reviewed-by: Christian Stenger Reviewed-by: --- src/plugins/coreplugin/welcomepagehelper.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/plugins/coreplugin/welcomepagehelper.cpp b/src/plugins/coreplugin/welcomepagehelper.cpp index d80942f13d4..d12e427b2fc 100644 --- a/src/plugins/coreplugin/welcomepagehelper.cpp +++ b/src/plugins/coreplugin/welcomepagehelper.cpp @@ -811,10 +811,24 @@ ListModel *SectionedGridView::addSection(const Section §ion, const QListinsertWidget(position, sectionLabel); vbox->insertWidget(position + 1, gridView); + struct ItemHash + { + std::size_t operator()(ListItem *item) const { return std::hash{}(item->name); } + }; + struct ItemEqual + { + bool operator()(ListItem *lhs, ListItem *rhs) const + { + return lhs->name == rhs->name && lhs->description == rhs->description; + } + }; + // add the items also to the all products model to be able to search correctly - const QSet allItems = toSet(m_allItemsModel->items()); - const QList newItems = filtered(items, [&allItems](ListItem *item) { - return !allItems.contains(item); + const QList allItems = m_allItemsModel->items(); + const std::unordered_set uniqueItems{allItems.constBegin(), + allItems.constEnd()}; + const QList newItems = filtered(items, [&uniqueItems](ListItem *item) { + return uniqueItems.find(item) == uniqueItems.end(); }); m_allItemsModel->appendItems(newItems); From 65af79af8405e1ce0f7cb5bed272b143d615602f Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 20 Dec 2023 11:59:54 +0100 Subject: [PATCH 31/41] ExternalTool: Fix output handling for General Messages The handling of lines was wrong and only happened to work if the output was delivered in one batch. Otherwise it would add line breaks - and if the tool output was delivered not in batches of lines, that could break in the middle of output lines. Change to code to use the Process API for handling lines of output. That also makes the codec handling in ExternalTool unnecessary. The corresponding members can be removed in the next binary incompatible release. Fixes: QTCREATORBUG-29977 Change-Id: I9d37e5e374a43f34a28418272692cca17599c8b4 Reviewed-by: Jarek Kobus Reviewed-by: --- src/plugins/coreplugin/externaltool.cpp | 29 +++++++++++-------------- src/plugins/coreplugin/externaltool.h | 5 +++-- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/plugins/coreplugin/externaltool.cpp b/src/plugins/coreplugin/externaltool.cpp index c65cfe80882..7328e024dba 100644 --- a/src/plugins/coreplugin/externaltool.cpp +++ b/src/plugins/coreplugin/externaltool.cpp @@ -623,10 +623,8 @@ void ExternalToolRunner::run() } m_process = new Process(this); connect(m_process, &Process::done, this, &ExternalToolRunner::done); - connect(m_process, &Process::readyReadStandardOutput, - this, &ExternalToolRunner::readStandardOutput); - connect(m_process, &Process::readyReadStandardError, - this, &ExternalToolRunner::readStandardError); + m_process->setStdOutLineCallback([this](const QString &s) { readStandardOutput(s); }); + m_process->setStdErrLineCallback([this](const QString &s) { readStandardError(s); }); if (!m_resolvedWorkingDirectory.isEmpty()) m_process->setWorkingDirectory(m_resolvedWorkingDirectory); const CommandLine cmd{m_resolvedExecutable, m_resolvedArguments, CommandLine::Raw}; @@ -665,30 +663,29 @@ void ExternalToolRunner::done() deleteLater(); } -void ExternalToolRunner::readStandardOutput() +static QString stripNewline(const QString &output) +{ + if (output.endsWith('\n')) + return output.chopped(1); + return output; +} + +void ExternalToolRunner::readStandardOutput(const QString &output) { if (m_tool->outputHandling() == ExternalTool::Ignore) return; - const QByteArray data = m_process->readAllRawStandardOutput(); - const QString output = m_outputCodec->toUnicode(data.constData(), - data.length(), - &m_outputCodecState); if (m_tool->outputHandling() == ExternalTool::ShowInPane) - MessageManager::writeSilently(output); + MessageManager::writeSilently(stripNewline(output)); else if (m_tool->outputHandling() == ExternalTool::ReplaceSelection) m_processOutput.append(output); } -void ExternalToolRunner::readStandardError() +void ExternalToolRunner::readStandardError(const QString &output) { if (m_tool->errorHandling() == ExternalTool::Ignore) return; - const QByteArray data = m_process->readAllRawStandardError(); - const QString output = m_outputCodec->toUnicode(data.constData(), - data.length(), - &m_errorCodecState); if (m_tool->errorHandling() == ExternalTool::ShowInPane) - MessageManager::writeSilently(output); + MessageManager::writeSilently(stripNewline(output)); else if (m_tool->errorHandling() == ExternalTool::ReplaceSelection) m_processOutput.append(output); } diff --git a/src/plugins/coreplugin/externaltool.h b/src/plugins/coreplugin/externaltool.h index 15b420f1808..2d26291fc1d 100644 --- a/src/plugins/coreplugin/externaltool.h +++ b/src/plugins/coreplugin/externaltool.h @@ -115,8 +115,8 @@ public: private: void done(); - void readStandardOutput(); - void readStandardError(); + void readStandardOutput(const QString &output); + void readStandardError(const QString &output); void run(); bool resolve(); @@ -128,6 +128,7 @@ private: Utils::FilePath m_resolvedWorkingDirectory; Utils::Environment m_resolvedEnvironment; Utils::Process *m_process; + // TODO remove codec handling, that is done by Process now QTextCodec *m_outputCodec; QTextCodec::ConverterState m_outputCodecState; QTextCodec::ConverterState m_errorCodecState; From 063234c1790bc0ca7502eddb742279c7d2460582 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 10 Jan 2024 14:51:30 +0100 Subject: [PATCH 32/41] ProjectExplorer: Fix CustomToolChain::operator== We need to take the compiler command into account. Fixes: QTCREATORBUG-30133 Change-Id: I5f120d4b3e41cbeeae255a2566332389d3eba508 Reviewed-by: hjk --- src/plugins/projectexplorer/customtoolchain.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/projectexplorer/customtoolchain.cpp b/src/plugins/projectexplorer/customtoolchain.cpp index f2ec50ed54a..5c8ac1e80cb 100644 --- a/src/plugins/projectexplorer/customtoolchain.cpp +++ b/src/plugins/projectexplorer/customtoolchain.cpp @@ -305,6 +305,7 @@ bool CustomToolChain::operator ==(const ToolChain &other) const auto customTc = static_cast(&other); return m_makeCommand == customTc->m_makeCommand + && compilerCommand() == customTc->compilerCommand() && targetAbi() == customTc->targetAbi() && m_predefinedMacros == customTc->m_predefinedMacros && m_builtInHeaderPaths == customTc->m_builtInHeaderPaths; From fd4b8aa5a87c25e010d5c446a9777eae29521354 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 11 Jan 2024 14:28:33 +0100 Subject: [PATCH 33/41] iOS: Fix provisioning profile check for "newer" devices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before deploying we check if the provisioning information includes the device that is deployed to. This suffers from the same issue as QTCREATORBUG-21291: We use the USB identifier for the device ID in Qt Creator, which cannot contain dashes, but the iOS hardware udid that Apple uses can contain dashes (and the USB identifier then is that udid without the dashes). We need to use the iOS hardware udid when checking for the device in the provisioning information. Fixes: QTCREATORBUG-30158 Change-Id: I6f9e162ad6ece02370923ea59c046f439b8cc47a Reviewed-by: Tor Arne Vestbø Reviewed-by: --- src/plugins/ios/iosdeploystep.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/ios/iosdeploystep.cpp b/src/plugins/ios/iosdeploystep.cpp index 3f80d9d931a..354f40132da 100644 --- a/src/plugins/ios/iosdeploystep.cpp +++ b/src/plugins/ios/iosdeploystep.cpp @@ -236,7 +236,7 @@ bool IosDeployStep::checkProvisioningProfile() return true; const QStringList deviceIds = provisionPlist.value("ProvisionedDevices").toStringList(); - const QString targetId = device->uniqueDeviceID(); + const QString targetId = device->uniqueInternalDeviceId(); for (const QString &deviceId : deviceIds) { if (deviceId == targetId) return true; From 1e5212aa5268786f4bc23795457528da0e20bdf8 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 12 Jan 2024 10:38:35 +0100 Subject: [PATCH 34/41] Update qbs submodule to HEAD of 2.2 branch Change-Id: I31842bafbbc1dd391f694aef43a96ff861212a7e Reviewed-by: Christian Stenger Reviewed-by: Qt CI Bot --- src/shared/qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qbs b/src/shared/qbs index b1d6a0518a3..aa044048f0b 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit b1d6a0518a38bf37928233d31f764132081f85ed +Subproject commit aa044048f0b3573ddda09d1b7a4483af9eed3de4 From db930b3c61d6a485d255074d01aed4cdce920163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Mon, 18 Dec 2023 20:04:59 +0100 Subject: [PATCH 35/41] SquishTests: Update expected tree in tst_opencreator_qbs Change-Id: I0b28b49bf2351ad37daf9702aaa1386b0c3514be Reviewed-by: Christian Stenger --- .../testdata/projecttree_creator.tsv | 454 +----------------- 1 file changed, 25 insertions(+), 429 deletions(-) diff --git a/tests/system/suite_general/tst_opencreator_qbs/testdata/projecttree_creator.tsv b/tests/system/suite_general/tst_opencreator_qbs/testdata/projecttree_creator.tsv index 241ce7f8791..15dd125bc7d 100644 --- a/tests/system/suite_general/tst_opencreator_qbs/testdata/projecttree_creator.tsv +++ b/tests/system/suite_general/tst_opencreator_qbs/testdata/projecttree_creator.tsv @@ -623,7 +623,6 @@ "textfinder.pro" "4" "qtdesignstudio" "2" "studiodoc.pro" "3" -"doc.pri" "2" "doc_targets.pri" "2" "share" "1" "qtcreator" "2" @@ -696,47 +695,32 @@ "autogenerated.pri" "6" "data" "5" "data.pro" "6" -"syntax-highlighting.pro" "5" "syntax-highlighting_dependencies.pri" "5" "yaml-cpp" "4" "yaml-cpp.pri" "5" "yaml-cpp.pro" "5" -"yaml-cpp_dependencies.pri" "5" "advanceddockingsystem" "3" "linux" "4" "linux.pri" "5" -"advanceddockingsystem-lib.pri" "4" "advanceddockingsystem.pro" "4" -"advanceddockingsystem_dependencies.pri" "4" "aggregation" "3" "examples" "4" "text" "5" "text.pro" "6" "examples.pro" "5" -"aggregation.pro" "4" "aggregation_dependencies.pri" "4" "clangsupport" "3" -"clangsupport-lib.pri" "4" "clangsupport.pro" "4" -"clangsupport_dependencies.pri" "4" "cplusplus" "3" -"cplusplus-lib.pri" "4" "cplusplus.pro" "4" -"cplusplus_dependencies.pri" "4" "extensionsystem" "3" -"extensionsystem.pro" "4" "extensionsystem_dependencies.pri" "4" "glsl" "3" -"glsl-lib.pri" "4" "glsl.pro" "4" -"glsl_dependencies.pri" "4" "languageserverprotocol" "3" -"languageserverprotocol.pro" "4" "languageserverprotocol_dependencies.pri" "4" "languageutils" "3" -"languageutils-lib.pri" "4" "languageutils.pro" "4" -"languageutils_dependencies.pri" "4" "modelinglib" "3" "qmt" "4" "qmt.pri" "5" @@ -744,24 +728,17 @@ "qstringparser.pri" "5" "qtserialization" "4" "qtserialization.pri" "5" -"modelinglib.pro" "4" "modelinglib_dependencies.pri" "4" "qmldebug" "3" -"qmldebug-lib.pri" "4" "qmldebug.pro" "4" -"qmldebug_dependencies.pri" "4" "qmleditorwidgets" "3" "easingpane" "4" "easingpane.pri" "5" -"qmleditorwidgets-lib.pri" "4" "qmleditorwidgets.pro" "4" -"qmleditorwidgets_dependencies.pri" "4" "qmljs" "3" "parser" "4" "parser.pri" "5" -"qmljs-lib.pri" "4" "qmljs.pro" "4" -"qmljs_dependencies.pri" "4" "qt-breakpad" "3" "qtcrashhandler" "4" "qtcrashhandler.pro" "5" @@ -774,13 +751,9 @@ "sqlite" "3" "sqlite-lib.pri" "4" "sqlite-source.pri" "4" -"sqlite.pro" "4" -"sqlite_dependencies.pri" "4" "ssh" "3" -"ssh.pro" "4" "ssh_dependencies.pri" "4" "tracing" "3" -"tracing.pro" "4" "tracing_dependencies.pri" "4" "utils" "3" "mimetypes" "4" @@ -789,13 +762,10 @@ "touchbar.pri" "5" "process_ctrlc_stub.pro" "4" "process_stub.pro" "4" -"utils-lib.pri" "4" "utils.pro" "4" -"utils_dependencies.pri" "4" "libs.pro" "3" "plugins" "2" "android" "3" -"android.pro" "4" "android_dependencies.pri" "4" "autotest" "3" "unit_test" "4" @@ -850,10 +820,8 @@ "gtest_dependency.pri" "7" "tests.pro" "7" "simple_gt.pro" "6" -"autotest.pro" "4" "autotest_dependencies.pri" "4" "autotoolsprojectmanager" "3" -"autotoolsprojectmanager.pro" "4" "autotoolsprojectmanager_dependencies.pri" "4" "baremetal" "3" "debugservers" "4" @@ -861,24 +829,18 @@ "gdbservers.pri" "6" "uvsc" "5" "uvscservers.pri" "6" -"baremetal.pro" "4" "baremetal_dependencies.pri" "4" "bazaar" "3" -"bazaar.pro" "4" "bazaar_dependencies.pri" "4" "beautifier" "3" -"beautifier.pro" "4" "beautifier_dependencies.pri" "4" "bineditor" "3" -"bineditor.pro" "4" "bineditor_dependencies.pri" "4" "bookmarks" "3" -"bookmarks.pro" "4" "bookmarks_dependencies.pri" "4" "boot2qt" "3" "device-detection" "4" "device-detection.pri" "5" -"boot2qt.pro" "4" "boot2qt_dependencies.pri" "4" "clangcodemodel" "3" "completion" "5" @@ -895,13 +857,10 @@ "qt-widgets-app.pro" "6" "tooltips" "5" "tooltips.pro" "6" -"clangcodemodel.pro" "4" "clangcodemodel_dependencies.pri" "4" "clangcodemodelunittestfiles.pri" "4" "clangformat" "3" -"clangformat-source.pri" "4" "clangformat.pro" "4" -"clangformat_dependencies.pri" "4" "clangtools" "3" "unit-tests" "4" "clangtidy_clazy" "5" @@ -918,49 +877,37 @@ "simple-library.pro" "6" "stdc++11-includes" "5" "stdc++11-includes.pro" "6" -"clangtools.pro" "4" "clangtools_dependencies.pri" "4" "clangtoolsunittestfiles.pri" "4" "classview" "3" -"classview.pro" "4" "classview_dependencies.pri" "4" "clearcase" "3" -"clearcase.pro" "4" "clearcase_dependencies.pri" "4" "cmakeprojectmanager" "3" -"cmakeprojectmanager.pro" "4" "cmakeprojectmanager_dependencies.pri" "4" "compilationdatabaseprojectmanager" "3" -"compilationdatabaseprojectmanager.pro" "4" "compilationdatabaseprojectmanager_dependencies.pri" "4" "conan" "3" -"conan.pro" "4" "conan_dependencies.pri" "4" "coreplugin" "3" "find" "4" "find.pri" "5" "locator" "4" "locator.pri" "5" -"coreplugin.pro" "4" "coreplugin_dependencies.pri" "4" "corepluginunittestfiles.pri" "4" "cpaster" "3" "frontend" "4" "frontend.pro" "5" -"cpaster.pro" "4" "cpaster_dependencies.pri" "4" "cppcheck" "3" -"cppcheck.pro" "4" "cppcheck_dependencies.pri" "4" "cppeditor" "3" -"cppeditor.pro" "4" "cppeditor_dependencies.pri" "4" "cppeditorunittestfiles.pri" "4" "ctfvisualizer" "3" -"ctfvisualizer.pro" "4" "ctfvisualizer_dependencies.pri" "4" "cvs" "3" -"cvs.pro" "4" "cvs_dependencies.pri" "4" "debugger" "3" "analyzer" "4" @@ -982,102 +929,74 @@ "simple.pro" "5" "uvsc" "4" "uvsc.pri" "5" -"debugger.pro" "4" "debugger_dependencies.pri" "4" "debuggerunittestfiles.pri" "4" "ptracepreload.pro" "4" "designer" "3" "cpp" "4" "cpp.pri" "5" -"designer.pro" "4" "designer_dependencies.pri" "4" "diffeditor" "3" -"diffeditor.pro" "4" "diffeditor_dependencies.pri" "4" "docker" "3" -"docker.pro" "4" "docker_dependencies.pri" "4" "emacskeys" "3" -"emacskeys.pro" "4" "emacskeys_dependencies.pri" "4" "fakevim" "3" -"fakevim.pro" "4" "fakevim_dependencies.pri" "4" "genericprojectmanager" "3" -"genericprojectmanager.pro" "4" "genericprojectmanager_dependencies.pri" "4" "git" "3" "gerrit" "4" "gerrit.pri" "5" -"git.pro" "4" "git_dependencies.pri" "4" "glsleditor" "3" -"glsleditor.pro" "4" "glsleditor_dependencies.pri" "4" "helloworld" "3" -"helloworld.pro" "4" "helloworld_dependencies.pri" "4" "help" "3" -"help.pro" "4" "help_dependencies.pri" "4" "imageviewer" "3" -"imageviewer.pro" "4" "imageviewer_dependencies.pri" "4" "incredibuild" "3" -"incredibuild.pro" "4" "incredibuild_dependencies.pri" "4" "ios" "3" -"ios.pro" "4" "ios_dependencies.pri" "4" "languageclient" "3" -"languageclient.pro" "4" "languageclient_dependencies.pri" "4" "macros" "3" -"macros.pro" "4" "macros_dependencies.pri" "4" "marketplace" "3" -"marketplace.pro" "4" "marketplace_dependencies.pri" "4" "mcusupport" "3" -"mcusupport.pro" "4" "mcusupport_dependencies.pri" "4" "mercurial" "3" -"mercurial.pro" "4" "mercurial_dependencies.pri" "4" "mesonprojectmanager" "3" -"mesonprojectmanager.pro" "4" "mesonprojectmanager_dependencies.pri" "4" "modeleditor" "3" -"modeleditor.pro" "4" "modeleditor_dependencies.pri" "4" "nim" "3" -"nim.pro" "4" "nim_dependencies.pri" "4" "perforce" "3" -"perforce.pro" "4" "perforce_dependencies.pri" "4" "perfprofiler" "3" "tests" "4" "tests.pri" "5" -"perfprofiler.pro" "4" "perfprofiler_dependencies.pri" "4" "projectexplorer" "3" "customwizard" "4" "customwizard.pri" "5" "jsonwizard" "4" "jsonwizard.pri" "5" -"projectexplorer.pro" "4" "projectexplorer_dependencies.pri" "4" "python" "3" -"python.pro" "4" "python_dependencies.pri" "4" "qbsprojectmanager" "3" -"qbsprojectmanager.pro" "4" "qbsprojectmanager_dependencies.pri" "4" "qmakeprojectmanager" "3" "customwidgetwizard" "4" "customwidgetwizard.pri" "5" -"qmakeprojectmanager.pro" "4" "qmakeprojectmanager_dependencies.pri" "4" "qmldesigner" "3" "assetexporterplugin" "4" @@ -1143,9 +1062,7 @@ "filemanager" "5" "filemanager.pri" "6" "instances" "5" -"instances-lib.pri" "6" "instances.pri" "6" -"designercore-lib.pri" "5" "designercore.pri" "5" "iwidgetplugin.pri" "5" "qmlpreviewplugin" "4" @@ -1155,45 +1072,35 @@ "qtquickplugin.pri" "5" "qtquickplugin.pro" "5" "plugindestdir.pri" "4" -"qmldesigner.pro" "4" "qmldesigner_dependencies.pri" "4" "qmldesignerplugin.pri" "4" "qmldesignerplugin.pro" "4" "qmldesignerunittestfiles.pri" "4" "qmljseditor" "3" -"qmljseditor.pro" "4" "qmljseditor_dependencies.pri" "4" "qmljstools" "3" -"qmljstools.pro" "4" "qmljstools_dependencies.pri" "4" "qmlpreview" "3" "tests" "4" "tests.pri" "5" -"qmlpreview.pro" "4" "qmlpreview_dependencies.pri" "4" "qmlprofiler" "3" "tests" "4" "tests.pri" "5" -"qmlprofiler.pro" "4" "qmlprofiler_dependencies.pri" "4" "qmlprojectmanager" "3" "fileformat" "4" "fileformat.pri" "5" -"qmlprojectmanager.pro" "4" "qmlprojectmanager_dependencies.pri" "4" "qnx" "3" -"qnx.pro" "4" "qnx_dependencies.pri" "4" "qtsupport" "3" -"qtsupport.pro" "4" "qtsupport_dependencies.pri" "4" "remotelinux" "3" -"remotelinux.pro" "4" "remotelinux_dependencies.pri" "4" "resourceeditor" "3" "qrceditor" "4" "qrceditor.pri" "5" -"resourceeditor.pro" "4" "resourceeditor_dependencies.pri" "4" "scxmleditor" "3" "common" "4" @@ -1202,51 +1109,37 @@ "outputpane.pri" "5" "plugin_interface" "4" "plugin_interface.pri" "5" -"scxmleditor.pro" "4" "scxmleditor_dependencies.pri" "4" "serialterminal" "3" -"serialterminal.pro" "4" "serialterminal_dependencies.pri" "4" "silversearcher" "3" -"silversearcher.pro" "4" "silversearcher_dependencies.pri" "4" "studiowelcome" "3" -"studiowelcome.pro" "4" "studiowelcome_dependencies.pri" "4" "subversion" "3" -"subversion.pro" "4" "subversion_dependencies.pri" "4" "tasklist" "3" -"tasklist.pro" "4" "tasklist_dependencies.pri" "4" "texteditor" "3" -"texteditor.pro" "4" "texteditor_dependencies.pri" "4" "todo" "3" -"todo.pro" "4" "todo_dependencies.pri" "4" "updateinfo" "3" -"updateinfo.pro" "4" "updateinfo_dependencies.pri" "4" "valgrind" "3" "callgrind" "4" "callgrind.pri" "5" "xmlprotocol" "4" "xmlprotocol.pri" "5" -"valgrind.pro" "4" "valgrind_dependencies.pri" "4" "valgrind_test.pri" "4" "vcsbase" "3" -"vcsbase.pro" "4" "vcsbase_dependencies.pri" "4" "webassembly" "3" -"webassembly.pro" "4" "webassembly_dependencies.pri" "4" "welcome" "3" -"welcome.pro" "4" "welcome_dependencies.pri" "4" "winrt" "3" -"winrt.pro" "4" "winrt_dependencies.pri" "4" "plugins.pro" "3" "share" "2" @@ -1608,7 +1501,6 @@ "script" "4" "script.pro" "5" "simple" "4" -"simple.pro" "5" "simple_test_app.pro" "5" "simple_test_plugin.pro" "5" "spacy path" "4" @@ -1691,8 +1583,6 @@ "unit.pro" "3" "tests.pro" "2" "docs.pri" "1" -"qtcreator.pri" "1" -"qtcreator.pro" "1" "qtcreator_ide_branding.pri" "1" "qtcreator_testvars.pri" "1" "qtcreatordata.pri" "1" @@ -1704,7 +1594,6 @@ "SourceCodePro-Bold.ttf" "3" "SourceCodePro-It.ttf" "3" "SourceCodePro-Regular.ttf" "3" -"SourceCodePro.txt" "3" "package-manager" "2" "auto-setup.cmake" "3" "conan.cmake" "3" @@ -1749,39 +1638,12 @@ "glsl" "2" "glsl_120.frag" "3" "glsl_120.vert" "3" -"glsl_120_common.glsl" "3" "glsl_330.frag" "3" "glsl_330.vert" "3" -"glsl_330_common.glsl" "3" "glsl_es_100.frag" "3" "glsl_es_100.vert" "3" -"glsl_es_100_common.glsl" "3" "modeleditor" "2" "standard.def" "3" -"qml-type-descriptions" "2" -"builtins.qmltypes" "3" -"qbs-base.qmltypes" "3" -"qmlproject-bundle.json" "3" -"qmlproject.qmltypes" "3" -"qmlruntime.qmltypes" "3" -"qmltypes-bundle.json" "3" -"qt-labs-folderlistmodel.qmltypes" "3" -"qt-labs-gestures.qmltypes" "3" -"qt-labs-particles.qmltypes" "3" -"qt5QtQuick2-bundle.json" "3" -"qtmobility-connectivity.qmltypes" "3" -"qtmobility-contacts.qmltypes" "3" -"qtmobility-feedback.qmltypes" "3" -"qtmobility-gallery.qmltypes" "3" -"qtmobility-location.qmltypes" "3" -"qtmobility-messaging.qmltypes" "3" -"qtmobility-organizer.qmltypes" "3" -"qtmobility-publishsubscribe.qmltypes" "3" -"qtmobility-sensors.qmltypes" "3" -"qtmobility-serviceframework.qmltypes" "3" -"qtmobility-systeminfo.qmltypes" "3" -"qtmultimediakit.qmltypes" "3" -"qtwebkit.qmltypes" "3" "commands" "3" "captureddatacommand.h" "4" "changeauxiliarycommand.cpp" "4" @@ -1876,7 +1738,6 @@ "propertyvaluecontainer.h" "4" "reparentcontainer.cpp" "4" "reparentcontainer.h" "4" -"sharedmemory.h" "4" "sharedmemory_qt.cpp" "4" "sharedmemory_unix.cpp" "4" "html" "3" @@ -2001,7 +1862,6 @@ "qml2puppet" "3" "editor3d" "4" "qt5compat" "5" -"qquick3darealight.cpp" "6" "qquick3darealight_p.h" "6" "camerageometry.cpp" "5" "camerageometry.h" "5" @@ -2107,13 +1967,11 @@ "qmlprivategate.cpp" "4" "qmlprivategate.h" "4" "qmlprivategate.pri" "4" -"qmlprivategate_56.cpp" "4" "types" "3" "enumeration.h" "4" "types.pri" "4" "editor3d_qt5.qrc" "3" "editor3d_qt6.qrc" "3" -"qmlpuppet.qrc" "3" "qmlpuppet_utilities.pri" "3" "qmldesigner" "2" "itemLibraryQmlSources" "3" @@ -2168,7 +2026,6 @@ "down-arrow@2x.png" "7" "expression.png" "7" "expression@2x.png" "7" -"icon-gradient-list.png" "7" "icon_color_conical_gradient.png" "7" "icon_color_gradient.png" "7" "icon_color_none.png" "7" @@ -2462,7 +2319,6 @@ "GridView.png" "4" "Image.png" "4" "InfoBanner.png" "4" -"item-icon16.png" "4" "Item.png" "4" "ListButton.png" "4" "ListDelegate.png" "4" @@ -2510,7 +2366,6 @@ "styles" "2" "creator-dark.xml" "3" "dark.xml" "3" -"default.xml" "3" "default_classic.xml" "3" "grayscale.xml" "3" "inkpot.xml" "3" @@ -2525,8 +2380,6 @@ "tpl_resources.qrc" "4" "tpl_single.cpp" "4" "tpl_single.h" "4" -"tpl_widget.cpp" "4" -"tpl_widget.h" "4" "tpl_widget_include.pri" "4" "tpl_widget_lib.pro" "4" "wizards" "3" @@ -2535,12 +2388,8 @@ "catch2_tst.cpp" "6" "googlecommon.js" "6" "gtest_dependency.pri" "6" -"tst.pro" "6" -"tst.qbs" "6" -"tst.txt" "6" "tst_main.cpp" "6" "tst_qml.tmpl" "6" -"tst_src.cpp" "6" "tst_src_gt.cpp" "6" "autotest.png" "5" "autotest@2x.png" "5" @@ -2652,7 +2501,6 @@ "CMakeLists.txt" "6" "lib.cpp" "6" "lib.h" "6" -"lib_global.h" "6" "meson.build" "6" "project.json" "6" "project.pro" "6" @@ -2721,7 +2569,6 @@ "widget" "6" "main.pyproject" "7" "wizard.json" "7" -"main.pyproject" "6" "main_empty.py" "6" "main_mainwindow.py" "6" "main_qtquick.py" "6" @@ -2795,7 +2642,6 @@ "myplugin.cpp" "5" "myplugin.h" "5" "MyPlugin.json.in" "5" -"myplugin_global.h" "5" "mypluginconstants.h" "5" "qtcreatorplugin.png" "5" "qtcreatorplugin@2x.png" "5" @@ -2805,11 +2651,9 @@ "themes" "2" "dark.creatortheme" "3" "default.creatortheme" "3" -"design-light.creatortheme" "3" "design.creatortheme" "3" "flat-dark.creatortheme" "3" "flat-light.creatortheme" "3" -"flat.creatortheme" "3" "Sources" "0" "src.qbs:6" "1" "app_version_header" "1" @@ -3054,7 +2898,6 @@ "pp-engine.h" "5" "pp-scanner.cpp" "5" "pp-scanner.h" "5" -"pp.h" "5" "PPToken.cpp" "5" "PPToken.h" "5" "PreprocessorClient.cpp" "5" @@ -3165,7 +3008,6 @@ "invoker.h" "4" "iplugin.cpp" "4" "iplugin.h" "4" -"iplugin_p.h" "4" "optionsparser.cpp" "4" "optionsparser.h" "4" "plugindetailsview.cpp" "4" @@ -3179,10 +3021,8 @@ "pluginerrorview.ui" "4" "pluginmanager.cpp" "4" "pluginmanager.h" "4" -"pluginmanager_p.h" "4" "pluginspec.cpp" "4" "pluginspec.h" "4" -"pluginspec_p.h" "4" "pluginview.cpp" "4" "pluginview.h" "4" "GLSL" "2" @@ -3191,7 +3031,6 @@ "glsl.qbs:45" "4" "glslparser.cpp" "4" "glslparser.h" "4" -"glslparsertable.cpp" "4" "glslparsertable_p.h" "4" "Group 4" "3" "glsl.qbs:56" "4" @@ -3682,7 +3521,6 @@ "qxmlinarchive.h" "5" "qxmloutarchive.h" "5" "reference.h" "5" -"serialize.h" "5" "serialize_basic.h" "5" "serialize_container.h" "5" "serialize_enum.h" "5" @@ -3842,7 +3680,6 @@ "tile-icon-hor-scale.png" "7" "tile-icon-vert-crop.png" "7" "tile-icon-vert-scale.png" "7" -"tile-icon.png" "7" "tr.png" "7" "tr@2x.png" "7" "underline-h-icon.png" "7" @@ -3931,25 +3768,18 @@ "qmljsviewercontext.h" "5" "Parser" "4" "qmljs.qbs:58" "5" -"qmldirparser.cpp" "5" "qmldirparser_p.h" "5" -"qmlimportresolver.cpp" "5" "qmlimportresolver_p.h" "5" -"qmljsast.cpp" "5" "qmljsast_p.h" "5" "qmljsastfwd_p.h" "5" -"qmljsastvisitor.cpp" "5" "qmljsastvisitor_p.h" "5" "qmljsengine_p.cpp" "5" "qmljsengine_p.h" "5" "qmljsglobal_p.h" "5" -"qmljsgrammar.cpp" "5" "qmljsgrammar_p.h" "5" "qmljskeywords_p.h" "5" -"qmljslexer.cpp" "5" "qmljslexer_p.h" "5" "qmljsmemorypool_p.h" "5" -"qmljsparser.cpp" "5" "qmljsparser_p.h" "5" "qmljssourcelocation_p.h" "5" "standard pch file (gui)" "4" @@ -4059,7 +3889,6 @@ "sshkeycreationdialog.cpp" "4" "sshkeycreationdialog.h" "4" "sshkeycreationdialog.ui" "4" -"sshlogging.cpp" "4" "sshlogging_p.h" "4" "sshprocess.cpp" "4" "sshprocess.h" "4" @@ -4147,8 +3976,8 @@ "licenses" "6" "LICENSE.GPLv2" "7" "LICENSE.GPLv3" "7" -"LICENSE.LGPLv21" "7" "LICENSE.LGPLv3" "7" +"LICENSE.LGPLv21" "7" "alert.xml" "6" "autoconf.xml" "6" "bash.xml" "6" @@ -4178,14 +4007,10 @@ "syntax-highlighting.qbs:43" "5" "abstracthighlighter.cpp" "5" "abstracthighlighter.h" "5" -"abstracthighlighter_p.h" "5" -"context.cpp" "5" "context_p.h" "5" -"contextswitch.cpp" "5" "contextswitch_p.h" "5" "definition.cpp" "5" "definition.h" "5" -"definition_p.h" "5" "definitiondownloader.cpp" "5" "definitiondownloader.h" "5" "definitionref_p.h" "5" @@ -4193,30 +4018,22 @@ "foldingregion.h" "5" "format.cpp" "5" "format.h" "5" -"format_p.h" "5" "htmlhighlighter.cpp" "5" "htmlhighlighter.h" "5" -"keywordlist.cpp" "5" "keywordlist_p.h" "5" "matchresult_p.h" "5" "repository.cpp" "5" "repository.h" "5" -"repository_p.h" "5" -"rule.cpp" "5" "rule_p.h" "5" "state.cpp" "5" "state.h" "5" -"state_p.h" "5" "syntaxhighlighter.cpp" "5" "syntaxhighlighter.h" "5" "textstyledata_p.h" "5" "theme.cpp" "5" "theme.h" "5" -"themedata.cpp" "5" "themedata_p.h" "5" -"wildcardmatcher.cpp" "5" "wildcardmatcher_p.h" "5" -"worddelimiters.cpp" "5" "worddelimiters_p.h" "5" "xml_p.h" "5" "standard pch file (gui)" "4" @@ -4265,32 +4082,26 @@ "safecastable.h" "5" "timelineabstractrenderer.cpp" "5" "timelineabstractrenderer.h" "5" -"timelineabstractrenderer_p.h" "5" "timelineformattime.cpp" "5" "timelineformattime.h" "5" "timelineitemsrenderpass.cpp" "5" "timelineitemsrenderpass.h" "5" "timelinemodel.cpp" "5" "timelinemodel.h" "5" -"timelinemodel_p.h" "5" "timelinemodelaggregator.cpp" "5" "timelinemodelaggregator.h" "5" "timelinenotesmodel.cpp" "5" "timelinenotesmodel.h" "5" -"timelinenotesmodel_p.h" "5" "timelinenotesrenderpass.cpp" "5" "timelinenotesrenderpass.h" "5" "timelineoverviewrenderer.cpp" "5" "timelineoverviewrenderer.h" "5" -"timelineoverviewrenderer_p.h" "5" "timelinerenderer.cpp" "5" "timelinerenderer.h" "5" -"timelinerenderer_p.h" "5" "timelinerenderpass.cpp" "5" "timelinerenderpass.h" "5" "timelinerenderstate.cpp" "5" "timelinerenderstate.h" "5" -"timelinerenderstate_p.h" "5" "timelineselectionrenderpass.cpp" "5" "timelineselectionrenderpass.h" "5" "timelinetheme.cpp" "5" @@ -4364,19 +4175,12 @@ "utils.qbs:379" "5" "mimedatabase.cpp" "5" "mimedatabase.h" "5" -"mimedatabase_p.h" "5" -"mimeglobpattern.cpp" "5" "mimeglobpattern_p.h" "5" -"mimemagicrule.cpp" "5" "mimemagicrule_p.h" "5" -"mimemagicrulematcher.cpp" "5" "mimemagicrulematcher_p.h" "5" -"mimeprovider.cpp" "5" "mimeprovider_p.h" "5" "mimetype.cpp" "5" "mimetype.h" "5" -"mimetype_p.h" "5" -"mimetypeparser.cpp" "5" "mimetypeparser_p.h" "5" "ProcessHandle_macos" "4" "utils.qbs:371" "5" @@ -4393,7 +4197,6 @@ "utils.qbs:332" "5" "theme.cpp" "5" "theme.h" "5" -"theme_p.h" "5" "Theme_macos" "4" "utils.qbs:362" "5" "theme_mac.h" "5" @@ -4407,9 +4210,7 @@ "tooltip.h" "5" "TouchBar implementation" "4" "utils.qbs:406" "5" -"touchbar_appdelegate_mac.mm" "5" "touchbar_appdelegate_mac_p.h" "5" -"touchbar_mac.mm" "5" "touchbar_mac_p.h" "5" "TouchBar stub" "4" "utils.qbs:416" "5" @@ -4459,20 +4260,12 @@ "collapse@2x.png" "5" "compile_error_taskbar.png" "5" "compile_error_taskbar@2x.png" "5" -"crumblepath-segment-first-hover.png" "5" -"crumblepath-segment-first-hover@2x.png" "5" "crumblepath-segment-first.png" "5" "crumblepath-segment-first@2x.png" "5" -"crumblepath-segment-last-hover.png" "5" -"crumblepath-segment-last-hover@2x.png" "5" "crumblepath-segment-last.png" "5" "crumblepath-segment-last@2x.png" "5" -"crumblepath-segment-middle-hover.png" "5" -"crumblepath-segment-middle-hover@2x.png" "5" "crumblepath-segment-middle.png" "5" "crumblepath-segment-middle@2x.png" "5" -"crumblepath-segment-single-hover.png" "5" -"crumblepath-segment-single-hover@2x.png" "5" "crumblepath-segment-single.png" "5" "crumblepath-segment-single@2x.png" "5" "dark_fileicon.png" "5" @@ -4525,26 +4318,18 @@ "fittoview@2x.png" "5" "home.png" "5" "home@2x.png" "5" -"iconoverlay_add.png" "5" -"iconoverlay_add@2x.png" "5" "iconoverlay_add_background.png" "5" "iconoverlay_add_background@2x.png" "5" "iconoverlay_add_small.png" "5" "iconoverlay_add_small@2x.png" "5" -"iconoverlay_error.png" "5" -"iconoverlay_error@2x.png" "5" "iconoverlay_error_background.png" "5" "iconoverlay_error_background@2x.png" "5" "iconoverlay_reset.png" "5" "iconoverlay_reset@2x.png" "5" -"iconoverlay_warning.png" "5" -"iconoverlay_warning@2x.png" "5" "iconoverlay_warning_background.png" "5" "iconoverlay_warning_background@2x.png" "5" "info.png" "5" "info@2x.png" "5" -"inputfield.png" "5" -"inputfield@2x.png" "5" "inputfield_disabled.png" "5" "inputfield_disabled@2x.png" "5" "interrupt_small.png" "5" @@ -4585,10 +4370,6 @@ "online@2x.png" "5" "pan.png" "5" "pan@2x.png" "5" -"panel_button.png" "5" -"panel_button@2x.png" "5" -"panel_button_checked.png" "5" -"panel_button_checked@2x.png" "5" "panel_button_checked_hover.png" "5" "panel_button_checked_hover@2x.png" "5" "panel_button_hover.png" "5" @@ -5042,20 +4823,12 @@ "collapse@2x.png" "7" "compile_error_taskbar.png" "7" "compile_error_taskbar@2x.png" "7" -"crumblepath-segment-first-hover.png" "7" -"crumblepath-segment-first-hover@2x.png" "7" "crumblepath-segment-first.png" "7" "crumblepath-segment-first@2x.png" "7" -"crumblepath-segment-last-hover.png" "7" -"crumblepath-segment-last-hover@2x.png" "7" "crumblepath-segment-last.png" "7" "crumblepath-segment-last@2x.png" "7" -"crumblepath-segment-middle-hover.png" "7" -"crumblepath-segment-middle-hover@2x.png" "7" "crumblepath-segment-middle.png" "7" "crumblepath-segment-middle@2x.png" "7" -"crumblepath-segment-single-hover.png" "7" -"crumblepath-segment-single-hover@2x.png" "7" "crumblepath-segment-single.png" "7" "crumblepath-segment-single@2x.png" "7" "dark_fileicon.png" "7" @@ -5104,26 +4877,18 @@ "fittoview@2x.png" "7" "home.png" "7" "home@2x.png" "7" -"iconoverlay_add.png" "7" -"iconoverlay_add@2x.png" "7" "iconoverlay_add_background.png" "7" "iconoverlay_add_background@2x.png" "7" "iconoverlay_add_small.png" "7" "iconoverlay_add_small@2x.png" "7" -"iconoverlay_error.png" "7" -"iconoverlay_error@2x.png" "7" "iconoverlay_error_background.png" "7" "iconoverlay_error_background@2x.png" "7" "iconoverlay_reset.png" "7" "iconoverlay_reset@2x.png" "7" -"iconoverlay_warning.png" "7" -"iconoverlay_warning@2x.png" "7" "iconoverlay_warning_background.png" "7" "iconoverlay_warning_background@2x.png" "7" "info.png" "7" "info@2x.png" "7" -"inputfield.png" "7" -"inputfield@2x.png" "7" "inputfield_disabled.png" "7" "inputfield_disabled@2x.png" "7" "interrupt_small.png" "7" @@ -5158,10 +4923,6 @@ "online@2x.png" "7" "pan.png" "7" "pan@2x.png" "7" -"panel_button.png" "7" -"panel_button@2x.png" "7" -"panel_button_checked.png" "7" -"panel_button_checked@2x.png" "7" "panel_button_checked_hover.png" "7" "panel_button_checked_hover@2x.png" "7" "panel_button_hover.png" "7" @@ -5252,7 +5013,6 @@ "mimetypes" "6" "freedesktop.org.xml" "7" "f1.png" "7" -"utils_global.h" "4" "utilsicons.cpp" "4" "utilsicons.h" "4" "variablechooser.cpp" "4" @@ -5280,10 +5040,8 @@ "detail" "6" "bool_type.h" "7" "impl.h" "7" -"iterator.h" "7" "iterator_fwd.h" "7" "memory.h" "7" -"node.h" "7" "node_data.h" "7" "node_iterator.h" "7" "node_ref.h" "7" @@ -5333,7 +5091,6 @@ "exp.h" "5" "indentation.h" "5" "memory.cpp" "5" -"node.cpp" "5" "node_data.cpp" "5" "nodebuilder.cpp" "5" "nodebuilder.h" "5" @@ -5390,7 +5147,6 @@ "androiddevice@2x.png" "7" "androiddevicesmall.png" "7" "androiddevicesmall@2x.png" "7" -"android_global.h" "4" "androidavdmanager.cpp" "4" "androidavdmanager.h" "4" "androidbuildapkstep.cpp" "4" @@ -5461,7 +5217,6 @@ "androidsdkpackage.h" "4" "androidservicewidget.cpp" "4" "androidservicewidget.h" "4" -"androidservicewidget_p.h" "4" "androidsettingswidget.cpp" "4" "androidsettingswidget.h" "4" "androidsettingswidget.ui" "4" @@ -5758,7 +5513,6 @@ "text@2x.png" "6" "visual.png" "6" "visual@2x.png" "6" -"autotest_global.h" "3" "autotestconstants.h" "3" "autotesticons.h" "3" "autotestplugin.cpp" "3" @@ -6116,7 +5870,6 @@ "qdbdevice@2x.png" "7" "qdbdevicesmall.png" "7" "qdbdevicesmall@2x.png" "7" -"qdb_global.h" "4" "qdbconstants.h" "4" "qdbdeployconfigurationfactory.cpp" "4" "qdbdeployconfigurationfactory.h" "4" @@ -6714,13 +6467,10 @@ "coreplugin.qbs:179" "5" "actioncontainer.cpp" "5" "actioncontainer.h" "5" -"actioncontainer_p.h" "5" "actionmanager.cpp" "5" "actionmanager.h" "5" -"actionmanager_p.h" "5" "command.cpp" "5" "command.h" "5" -"command_p.h" "5" "commandbutton.cpp" "5" "commandbutton.h" "5" "commandmappings.cpp" "5" @@ -6768,12 +6518,10 @@ "coreplugin.qbs:213" "5" "documentmodel.cpp" "5" "documentmodel.h" "5" -"documentmodel_p.h" "5" "editorarea.cpp" "5" "editorarea.h" "5" "editormanager.cpp" "5" "editormanager.h" "5" -"editormanager_p.h" "5" "editorview.cpp" "5" "editorview.h" "5" "editorwindow.cpp" "5" @@ -6782,7 +6530,6 @@ "ieditor.h" "5" "ieditorfactory.cpp" "5" "ieditorfactory.h" "5" -"ieditorfactory_p.h" "5" "iexternaleditor.cpp" "5" "iexternaleditor.h" "5" "openeditorsview.cpp" "5" @@ -6861,7 +6608,6 @@ "settingscategory_core@2x.png" "8" "settingscategory_design.png" "8" "settingscategory_design@2x.png" "8" -"core_global.h" "5" "coreconstants.h" "5" "coreicons.cpp" "5" "coreicons.h" "5" @@ -6888,12 +6634,8 @@ "fancyactionbar.qrc" "5" "/fancyactionbar" "6" "images" "7" -"mode_Design.png" "8" -"mode_Design@2x.png" "8" "mode_design_mask.png" "8" "mode_design_mask@2x.png" "8" -"mode_Edit.png" "8" -"mode_Edit@2x.png" "8" "mode_edit_mask.png" "8" "mode_edit_mask@2x.png" "8" "fancytabwidget.cpp" "5" @@ -6915,7 +6657,6 @@ "helpitem.h" "5" "helpmanager.cpp" "5" "helpmanager.h" "5" -"helpmanager_implementation.h" "5" "icontext.cpp" "5" "icontext.h" "5" "icore.cpp" "5" @@ -7060,7 +6801,6 @@ "progressbar.h" "5" "progressmanager.cpp" "5" "progressmanager.h" "5" -"progressmanager_p.h" "5" "progressview.cpp" "5" "progressview.h" "5" "ProgressManager_mac" "4" @@ -7292,7 +7032,6 @@ "qt_c.png" "6" "qt_cpp.png" "6" "qt_h.png" "6" -"cppeditor_global.h" "3" "cppeditorconstants.h" "3" "cppeditordocument.cpp" "3" "cppeditordocument.h" "3" @@ -7575,21 +7314,15 @@ "breakpoint_pending_overlay.png" "8" "breakpoint_pending_overlay@2x.png" "8" "debugger_breakpoints.png" "8" -"debugger_continue.png" "8" -"debugger_continue@2x.png" "8" "debugger_continue_1_mask.png" "8" "debugger_continue_1_mask@2x.png" "8" "debugger_continue_2_mask.png" "8" "debugger_continue_2_mask@2x.png" "8" "debugger_empty_14.png" "8" -"debugger_interrupt.png" "8" -"debugger_interrupt@2x.png" "8" "debugger_interrupt_mask.png" "8" "debugger_interrupt_mask@2x.png" "8" "debugger_restart_small.png" "8" "debugger_restart_small@2x.png" "8" -"debugger_reversemode.png" "8" -"debugger_reversemode@2x.png" "8" "debugger_reversemode_background.png" "8" "debugger_reversemode_background@2x.png" "8" "debugger_singleinstructionmode.png" "8" @@ -7600,16 +7333,10 @@ "debugger_stepout_small@2x.png" "8" "debugger_stepover_small.png" "8" "debugger_stepover_small@2x.png" "8" -"debugger_stop.png" "8" -"debugger_stop@2x.png" "8" "debugger_stop_mask.png" "8" "debugger_stop_mask@2x.png" "8" -"location.png" "8" -"location@2x.png" "8" "location_background.png" "8" "location_background@2x.png" "8" -"macos_touchbar_debug.png" "8" -"macos_touchbar_debug@2x.png" "8" "macos_touchbar_debug_continue.png" "8" "macos_touchbar_debug_continue@2x.png" "8" "macos_touchbar_debug_exit.png" "8" @@ -7622,8 +7349,6 @@ "macos_touchbar_debug_step_out@2x.png" "8" "macos_touchbar_debug_step_over.png" "8" "macos_touchbar_debug_step_over@2x.png" "8" -"mode_debug.png" "8" -"mode_debug@2x.png" "8" "mode_debug_mask.png" "8" "mode_debug_mask@2x.png" "8" "pin.xpm" "8" @@ -7635,7 +7360,6 @@ "settingscategory_debugger@2x.png" "8" "tracepointoverlay.png" "8" "tracepointoverlay@2x.png" "8" -"debugger_global.h" "5" "debuggeractions.cpp" "5" "debuggeractions.h" "5" "debuggerconstants.h" "5" @@ -7731,21 +7455,15 @@ "breakpoint_pending_overlay.png" "5" "breakpoint_pending_overlay@2x.png" "5" "debugger_breakpoints.png" "5" -"debugger_continue.png" "5" -"debugger_continue@2x.png" "5" "debugger_continue_1_mask.png" "5" "debugger_continue_1_mask@2x.png" "5" "debugger_continue_2_mask.png" "5" "debugger_continue_2_mask@2x.png" "5" "debugger_empty_14.png" "5" -"debugger_interrupt.png" "5" -"debugger_interrupt@2x.png" "5" "debugger_interrupt_mask.png" "5" "debugger_interrupt_mask@2x.png" "5" "debugger_restart_small.png" "5" "debugger_restart_small@2x.png" "5" -"debugger_reversemode.png" "5" -"debugger_reversemode@2x.png" "5" "debugger_reversemode_background.png" "5" "debugger_reversemode_background@2x.png" "5" "debugger_singleinstructionmode.png" "5" @@ -7756,16 +7474,10 @@ "debugger_stepout_small@2x.png" "5" "debugger_stepover_small.png" "5" "debugger_stepover_small@2x.png" "5" -"debugger_stop.png" "5" -"debugger_stop@2x.png" "5" "debugger_stop_mask.png" "5" "debugger_stop_mask@2x.png" "5" -"location.png" "5" -"location@2x.png" "5" "location_background.png" "5" "location_background@2x.png" "5" -"macos_touchbar_debug.png" "5" -"macos_touchbar_debug@2x.png" "5" "macos_touchbar_debug_continue.png" "5" "macos_touchbar_debug_continue@2x.png" "5" "macos_touchbar_debug_exit.png" "5" @@ -7778,8 +7490,6 @@ "macos_touchbar_debug_step_out@2x.png" "5" "macos_touchbar_debug_step_over.png" "5" "macos_touchbar_debug_step_over@2x.png" "5" -"mode_debug.png" "5" -"mode_debug@2x.png" "5" "mode_debug_mask.png" "5" "mode_debug_mask@2x.png" "5" "pin.xpm" "5" @@ -7968,7 +7678,6 @@ "topbar@2x.png" "6" "unifieddiff.png" "6" "unifieddiff@2x.png" "6" -"diffeditor_global.h" "3" "diffeditorconstants.h" "3" "diffeditorcontroller.cpp" "3" "diffeditorcontroller.h" "3" @@ -8270,8 +7979,6 @@ "images" "7" "macos_touchbar_help.png" "8" "macos_touchbar_help@2x.png" "8" -"mode_help.png" "8" -"mode_help@2x.png" "8" "mode_help_mask.png" "8" "mode_help_mask@2x.png" "8" "settingscategory_help.png" "8" @@ -8467,7 +8174,6 @@ "languageclient@2x.png" "6" "settingscategory_languageclient.png" "6" "settingscategory_languageclient@2x.png" "6" -"languageclient_global.h" "3" "languageclientcompletionassist.cpp" "3" "languageclientcompletionassist.h" "3" "languageclientformatter.cpp" "3" @@ -8504,10 +8210,6 @@ "snippet.h" "3" "LogoImages" "2" "logo.qbs:3" "3" -"128x128" "3" -"logo.qbs:42" "4" -"128" "4" -"QtProject-qtcreator.png" "5" "16x16" "3" "logo.qbs:7" "4" "16" "4" @@ -8516,10 +8218,6 @@ "logo.qbs:14" "4" "24" "4" "QtProject-qtcreator.png" "5" -"256x256" "3" -"logo.qbs:49" "4" -"256" "4" -"QtProject-qtcreator.png" "5" "32x32" "3" "logo.qbs:21" "4" "32" "4" @@ -8528,14 +8226,22 @@ "logo.qbs:28" "4" "48" "4" "QtProject-qtcreator.png" "5" -"512x512" "3" -"logo.qbs:56" "4" -"512" "4" -"QtProject-qtcreator.png" "5" "64x64" "3" "logo.qbs:35" "4" "64" "4" "QtProject-qtcreator.png" "5" +"128x128" "3" +"logo.qbs:42" "4" +"128" "4" +"QtProject-qtcreator.png" "5" +"256x256" "3" +"logo.qbs:49" "4" +"256" "4" +"QtProject-qtcreator.png" "5" +"512x512" "3" +"logo.qbs:56" "4" +"512" "4" +"QtProject-qtcreator.png" "5" "Macros" "2" "macros.qbs:3" "3" "PluginMetaData" "3" @@ -8628,7 +8334,6 @@ "wizard.json" "7" "icon.png" "6" "icon@2x.png" "6" -"mcusupport_global.h" "3" "mcusupportcmakemapper.cpp" "3" "mcusupportcmakemapper.h" "3" "mcusupportconstants.h" "3" @@ -8910,8 +8615,6 @@ "jsextension.h" "3" "modeldocument.cpp" "3" "modeldocument.h" "3" -"modeleditor.cpp" "3" -"modeleditor.h" "3" "modeleditor_constants.h" "3" "modeleditor_global.h" "3" "modeleditor_plugin.cpp" "3" @@ -9107,7 +8810,6 @@ "tracepoints.sh" "5" "/QtCreator/PerfProfiler" "4" "PerfProfilerFlameGraphView.qml" "5" -"perfprofiler_global.h" "3" "perfprofilerconstants.h" "3" "perfprofilerflamegraphmodel.cpp" "3" "perfprofilerflamegraphmodel.h" "3" @@ -9381,8 +9083,6 @@ "images" "7" "analyzer_overlay_small.png" "8" "analyzer_overlay_small@2x.png" "8" -"build.png" "8" -"build@2x.png" "8" "build_hammerhandle_mask.png" "8" "build_hammerhandle_mask@2x.png" "8" "build_hammerhead_mask.png" "8" @@ -9444,8 +9144,6 @@ "fileoverlay_unknown@2x.png" "8" "importasproject.png" "8" "importasproject@2x.png" "8" -"mode_project.png" "8" -"mode_project@2x.png" "8" "mode_project_mask.png" "8" "mode_project_mask@2x.png" "8" "ProjectDependencies.png" "8" @@ -9453,8 +9151,6 @@ "rebuildhammerhandles@2x.png" "8" "rebuildhammerheads.png" "8" "rebuildhammerheads@2x.png" "8" -"run.png" "8" -"run@2x.png" "8" "run_mask.png" "8" "run_mask@2x.png" "8" "RunSettings.png" "8" @@ -9469,7 +9165,6 @@ "targetpanel_bottom.png" "8" "unconfigured.png" "8" "window.png" "8" -"projectexplorer_export.h" "5" "projectexplorerconstants.cpp" "5" "projectexplorerconstants.h" "5" "projectexplorericons.cpp" "5" @@ -9570,8 +9265,6 @@ "projectexplorer.qbs:235" "5" "analyzer_overlay_small.png" "5" "analyzer_overlay_small@2x.png" "5" -"build.png" "5" -"build@2x.png" "5" "build_32.png" "5" "build_hammerhandle_mask.png" "5" "build_hammerhandle_mask@2x.png" "5" @@ -9636,8 +9329,6 @@ "findproject.png" "5" "importasproject.png" "5" "importasproject@2x.png" "5" -"mode_project.png" "5" -"mode_project@2x.png" "5" "mode_project_mask.png" "5" "mode_project_mask@2x.png" "5" "ProjectDependencies.png" "5" @@ -9645,8 +9336,6 @@ "rebuildhammerhandles@2x.png" "5" "rebuildhammerheads.png" "5" "rebuildhammerheads@2x.png" "5" -"run.png" "5" -"run@2x.png" "5" "run_mask.png" "5" "run_mask@2x.png" "5" "RunSettings.png" "5" @@ -9665,7 +9354,6 @@ "projectexplorer.qbs:175" "5" "jsonfieldpage.cpp" "5" "jsonfieldpage.h" "5" -"jsonfieldpage_p.h" "5" "jsonfilepage.cpp" "5" "jsonfilepage.h" "5" "jsonkitspage.cpp" "5" @@ -9682,8 +9370,6 @@ "jsonwizardfilegenerator.h" "5" "jsonwizardgeneratorfactory.cpp" "5" "jsonwizardgeneratorfactory.h" "5" -"jsonwizardpagefactory.cpp" "5" -"jsonwizardpagefactory.h" "5" "jsonwizardpagefactory_p.cpp" "5" "jsonwizardpagefactory_p.h" "5" "jsonwizardscannergenerator.cpp" "5" @@ -9781,7 +9467,6 @@ "QbsProjectManager.json.in" "4" "qbs qml type info" "3" "qbsprojectmanager.qbs:68" "4" -"qbs-bundle.json" "4" "qbs.qmltypes" "4" "standard pch file (gui)" "3" "QtcProduct.qbs:100" "4" @@ -9828,7 +9513,6 @@ "images" "5" "settingscategory_qbsprojectmanager.png" "6" "settingscategory_qbsprojectmanager@2x.png" "6" -"qbsprojectmanager_global.h" "3" "qbsprojectmanagerconstants.h" "3" "qbsprojectmanagerplugin.cpp" "3" "qbsprojectmanagerplugin.h" "3" @@ -9907,7 +9591,6 @@ "dark_headers.png" "8" "dark_sources.png" "8" "dark_unknown.png" "8" -"qmakeprojectmanager_global.h" "5" "qmakeprojectmanagerconstants.h" "5" "qmakeprojectmanagerplugin.cpp" "5" "qmakeprojectmanagerplugin.h" "5" @@ -10204,9 +9887,6 @@ "global_record_keyframes@2x.png" "10" "is_keyframe.png" "10" "is_keyframe@2x.png" "10" -"keyframe-16px.png" "10" -"keyframe.png" "10" -"keyframe@2x.png" "10" "keyframe_autobezier_active.png" "10" "keyframe_autobezier_active@2x.png" "10" "keyframe_autobezier_inactive.png" "10" @@ -10610,7 +10290,6 @@ "import.cpp" "7" "internalbindingproperty.cpp" "7" "internalbindingproperty.h" "7" -"internalnode.cpp" "7" "internalnode_p.h" "7" "internalnodeabstractproperty.cpp" "7" "internalnodeabstractproperty.h" "7" @@ -10624,7 +10303,6 @@ "internalsignalhandlerproperty.h" "7" "internalvariantproperty.cpp" "7" "internalvariantproperty.h" "7" -"model.cpp" "7" "model_p.h" "7" "modelmerger.cpp" "7" "modelnode.cpp" "7" @@ -10700,7 +10378,6 @@ "raise@2x.png" "10" "row.png" "10" "row@2x.png" "10" -"componentcore_constants.h" "7" "crumblebar.cpp" "7" "crumblebar.h" "7" "designeractionmanager.cpp" "7" @@ -10715,8 +10392,6 @@ "hdrimage.h" "7" "layoutingridlayout.cpp" "7" "layoutingridlayout.h" "7" -"modelnodecontextmenu.cpp" "7" -"modelnodecontextmenu.h" "7" "modelnodecontextmenu_helper.cpp" "7" "modelnodecontextmenu_helper.h" "7" "modelnodeoperations.cpp" "7" @@ -10828,8 +10503,6 @@ "scrubhandle-48.png" "9" "scrubhandle-disabled-24.png" "9" "scrubhandle-disabled-48.png" "9" -"snapping.png" "9" -"snapping@2x.png" "9" "snapping_and_anchoring.png" "9" "snapping_and_anchoring@2x.png" "9" "formeditorannotationicon.cpp" "7" @@ -10930,30 +10603,30 @@ "itemlibrary.qrc" "7" "/ItemLibrary" "8" "images" "9" -"asset_font_128.png" "10" -"asset_font_192.png" "10" -"asset_font_256.png" "10" "asset_font_32.png" "10" -"asset_font_384.png" "10" "asset_font_48.png" "10" "asset_font_64.png" "10" "asset_font_96.png" "10" -"asset_shader_128.png" "10" -"asset_shader_192.png" "10" -"asset_shader_256.png" "10" +"asset_font_128.png" "10" +"asset_font_192.png" "10" +"asset_font_256.png" "10" +"asset_font_384.png" "10" "asset_shader_32.png" "10" -"asset_shader_384.png" "10" "asset_shader_48.png" "10" "asset_shader_64.png" "10" "asset_shader_96.png" "10" -"asset_sound_128.png" "10" -"asset_sound_192.png" "10" -"asset_sound_256.png" "10" +"asset_shader_128.png" "10" +"asset_shader_192.png" "10" +"asset_shader_256.png" "10" +"asset_shader_384.png" "10" "asset_sound_32.png" "10" -"asset_sound_384.png" "10" "asset_sound_48.png" "10" "asset_sound_64.png" "10" "asset_sound_96.png" "10" +"asset_sound_128.png" "10" +"asset_sound_192.png" "10" +"asset_sound_256.png" "10" +"asset_sound_384.png" "10" "browse.png" "10" "browse@2x.png" "10" "item-3D_model-icon.png" "10" @@ -11163,76 +10836,55 @@ "qtquickplugin.qbs:23" "5" "images" "5" "animated-image-icon.png" "6" -"animated-image-icon16.png" "6" "animated-image-icon@2x.png" "6" "audio-output-16px.png" "6" "audio-output-24px.png" "6" "audio-output-24px@2x.png" "6" "border-image-icon.png" "6" -"border-image-icon16.png" "6" "border-image-icon@2x.png" "6" -"column-positioner-icon-16px.png" "6" "column-positioner-icon.png" "6" "column-positioner-icon@2x.png" "6" "component-icon.png" "6" -"component-icon16.png" "6" "component-icon@2x.png" "6" "default-icon.png" "6" "flickable-icon.png" "6" -"flickable-icon16.png" "6" "flickable-icon@2x.png" "6" "flipable-icon.png" "6" "flipable-icon16.png" "6" -"flow-positioner-icon-16px.png" "6" "flow-positioner-icon.png" "6" "flow-positioner-icon@2x.png" "6" "focusscope-icon.png" "6" -"focusscope-icon16.png" "6" "focusscope-icon@2x.png" "6" -"grid-positioner-icon-16px.png" "6" "grid-positioner-icon.png" "6" "grid-positioner-icon@2x.png" "6" "gridview-icon.png" "6" -"gridview-icon16.png" "6" "gridview-icon@2x.png" "6" "image-icon.png" "6" -"image-icon16.png" "6" "image-icon@2x.png" "6" "item-icon.png" "6" -"item-icon16.png" "6" "item-icon@2x.png" "6" "listview-icon.png" "6" -"listview-icon16.png" "6" "listview-icon@2x.png" "6" "loader-icon.png" "6" -"loader-icon16.png" "6" "loader-icon@2x.png" "6" "media-player-16px.png" "6" "media-player-24px.png" "6" "media-player-24px@2x.png" "6" "mouse-area-icon.png" "6" -"mouse-area-icon16.png" "6" "mouse-area-icon@2x.png" "6" "pathview-icon.png" "6" -"pathview-icon16.png" "6" "pathview-icon@2x.png" "6" "rect-icon.png" "6" -"rect-icon16.png" "6" "rect-icon@2x.png" "6" "repeater-icon.png" "6" -"repeater-icon16.png" "6" "repeater-icon@2x.png" "6" -"row-positioner-icon-16px.png" "6" "row-positioner-icon.png" "6" "row-positioner-icon@2x.png" "6" "text-edit-icon.png" "6" -"text-edit-icon16.png" "6" "text-edit-icon@2x.png" "6" "text-icon.png" "6" -"text-icon16.png" "6" "text-icon@2x.png" "6" "text-input-icon.png" "6" -"text-input-icon16.png" "6" "text-input-icon@2x.png" "6" "video-16px.png" "6" "video-24px.png" "6" @@ -11262,76 +10914,55 @@ "/qtquickplugin" "5" "images" "6" "animated-image-icon.png" "7" -"animated-image-icon16.png" "7" "animated-image-icon@2x.png" "7" "audio-output-16px.png" "7" "audio-output-24px.png" "7" "audio-output-24px@2x.png" "7" "border-image-icon.png" "7" -"border-image-icon16.png" "7" "border-image-icon@2x.png" "7" -"column-positioner-icon-16px.png" "7" "column-positioner-icon.png" "7" "column-positioner-icon@2x.png" "7" "component-icon.png" "7" -"component-icon16.png" "7" "component-icon@2x.png" "7" "default-icon.png" "7" "flickable-icon.png" "7" -"flickable-icon16.png" "7" "flickable-icon@2x.png" "7" "flipable-icon.png" "7" "flipable-icon16.png" "7" -"flow-positioner-icon-16px.png" "7" "flow-positioner-icon.png" "7" "flow-positioner-icon@2x.png" "7" "focusscope-icon.png" "7" -"focusscope-icon16.png" "7" "focusscope-icon@2x.png" "7" -"grid-positioner-icon-16px.png" "7" "grid-positioner-icon.png" "7" "grid-positioner-icon@2x.png" "7" "gridview-icon.png" "7" -"gridview-icon16.png" "7" "gridview-icon@2x.png" "7" "image-icon.png" "7" -"image-icon16.png" "7" "image-icon@2x.png" "7" "item-icon.png" "7" -"item-icon16.png" "7" "item-icon@2x.png" "7" "listview-icon.png" "7" -"listview-icon16.png" "7" "listview-icon@2x.png" "7" "loader-icon.png" "7" -"loader-icon16.png" "7" "loader-icon@2x.png" "7" "media-player-16px.png" "7" "media-player-24px.png" "7" "media-player-24px@2x.png" "7" "mouse-area-icon.png" "7" -"mouse-area-icon16.png" "7" "mouse-area-icon@2x.png" "7" "pathview-icon.png" "7" -"pathview-icon16.png" "7" "pathview-icon@2x.png" "7" "rect-icon.png" "7" -"rect-icon16.png" "7" "rect-icon@2x.png" "7" "repeater-icon.png" "7" -"repeater-icon16.png" "7" "repeater-icon@2x.png" "7" -"row-positioner-icon-16px.png" "7" "row-positioner-icon.png" "7" "row-positioner-icon@2x.png" "7" "text-edit-icon.png" "7" -"text-edit-icon16.png" "7" "text-edit-icon@2x.png" "7" "text-icon.png" "7" -"text-icon16.png" "7" "text-icon@2x.png" "7" "text-input-icon.png" "7" -"text-input-icon16.png" "7" "text-input-icon@2x.png" "7" "video-16px.png" "7" "video-24px.png" "7" @@ -11387,11 +11018,9 @@ "qmljseditingsettingspage.ui" "3" "qmljseditor.cpp" "3" "qmljseditor.h" "3" -"qmljseditor_global.h" "3" "qmljseditorconstants.h" "3" "qmljseditordocument.cpp" "3" "qmljseditordocument.h" "3" -"qmljseditordocument_p.h" "3" "qmljseditorplugin.cpp" "3" "qmljseditorplugin.h" "3" "qmljsfindreferences.cpp" "3" @@ -11467,7 +11096,6 @@ "images" "5" "settingscategory_qml.png" "6" "settingscategory_qml@2x.png" "6" -"qmljstools_global.h" "3" "qmljstoolsconstants.h" "3" "qmljstoolsplugin.cpp" "3" "qmljstoolsplugin.h" "3" @@ -11715,7 +11343,6 @@ "qnxdevice@2x.png" "6" "qnxdevicesmall.png" "6" "qnxdevicesmall@2x.png" "6" -"qnx_export.h" "3" "qnxanalyzesupport.cpp" "3" "qnxanalyzesupport.h" "3" "qnxbaseqtconfigwidget.cpp" "3" @@ -11790,14 +11417,12 @@ "qmakebuiltins.cpp" "5" "qmakeevaluator.cpp" "5" "qmakeevaluator.h" "5" -"qmakeevaluator_p.h" "5" "qmakeglobals.cpp" "5" "qmakeglobals.h" "5" "qmakeparser.cpp" "5" "qmakeparser.h" "5" "qmakevfs.cpp" "5" "qmakevfs.h" "5" -"registry.cpp" "5" "registry_p.h" "5" "QtVersion" "4" "qtsupport.qbs:111" "5" @@ -11858,7 +11483,6 @@ "dark_qt_qrc.png" "7" "images_areaofinterest.xml" "6" "qtcreator_tutorials.xml" "6" -"qtsupport_global.h" "4" "qtsupportconstants.h" "4" "qtsupportplugin.cpp" "4" "qtsupportplugin.h" "4" @@ -11931,8 +11555,6 @@ "/remotelinux" "5" "images" "6" "embeddedtarget.png" "7" -"remotelinux_constants.h" "4" -"remotelinux_export.h" "4" "remotelinuxcheckforfreediskspaceservice.cpp" "4" "remotelinuxcheckforfreediskspaceservice.h" "4" "remotelinuxcheckforfreediskspacestep.cpp" "4" @@ -12001,11 +11623,9 @@ "qrceditor.cpp" "5" "qrceditor.h" "5" "qrceditor.ui" "5" -"resourcefile.cpp" "5" "resourcefile_p.h" "5" "resourceview.cpp" "5" "resourceview.h" "5" -"undocommands.cpp" "5" "undocommands_p.h" "5" "standard pch file (gui)" "4" "QtcProduct.qbs:100" "5" @@ -12064,9 +11684,7 @@ "initial.png" "7" "more_colors.png" "7" "navigator.png" "7" -"parallel.png" "7" "parallel_icon.png" "7" -"state.png" "7" "state_color.png" "7" "statistics.png" "7" "dragshapebutton.cpp" "4" @@ -12542,8 +12160,6 @@ "settingscategory_texteditor.png" "7" "settingscategory_texteditor@2x.png" "7" "snippet.png" "7" -"texteditor_global.h" "4" -"texteditor_p.h" "4" "texteditoractionhandler.cpp" "4" "texteditoractionhandler.h" "4" "texteditorconstants.cpp" "4" @@ -12657,7 +12273,6 @@ "callgrinddatamodel.h" "4" "callgrindfunction.cpp" "4" "callgrindfunction.h" "4" -"callgrindfunction_p.h" "4" "callgrindfunctioncall.cpp" "4" "callgrindfunctioncall.h" "4" "callgrindfunctioncycle.cpp" "4" @@ -12810,7 +12425,6 @@ "submit_arrow@2x.png" "6" "submit_db.png" "6" "submit_db@2x.png" "6" -"vcsbase_global.h" "3" "vcsbaseclient.cpp" "3" "vcsbaseclient.h" "3" "vcsbaseclientsettings.cpp" "3" @@ -12854,7 +12468,6 @@ "webassemblydevice@2x.png" "6" "webassemblydevicesmall.png" "6" "webassemblydevicesmall@2x.png" "6" -"webassembly_global.h" "3" "webassemblyconstants.h" "3" "webassemblydevice.cpp" "3" "webassemblydevice.h" "3" @@ -12899,8 +12512,6 @@ "download@2x.png" "6" "expandarrow.png" "6" "expandarrow@2x.png" "6" -"mode_welcome.png" "6" -"mode_welcome@2x.png" "6" "mode_welcome_mask.png" "6" "mode_welcome_mask@2x.png" "6" "new.png" "6" @@ -13877,10 +13488,6 @@ "identifier-expansion.4.out.cpp" "5" "identifier-expansion.5.cpp" "5" "identifier-expansion.5.out.cpp" "5" -"macro-test.cpp" "5" -"macro-test.out.cpp" "5" -"macro_expand.c" "5" -"macro_expand.out.c" "5" "macro_expand_1.cpp" "5" "macro_expand_1.out.cpp" "5" "macro_pounder_fn.c" "5" @@ -14133,10 +13740,7 @@ "test specs" "5" "test.qbs:17" "6" "testspecs" "6" -"simplespec.json" "7" "simplespec_experimental.json" "7" -"spec1.json" "7" -"spec2.json" "7" "spec_wrong2.json" "7" "spec_wrong3.json" "7" "spec_wrong4.json" "7" @@ -14145,7 +13749,6 @@ "testplugin.qbs:4" "5" "testplugin.cpp" "5" "testplugin.h" "5" -"testplugin_global.h" "5" "PluginManager autotests" "3" "pluginmanager.qbs:3" "4" "ExtensionSystem cirular plugins autotests" "4" @@ -14264,14 +13867,12 @@ "qmakebuiltins.cpp" "4" "qmakeevaluator.cpp" "4" "qmakeevaluator.h" "4" -"qmakeevaluator_p.h" "4" "qmakeglobals.cpp" "4" "qmakeglobals.h" "4" "qmakeparser.cpp" "4" "qmakeparser.h" "4" "qmakevfs.cpp" "4" "qmakevfs.h" "4" -"registry.cpp" "4" "registry_p.h" "4" "standard pch file (gui)" "3" "QtcProduct.qbs:100" "4" @@ -14774,7 +14375,6 @@ "callgrinddatamodel.h" "6" "callgrindfunction.cpp" "6" "callgrindfunction.h" "6" -"callgrindfunction_p.h" "6" "callgrindfunctioncall.cpp" "6" "callgrindfunctioncall.h" "6" "callgrindfunctioncycle.cpp" "6" @@ -14842,7 +14442,6 @@ "design.creatortheme" "7" "flat-dark.creatortheme" "7" "flat-light.creatortheme" "7" -"flat.creatortheme" "7" "themeselector.cpp" "5" "themeselector.h" "5" "tst_manual_widgets_tracing.cpp" "4" @@ -14857,7 +14456,6 @@ "design.creatortheme" "7" "flat-dark.creatortheme" "7" "flat-light.creatortheme" "7" -"flat.creatortheme" "7" "themeselector.cpp" "5" "themeselector.h" "5" "tst_manual_widgets_crumblepath.cpp" "4" @@ -14872,7 +14470,6 @@ "design.creatortheme" "7" "flat-dark.creatortheme" "7" "flat-light.creatortheme" "7" -"flat.creatortheme" "7" "themeselector.cpp" "5" "themeselector.h" "5" "tst_manual_widgets_infolabel.cpp" "4" @@ -14887,7 +14484,6 @@ "design.creatortheme" "7" "flat-dark.creatortheme" "7" "flat-light.creatortheme" "7" -"flat.creatortheme" "7" "themeselector.cpp" "5" "themeselector.h" "5" "tst_manual_widgets_manhattanstyle.cpp" "4" From fd6e45c407afd944a36a90441259de49f937d0d1 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Tue, 16 Jan 2024 09:19:16 +0100 Subject: [PATCH 36/41] Doc: Fix supported Linux platform Qt 6.6 officially no longer supports Ubuntu 20.04. Even though it mostly works, some parts like openssl (for https connections) do not work (out of the box) Change-Id: I5133e94048d3014475678ab849a61ccc62331df4 Reviewed-by: Leena Miettinen --- README.md | 5 ++++- .../src/overview/creator-only/creator-desktop-platforms.qdoc | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6fc7918fd14..b80d9279913 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,12 @@ https://doc.qt.io/qtcreator/creator-overview.html The standalone binary packages support the following platforms: * Windows 10 (64-bit) or later -* (K)Ubuntu Linux 20.04 (64-bit) or later +* (K)Ubuntu Linux 22.04 (64-bit) or later * macOS 11 or later +When you compile Qt Creator yourself, the Qt version that you build with +determines the supported platforms. + ## Contributing For instructions on how to set up the Qt Creator repository to contribute diff --git a/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc b/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc index 9626d41f837..fa69e12be39 100644 --- a/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc +++ b/doc/qtcreator/src/overview/creator-only/creator-desktop-platforms.qdoc @@ -25,7 +25,7 @@ \section1 Linux - (K)Ubuntu Linux 20.04 (64-bit) or later is supported. + (K)Ubuntu Linux 22.04 (64-bit) or later is supported. To build Qt applications using \QC on Linux, you usually need the following: From 5aeeb7448817b7a036c7352c8c736d7e39f89db1 Mon Sep 17 00:00:00 2001 From: Yasser Grimes Date: Fri, 5 Jan 2024 20:37:58 +0200 Subject: [PATCH 37/41] McuSupport: Support prioritizing import paths Some QtQuick import paths in QtMCUs contain incomplete modules and Used for other purposes but it shadows the correct import path With this patch it will be possible to reshuffle the import by any import provider Fixes: QTCREATORBUG-29681 Change-Id: I5a17df6ca2587ae88643b1ca08f9e84998d51cc2 Reviewed-by: Reviewed-by: hjk --- src/libs/qmljs/qmljsinterpreter.h | 5 ++++ src/libs/qmljs/qmljslink.cpp | 1 + .../mcusupport/mcusupportimportprovider.cpp | 25 +++++++++++++++++++ .../mcusupport/mcusupportimportprovider.h | 3 +++ 4 files changed, 34 insertions(+) diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h index 8ca9f4ec26c..9ea0f450218 100644 --- a/src/libs/qmljs/qmljsinterpreter.h +++ b/src/libs/qmljs/qmljsinterpreter.h @@ -1125,6 +1125,11 @@ public: [[maybe_unused]] const Document *context, [[maybe_unused]] ValueOwner *valueOwner, [[maybe_unused]] Snapshot *snapshot) {} + virtual Utils::FilePaths prioritizeImportPaths([[maybe_unused]] const Document *context, + const Utils::FilePaths &importPaths) + { + return importPaths; + } }; } // namespace QmlJS diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp index b837037b7c8..97c00e1c8d9 100644 --- a/src/libs/qmljs/qmljslink.cpp +++ b/src/libs/qmljs/qmljslink.cpp @@ -219,6 +219,7 @@ Context::ImportsPerDocument LinkPrivate::linkImports() document.data(), m_valueOwner, &m_snapshot); + m_importPaths = provider->prioritizeImportPaths(document.data(), m_importPaths); } populateImportedTypes(imports, document); diff --git a/src/plugins/mcusupport/mcusupportimportprovider.cpp b/src/plugins/mcusupport/mcusupportimportprovider.cpp index b78baf8bd94..f83dec6cb70 100644 --- a/src/plugins/mcusupport/mcusupportimportprovider.cpp +++ b/src/plugins/mcusupport/mcusupportimportprovider.cpp @@ -119,6 +119,30 @@ void McuSupportImportProvider::loadBuiltins(ImportsPerDocument *importsPerDocume import.info = ImportInfo::moduleImport("qul", {1, 0}, QString()); getInterfacesImport(context->fileName(), importsPerDocument, import, valueOwner, snapshot); imports->append(import); +} + +FilePaths McuSupportImportProvider::prioritizeImportPaths(const Document *context, + const FilePaths &importPaths) +{ + if (!context) + return importPaths; + const std::optional cmakeFilesPathOpt = getTargetBuildFolder(context->fileName()); + if (!cmakeFilesPathOpt) + return importPaths; + FilePaths ret; + // qmltocpp uses an incomplete QtQuick folder present in the build folder + // to avoid taking precedence over the correct qul_install/include/*/StyleDefault + // move the import path to be last + std::copy_if(importPaths.cbegin(), + importPaths.cend(), + std::back_inserter(ret), + [cmakeFilesPathOpt](const FilePath &path) { return path != *cmakeFilesPathOpt; }); + + // nothing was removed + if (ret.size() == importPaths.size()) + return importPaths; + ret.push_back(*cmakeFilesPathOpt); + return ret; }; void McuSupportImportProvider::getInterfacesImport(const FilePath &path, @@ -156,6 +180,7 @@ std::optional McuSupportImportProvider::getFileModule(const FilePath & const FilePath &inputFile) const { const auto doc = QJsonDocument::fromJson(inputFile.fileContents().value_or("")); + if (!doc.isObject()) return {}; diff --git a/src/plugins/mcusupport/mcusupportimportprovider.h b/src/plugins/mcusupport/mcusupportimportprovider.h index 829fa711505..5ed198989be 100644 --- a/src/plugins/mcusupport/mcusupportimportprovider.h +++ b/src/plugins/mcusupport/mcusupportimportprovider.h @@ -29,6 +29,9 @@ public: ValueOwner *valueOwner, Snapshot *snapshot) override; + virtual Utils::FilePaths prioritizeImportPaths(const Document *context, + const Utils::FilePaths &importPaths) override; + // Add to the interfaces needed for a document // path: opened qml document // importsPerDocument: imports available in the document (considered imported) From 34e537a06349e66f674b08ca0b36b694cd53e650 Mon Sep 17 00:00:00 2001 From: Artem Sokolovskii Date: Tue, 19 Dec 2023 16:08:05 +0100 Subject: [PATCH 38/41] ClangFormat: Fix formatting for LineEnding CRLF Change-Id: I10abc07f5d178a7114faba7174ea1bfc80965174 Reviewed-by: David Schulz Reviewed-by: --- src/plugins/clangformat/clangformatbaseindenter.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/clangformat/clangformatbaseindenter.cpp b/src/plugins/clangformat/clangformatbaseindenter.cpp index fcd8b799a41..158d0c48cac 100644 --- a/src/plugins/clangformat/clangformatbaseindenter.cpp +++ b/src/plugins/clangformat/clangformatbaseindenter.cpp @@ -392,6 +392,7 @@ Utils::ChangeSet convertReplacements(const QTextDocument *doc, .size(); QString replacementText = QString::fromStdString(replacement.getReplacementText().str()); + replacementText.replace("\r", ""); auto sameCharAt = [&](int replacementOffset) { if (replacementText.size() <= replacementOffset || replacementOffset < 0) return false; From 7fa70da1591368a4cab3f343e4667dbcb282a419 Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 16 Jan 2024 17:38:48 +0100 Subject: [PATCH 39/41] PE: Set Android ABI to the Abi object instantiation 640a4f0c9cc3a7d31fed16b324a2a1faec0b5a7f introduced caching of qmake output, which includes the supported abis. Unfortunately the Abi::toString and Abi::fromString didn't serialize the m_param value which was used by the Android plugin to specify the Android ABI. This commit will generate the Android ABI from the existing values. Fixes: QTCREATORBUG-30146 Change-Id: I6770faa3953f7b423b36b9e3654a7e270d051571 Reviewed-by: Alessandro Portale Reviewed-by: Marcus Tillmanns --- src/plugins/projectexplorer/abi.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/plugins/projectexplorer/abi.cpp b/src/plugins/projectexplorer/abi.cpp index 07365fc5dd0..d1bd01b89bc 100644 --- a/src/plugins/projectexplorer/abi.cpp +++ b/src/plugins/projectexplorer/abi.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include "abi.h" +#include "projectexplorerconstants.h" #include #include @@ -437,6 +438,18 @@ static Abis abiOf(const QByteArray &data) return result; } +static QString androidAbiFromAbi(const Abi &abi) +{ + QString androidAbi; + if (abi.architecture() == Abi::Architecture::ArmArchitecture) + androidAbi = QLatin1String(abi.wordWidth() == 64 ? Constants::ANDROID_ABI_ARM64_V8A + : Constants::ANDROID_ABI_ARMEABI_V7A); + else + androidAbi = QLatin1String(abi.wordWidth() == 64 ? Constants::ANDROID_ABI_X86_64 + : Constants::ANDROID_ABI_X86); + return androidAbi; +} + // -------------------------------------------------------------------------- // Abi // -------------------------------------------------------------------------- @@ -908,7 +921,11 @@ Abi Abi::fromString(const QString &abiString) return Abi(architecture, os, flavor, format, 0); } - return Abi(architecture, os, flavor, format, wordWidth); + Abi abi(architecture, os, flavor, format, wordWidth); + if (abi.os() == LinuxOS && abi.osFlavor() == AndroidLinuxFlavor) + abi.m_param = androidAbiFromAbi(abi); + + return abi; } Abi::Architecture Abi::architectureFromString(const QString &a) From d5a5088996dd43595fd1cf07a5846ed3c66a441d Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 16 Jan 2024 19:16:58 +0100 Subject: [PATCH 40/41] QtSupport: Increase QtVersionData's version to 3 Qt Creator 12.0.0 has created presistent storage with empty QtAbis list. Qt Creator 12.0.1 has fixed this issue. By increasing the version number to 3 we force the saved data from Qt Creator 12.0.0 to be recreated, and thus fix Android issues with empty QtAbis lists. Also make sure that an empty QtAbis is loaded. Fixes: QTCREATORBUG-30208 Change-Id: I89a9a1ff810304127ff0387b80cb9a13f9740538 Reviewed-by: Marcus Tillmanns --- src/plugins/qtsupport/baseqtversion.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 5e5d29c30d9..de41610cd47 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -78,7 +78,7 @@ class QtVersionData { public: // Update version if you add data members! - static const int version = 2; + static const int version = 3; bool installed = true; bool hasExamples = false; @@ -207,8 +207,11 @@ public: hostDataPath = FilePath::fromSettings(map.value("HostDataPath")); hostPrefixPath = FilePath::fromSettings(map.value("HostPrefixPath")); auto it = map.find("QtAbis"); - if (it != map.end()) - qtAbis = Utils::transform(it.value().toStringList(), &Abi::fromString); + if (it != map.end()) { + const auto qtAbisList = it.value().toStringList(); + if (!qtAbisList.isEmpty()) + qtAbis = Utils::transform(qtAbisList, &Abi::fromString); + } versionInfo = fromStore(map.value("VersionInfo").value()); } }; From 03958b5806c79cd0bd6b996488184b400a585b04 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 16 Jan 2024 09:20:33 +0100 Subject: [PATCH 41/41] CppEditor: avoid endless loop in symbol name lookup Passing and empty text to QString::indexOf returns a 0 index and we advance the start index by the length of the symbol name so we check again from the start. Just assert if we pass an empty symbol name to symbolOccurrencesInText and return an empty list of occurrences to avoid this. Task-number: QTCREATORBUG-30155 Change-Id: I6ad672a3dc2ae9d937fdc436874d07c00997fbf5 Reviewed-by: Christian Kandeler --- src/plugins/cppeditor/cpptoolsreuse.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/cppeditor/cpptoolsreuse.cpp b/src/plugins/cppeditor/cpptoolsreuse.cpp index 06bf220382a..fa1df1e6fe7 100644 --- a/src/plugins/cppeditor/cpptoolsreuse.cpp +++ b/src/plugins/cppeditor/cpptoolsreuse.cpp @@ -782,6 +782,7 @@ SearchResultItems symbolOccurrencesInDeclarationComments( QList symbolOccurrencesInText(const QTextDocument &doc, QStringView text, int offset, const QString &symbolName) { + QTC_ASSERT(!symbolName.isEmpty(), return QList()); QList ranges; int index = 0; while (true) {