From b64863806fdde895399be961c79d6633fbd52723 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 21 Sep 2021 14:31:00 +0200 Subject: [PATCH 01/29] Tests: Fix expectations in offset test Change-Id: I875966409d769fe19e615763c605c527398b01dd Reviewed-by: hjk --- tests/auto/debugger/tst_offsets.cpp | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/tests/auto/debugger/tst_offsets.cpp b/tests/auto/debugger/tst_offsets.cpp index 2309b5296ae..88b8f08dc9b 100644 --- a/tests/auto/debugger/tst_offsets.cpp +++ b/tests/auto/debugger/tst_offsets.cpp @@ -157,7 +157,17 @@ void tst_offsets::offsets_data() const int qtVersion = QT_VERSION; const quintptr qtTypeVersion = qtHookData[6]; - if (qtVersion > 0x50600 && qtTypeVersion >= 17) + if (qtTypeVersion >= 20) +#ifdef Q_OS_WIN +# ifdef Q_CC_MSVC + OFFSET_TEST(QFilePrivate, fileName) << 0 << 304; +# else // MinGW + OFFSET_TEST(QFilePrivate, fileName) << 0 << 304; +# endif +#else + OFFSET_TEST(QFilePrivate, fileName) << 0 << 304; +#endif + else if (qtVersion > 0x50600 && qtTypeVersion >= 17) #ifdef Q_OS_WIN # ifdef Q_CC_MSVC OFFSET_TEST(QFilePrivate, fileName) << 164 << 224; @@ -229,13 +239,16 @@ void tst_offsets::offsets_data() OFFSET_TEST(QFileSystemEntry, m_filePath) << 0 << 0; OFFSET_TEST(QFileInfoPrivate, fileEntry) << 4 << 8; - QTest::newRow("sizeof(QObjectData)") << int(sizeof(QObjectData)) - << 28 << 48; // vptr + 3 ptr + 2 int + ptr + // Qt5: vptr + 3 ptr + 2 int + ptr + // Qt6: vptr + objectlist + 8 unit:1 + uint:24 + int + ptr + bindingstorage + ptr + int size32 = qtVersion >= 0x60000 ? 60 : 28; + int size64 = qtVersion >= 0x60000 ? 80 : 48; + QTest::newRow("sizeof(QObjectData)") << int(sizeof(QObjectData)) << size32 << size64; - if (qtVersion >= 0x50000) - OFFSET_TEST(QObjectPrivate, extraData) << 28 << 48; // sizeof(QObjectData) + if (qtVersion >= 0x50000 && qtTypeVersion < 21) + OFFSET_TEST(QObjectPrivate, extraData) << size32 << size64; // sizeof(QObjectData) else - OFFSET_TEST(QObjectPrivate, extraData) << 32 << 56; // sizeof(QObjectData) + 1 ptr + OFFSET_TEST(QObjectPrivate, extraData) << size32 + 4 << size64 + 8; // sizeof(QObjectData) + 1 ptr #if QT_VERSION < 0x50000 OFFSET_TEST(QObjectPrivate, objectName) << 28 << 48; // sizeof(QObjectData) From 9b16a14ee44db72bc6b14ca89a09d3589c0f4b3c Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 27 Sep 2021 14:04:39 +0200 Subject: [PATCH 02/29] Add change log for 5.0.2 Change-Id: I95ae1e171ff764baf4164a1afcae3cc272211b3e Reviewed-by: Leena Miettinen --- dist/changes-5.0.2.md | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 dist/changes-5.0.2.md diff --git a/dist/changes-5.0.2.md b/dist/changes-5.0.2.md new file mode 100644 index 00000000000..f01fc5e2d8d --- /dev/null +++ b/dist/changes-5.0.2.md @@ -0,0 +1,70 @@ +Qt Creator 5.0.2 +================ + +Qt Creator version 5.0.2 contains bug fixes. + +The most important changes are listed in this document. For a complete list of +changes, see the Git log for the Qt Creator sources that you can check out from +the public Git repository. For example: + + git clone git://code.qt.io/qt-creator/qt-creator.git + git log --cherry-pick --pretty=oneline origin/v5.0.1..v5.0.2 + +Help +---- + +* Fixed that Qt 5 context help was shown even if Qt 6 documentation is available + (QTCREATORBUG-26292) + +Projects +-------- + +* Fixed canceling of builds (QTCREATORBUG-26271) + +### CMake + +* Changed the `File System` special node to be shown only on parsing failure + (QTCREATORBUG-25994, QTCREATORBUG-25974) +* Fixed loading of projects without targets (QTCREATORBUG-25509) +* Fixed that no targets where shown in added build step (QTCREATORBUG-25759) +* Fixed that `ninja` could not be found after changing Qt installation location + (QTCREATORBUG-26289) + +Debugging +--------- + +### GDB + +* Fixed debugging of terminal applications with GDB < 10 (QTCREATORBUG-26299) + +Platforms +--------- + +### macOS + +* Fixed issue with absolute RPATH in `clazy-standalone` (QTCREATORBUG-26196) + +### Android + +* Fixed that wrong deployment file could be used (QTCREATORBUG-25793) + +Credits for these changes go to: +-------------------------------- +Alessandro Portale +Assam Boudjelthia +Christian Kandeler +Christian Stenger +Cristian Adam +Eike Ziller +Henning Gruendl +Ivan Komissarov +Jaroslaw Kobus +Johanna Vanhatapio +Kai Köhne +Knud Dollereder +Leena Miettinen +Mahmoud Badri +Marco Bubke +Orgad Shaneh +Robert Löhning +Thomas Hartmann From a6702d5a2df7836c48c222eff120a25a16059d3f Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Fri, 24 Sep 2021 23:15:17 +0200 Subject: [PATCH 03/29] ProjectExplorer: Fix widths distributions in project welcome page The widths of the "Sessions" and "Projects" lists are not well distributed on Full HD screen width. The sessions are squeezed and the projects are extra wide. Set a stretch factor also on the Settings widget, so that both stretch proportionally. Use a 1 to 3 ratio. This change also removes the setting of struts which does not appear to have any effect and was (by mistake?) assigned to one sublayout, twice. Fixes: QTCREATORBUG-26319 Change-Id: I365a6a6c5d9c2250e3f711cc139d3279f2f5e3b1 Reviewed-by: Eike Ziller Reviewed-by: Christian Stenger --- src/plugins/projectexplorer/projectwelcomepage.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/plugins/projectexplorer/projectwelcomepage.cpp b/src/plugins/projectexplorer/projectwelcomepage.cpp index 9858cb48f39..090cac1d877 100644 --- a/src/plugins/projectexplorer/projectwelcomepage.cpp +++ b/src/plugins/projectexplorer/projectwelcomepage.cpp @@ -614,14 +614,12 @@ public: auto vbox1 = new QVBoxLayout; vbox1->setContentsMargins(0, 0, 0, 0); - vbox1->addStrut(200); vbox1->addItem(hbox11); vbox1->addSpacing(16); vbox1->addWidget(sessionsList); auto vbox2 = new QVBoxLayout; vbox2->setContentsMargins(0, 0, 0, 0); - vbox1->addStrut(200); vbox2->addItem(hbox21); vbox2->addSpacing(16); vbox2->addWidget(projectsList); @@ -629,9 +627,10 @@ public: auto hbox = new QHBoxLayout(this); hbox->setContentsMargins(30, 27, 0, 27); hbox->addItem(vbox1); + hbox->setStretchFactor(vbox1, 1); hbox->addSpacing(16); hbox->addItem(vbox2); - hbox->setStretchFactor(vbox2, 2); + hbox->setStretchFactor(vbox2, 3); } SessionDelegate m_sessionDelegate; From be6ea67bfdd026046cb3bf1bb95251054f9f3506 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 24 Sep 2021 14:10:30 +0200 Subject: [PATCH 04/29] ClangCodeModel: Replace TODO items with links to upstream bug reports Change-Id: Iff1ccf77aca74bc34e2944996e7ef2eb2fcb3bad Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index e9212b3d765..982052dcb9a 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -2187,7 +2187,7 @@ static void collectExtraResults(QFutureInterface // the closing angle brackets, then the inner TemplateSpecialization node's range // will extend one character too far, covering the outer's closing angle bracket. // This is what we are correcting for here. - // TODO: Can we fix this in clang? + // This issue is tracked at https://github.com/clangd/clangd/issues/871. if (searchStart2 == searchEnd2) --searchStart2; insertAngleBracketInfo(nodeStartPos, posForNodeStart(children.at(1)), @@ -2451,8 +2451,8 @@ static void semanticHighlighter(QFutureInterface const AstNode node = path.at(path.length() - 2); if (node.kind() == "CXXDestructor" && !node.arcanaContains("implicit")) { styles.mainStyle = TextEditor::C_FUNCTION; - // TODO: "declaration" modifier is missing for destructors; fix in clangd - // (the scope is also wrong) + + // https://github.com/clangd/clangd/issues/872 if (node.role() == "declaration") styles.mixinStyles.push_back(TextEditor::C_DECLARATION); } From bd39697ca45aa746ebb9e8c35d4f3125c453334a Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 15 Sep 2021 15:30:50 +0200 Subject: [PATCH 05/29] LanguageClient: export LanguageClientCompletionItem Change-Id: Idc1a222d18e2fc64bd33c9bc89e60178c83ee856 Reviewed-by: Christian Kandeler --- .../languageclientcompletionassist.cpp | 33 ----------------- .../languageclientcompletionassist.h | 36 +++++++++++++++++++ 2 files changed, 36 insertions(+), 33 deletions(-) diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp index dd6b6876d4a..f431e3b67f4 100644 --- a/src/plugins/languageclient/languageclientcompletionassist.cpp +++ b/src/plugins/languageclient/languageclientcompletionassist.cpp @@ -31,7 +31,6 @@ #include #include -#include #include #include #include @@ -55,38 +54,6 @@ using namespace TextEditor; namespace LanguageClient { -class LanguageClientCompletionItem : public AssistProposalItemInterface -{ -public: - LanguageClientCompletionItem(CompletionItem item, const CompletionApplyHelper &applyHelper); - - // AssistProposalItemInterface interface - QString text() const override; - QString filterText() const override; - bool implicitlyApplies() const override; - bool prematurelyApplies(const QChar &typedCharacter) const override; - void apply(TextDocumentManipulatorInterface &manipulator, int basePosition) const override; - QIcon icon() const override; - QString detail() const override; - bool isSnippet() const override; - bool isValid() const override; - quint64 hash() const override; - - const QString &sortText() const; - bool hasSortText() const; - - bool operator <(const LanguageClientCompletionItem &other) const; - - bool isPerfectMatch(int pos, QTextDocument *doc) const; - -private: - CompletionItem m_item; - const CompletionApplyHelper m_applyHelper; - mutable QChar m_triggeredCommitCharacter; - mutable QString m_sortText; - mutable QString m_filterText; -}; - LanguageClientCompletionItem::LanguageClientCompletionItem(CompletionItem item, const CompletionApplyHelper &applyHelper) : m_item(std::move(item)), m_applyHelper(applyHelper) diff --git a/src/plugins/languageclient/languageclientcompletionassist.h b/src/plugins/languageclient/languageclientcompletionassist.h index 24f0243326a..e097e98de67 100644 --- a/src/plugins/languageclient/languageclientcompletionassist.h +++ b/src/plugins/languageclient/languageclientcompletionassist.h @@ -28,6 +28,7 @@ #include "languageclient_global.h" #include +#include #include #include @@ -121,4 +122,39 @@ private: int m_basePos = -1; }; +class LANGUAGECLIENT_EXPORT LanguageClientCompletionItem + : public TextEditor::AssistProposalItemInterface +{ +public: + LanguageClientCompletionItem(LanguageServerProtocol::CompletionItem item, + const CompletionApplyHelper &applyHelper); + + // AssistProposalItemInterface interface + QString text() const override; + QString filterText() const override; + bool implicitlyApplies() const override; + bool prematurelyApplies(const QChar &typedCharacter) const override; + void apply(TextEditor::TextDocumentManipulatorInterface &manipulator, + int basePosition) const override; + QIcon icon() const override; + QString detail() const override; + bool isSnippet() const override; + bool isValid() const override; + quint64 hash() const override; + + const QString &sortText() const; + bool hasSortText() const; + + bool operator <(const LanguageClientCompletionItem &other) const; + + bool isPerfectMatch(int pos, QTextDocument *doc) const; + +private: + LanguageServerProtocol::CompletionItem m_item; + const CompletionApplyHelper m_applyHelper; + mutable QChar m_triggeredCommitCharacter; + mutable QString m_sortText; + mutable QString m_filterText; +}; + } // namespace LanguageClient From e7f6abc0848b4fa6243585b290e77b038c7ec154 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Wed, 15 Sep 2021 11:35:19 +0200 Subject: [PATCH 06/29] LanguageClient: remove codeassist proposal handler Removes noise from the interface. Using specialized clangd processors that redirect the proposals for testing purposes is an overall cleaner solution. Change-Id: Ia4f3d4720765f0533c5530a2a5c7db3cc971e0be Reviewed-by: Christian Kandeler --- src/plugins/clangcodemodel/clangdclient.cpp | 163 ++++++++++++------ src/plugins/clangcodemodel/clangdclient.h | 3 + .../clangcodemodel/test/clangdtests.cpp | 3 +- src/plugins/languageclient/client.cpp | 16 -- src/plugins/languageclient/client.h | 2 - .../languageclientcompletionassist.cpp | 28 +-- .../languageclientcompletionassist.h | 6 - .../languageclientfunctionhint.cpp | 19 +- .../languageclientfunctionhint.h | 9 +- 9 files changed, 134 insertions(+), 115 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 982052dcb9a..cc71946ef27 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -681,9 +681,11 @@ public: class DoxygenAssistProcessor : public TextEditor::IAssistProcessor { public: - DoxygenAssistProcessor(int position, unsigned completionOperator, - const ProposalHandler &handler) - : m_position(position), m_completionOperator(completionOperator), m_handler(handler) {} + DoxygenAssistProcessor(ClangdClient *client, int position, unsigned completionOperator) + : m_client(client) + , m_position(position) + , m_completionOperator(completionOperator) + {} private: TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *) override @@ -699,16 +701,16 @@ private: TextEditor::GenericProposalModelPtr model(new TextEditor::GenericProposalModel); model->loadContent(completions); const auto proposal = new TextEditor::GenericProposal(m_position, model); - if (m_handler) { - m_handler(proposal); + if (m_client->testingEnabled()) { + emit m_client->proposalReady(proposal); return nullptr; } return proposal; } + ClangdClient * const m_client; const int m_position; const unsigned m_completionOperator; - const ProposalHandler m_handler; }; class ClangdClient::Private @@ -770,6 +772,67 @@ public: } }; +QList completionItemsTransformer( + const Utils::FilePath &filePath, + const QString &content, + int pos, + const QList &items) +{ + qCDebug(clangdLog) << "received" << items.count() << "completions"; + + // If there are signals among the candidates, we employ the built-in code model to find out + // whether the cursor was on the second argument of a (dis)connect() call. + // If so, we offer only signals, as nothing else makes sense in that context. + static const auto criterion = [](const CompletionItem &ci) { + const Utils::optional doc = ci.documentation(); + if (!doc) + return false; + QString docText; + if (Utils::holds_alternative(*doc)) + docText = Utils::get(*doc); + else if (Utils::holds_alternative(*doc)) + docText = Utils::get(*doc).content(); + return docText.contains("Annotation: qt_signal"); + }; + if (pos != -1 && Utils::anyOf(items, criterion) + && CppEditor::CppModelManager::instance()->positionRequiresSignal(filePath.toString(), + content.toUtf8(), + pos)) { + return Utils::filtered(items, criterion); + } + return items; +}; + +class ClangdClient::ClangdCompletionAssistProcessor : public LanguageClientCompletionAssistProcessor +{ +public: + ClangdCompletionAssistProcessor(ClangdClient *client, const QString &snippetsGroup) + : LanguageClientCompletionAssistProcessor(client, + &completionItemsTransformer, + &applyCompletionItem, + snippetsGroup) + , m_client(client) + { + } + +private: + TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override + { + if (m_client->d->isTesting) { + setAsyncCompletionAvailableHandler([this](TextEditor::IAssistProposal *proposal) { + emit m_client->proposalReady(proposal); + }); + } + return LanguageClientCompletionAssistProcessor::perform(interface); + } + + static void applyCompletionItem(const CompletionItem &item, + TextEditor::TextDocumentManipulatorInterface &manipulator, + QChar typedChar); + + ClangdClient * const m_client; +}; + class ClangdClient::ClangdCompletionAssistProvider : public LanguageClientCompletionAssistProvider { public: @@ -783,9 +846,7 @@ private: bool isActivationCharSequence(const QString &sequence) const override; bool isContinuationChar(const QChar &c) const override; - void applyCompletionItem(const CompletionItem &item, - TextEditor::TextDocumentManipulatorInterface &manipulator, - QChar typedChar); + ClangdClient * const m_client; }; ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir) @@ -1081,13 +1142,11 @@ void ClangdClient::Private::findUsages(TextEditor::TextDocument *document, void ClangdClient::enableTesting() { d->isTesting = true; - setCompletionProposalHandler([this](TextEditor::IAssistProposal *proposal) { - QMetaObject::invokeMethod(this, [this, proposal] { emit proposalReady(proposal); }, - Qt::QueuedConnection); - }); - setFunctionHintProposalHandler([this](TextEditor::IAssistProposal *proposal) { - emit proposalReady(proposal); - }); +} + +bool ClangdClient::testingEnabled() const +{ + return d->isTesting; } void ClangdClient::Private::handleFindUsagesResult(quint64 key, const QList &locations) @@ -2664,39 +2723,32 @@ QString ClangdDiagnostic::category() const return typedValue("category"); } +class ClangdClient::ClangdFunctionHintProcessor : public FunctionHintProcessor +{ +public: + ClangdFunctionHintProcessor(ClangdClient *client) + : FunctionHintProcessor(client) + , m_client(client) + {} + +private: + TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override + { + if (m_client->d->isTesting) { + setAsyncCompletionAvailableHandler([this](TextEditor::IAssistProposal *proposal) { + emit m_client->proposalReady(proposal); + }); + } + return FunctionHintProcessor::perform(interface); + } + + ClangdClient * const m_client; +}; + ClangdClient::ClangdCompletionAssistProvider::ClangdCompletionAssistProvider(ClangdClient *client) : LanguageClientCompletionAssistProvider(client) -{ - setItemsTransformer([](const Utils::FilePath &filePath, const QString &content, - int pos, const QList &items) { - qCDebug(clangdLog) << "received" << items.count() << "completions"; - - // If there are signals among the candidates, we employ the built-in code model to find out - // whether the cursor was on the second argument of a (dis)connect() call. - // If so, we offer only signals, as nothing else makes sense in that context. - static const auto criterion = [](const CompletionItem &ci) { - const Utils::optional doc = ci.documentation(); - if (!doc) - return false; - QString docText; - if (Utils::holds_alternative(*doc)) - docText = Utils::get(*doc); - else if (Utils::holds_alternative(*doc)) - docText = Utils::get(*doc).content(); - return docText.contains("Annotation: qt_signal"); - }; - if (pos != -1 && Utils::anyOf(items, criterion) && CppEditor::CppModelManager::instance() - ->positionRequiresSignal(filePath.toString(), content.toUtf8(), pos)) { - return Utils::filtered(items, criterion); - } - return items; - }); - - setApplyHelper([this](const CompletionItem &item, - TextEditor::TextDocumentManipulatorInterface &manipulator, QChar typedChar) { - applyCompletionItem(item, manipulator, typedChar); - }); -} + , m_client(client) +{} TextEditor::IAssistProcessor *ClangdClient::ClangdCompletionAssistProvider::createProcessor( const TextEditor::AssistInterface *assistInterface) const @@ -2704,20 +2756,21 @@ TextEditor::IAssistProcessor *ClangdClient::ClangdCompletionAssistProvider::crea ClangCompletionContextAnalyzer contextAnalyzer(assistInterface->textDocument(), assistInterface->position(), false, {}); contextAnalyzer.analyze(); - client()->setSnippetsGroup( - contextAnalyzer.addSnippets() ? CppEditor::Constants::CPP_SNIPPETS_GROUP_ID : QString()); switch (contextAnalyzer.completionAction()) { case ClangCompletionContextAnalyzer::PassThroughToLibClangAfterLeftParen: qCDebug(clangdLog) << "completion changed to function hint"; - return new FunctionHintProcessor(client(), proposalHandler()); + return new ClangdFunctionHintProcessor(m_client); case ClangCompletionContextAnalyzer::CompleteDoxygenKeyword: - return new DoxygenAssistProcessor(contextAnalyzer.positionForProposal(), - contextAnalyzer.completionOperator(), - proposalHandler()); + return new DoxygenAssistProcessor(m_client, + contextAnalyzer.positionForProposal(), + contextAnalyzer.completionOperator()); default: break; } - return LanguageClientCompletionAssistProvider::createProcessor(assistInterface); + const QString snippetsGroup = contextAnalyzer.addSnippets() + ? CppEditor::Constants::CPP_SNIPPETS_GROUP_ID + : QString(); + return new ClangdCompletionAssistProcessor(m_client, snippetsGroup); } bool ClangdClient::ClangdCompletionAssistProvider::isActivationCharSequence(const QString &sequence) const @@ -2747,7 +2800,7 @@ bool ClangdClient::ClangdCompletionAssistProvider::isContinuationChar(const QCha return CppEditor::isValidIdentifierChar(c); } -void ClangdClient::ClangdCompletionAssistProvider::applyCompletionItem( +void ClangdClient::ClangdCompletionAssistProcessor::applyCompletionItem( const CompletionItem &item, TextEditor::TextDocumentManipulatorInterface &manipulator, QChar typedChar) { diff --git a/src/plugins/clangcodemodel/clangdclient.h b/src/plugins/clangcodemodel/clangdclient.h index 440c56e1d54..91d59e50a71 100644 --- a/src/plugins/clangcodemodel/clangdclient.h +++ b/src/plugins/clangcodemodel/clangdclient.h @@ -77,6 +77,7 @@ public: const LanguageServerProtocol::DocumentUri &uri); void enableTesting(); + bool testingEnabled() const; signals: void indexingFinished(); @@ -96,6 +97,8 @@ private: class FollowSymbolData; class VirtualFunctionAssistProcessor; class VirtualFunctionAssistProvider; + class ClangdFunctionHintProcessor; + class ClangdCompletionAssistProcessor; class ClangdCompletionAssistProvider; Private * const d; }; diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index f1da00e0770..d33f3342f59 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -77,6 +77,7 @@ using Range = std::tuple; } // namespace ClangCodeModel Q_DECLARE_METATYPE(ClangCodeModel::Internal::Tests::Range) +Q_DECLARE_METATYPE(IAssistProposal *) namespace ClangCodeModel { namespace Internal { @@ -1885,7 +1886,7 @@ void ClangdTestCompletion::getProposal(const QString &fileName, connect(client(), &ClangdClient::proposalReady, &loop, [&proposal, &loop](IAssistProposal *p) { proposal = p; loop.quit(); - }); + }, Qt::QueuedConnection); editor->editorWidget()->invokeAssist(Completion, nullptr); timer.start(5000); loop.exec(); diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index e65c7d81c5e..23a88d5e4f2 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -1047,22 +1047,6 @@ SymbolStringifier Client::symbolStringifier() const return m_symbolStringifier; } -void Client::setCompletionProposalHandler(const ProposalHandler &handler) -{ - if (const auto provider = qobject_cast( - m_clientProviders.completionAssistProvider)) { - provider->setProposalHandler(handler); - } -} - -void Client::setFunctionHintProposalHandler(const ProposalHandler &handler) -{ - if (const auto provider = qobject_cast( - m_clientProviders.functionHintProvider)) { - provider->setProposalHandler(handler); - } -} - void Client::setSnippetsGroup(const QString &group) { if (const auto provider = qobject_cast( diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index f6c16e72d23..2d0e142dd89 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -185,8 +185,6 @@ public: void setSemanticTokensHandler(const SemanticTokensHandler &handler); void setSymbolStringifier(const LanguageServerProtocol::SymbolStringifier &stringifier); LanguageServerProtocol::SymbolStringifier symbolStringifier() const; - void setCompletionProposalHandler(const ProposalHandler &handler); - void setFunctionHintProposalHandler(const ProposalHandler &handler); void setSnippetsGroup(const QString &group); void setCompletionAssistProvider(LanguageClientCompletionAssistProvider *provider); diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp index f431e3b67f4..c2be893d457 100644 --- a/src/plugins/languageclient/languageclientcompletionassist.cpp +++ b/src/plugins/languageclient/languageclientcompletionassist.cpp @@ -287,13 +287,16 @@ public: int m_pos = -1; }; - -LanguageClientCompletionAssistProcessor::LanguageClientCompletionAssistProcessor(Client *client, - const CompletionItemsTransformer &itemsTransformer, const CompletionApplyHelper &applyHelper, - const ProposalHandler &proposalHandler, const QString &snippetsGroup) - : m_client(client), m_itemsTransformer(itemsTransformer), m_applyHelper(applyHelper), - m_proposalHandler(proposalHandler), m_snippetsGroup(snippetsGroup) -{ } +LanguageClientCompletionAssistProcessor::LanguageClientCompletionAssistProcessor( + Client *client, + const CompletionItemsTransformer &itemsTransformer, + const CompletionApplyHelper &applyHelper, + const QString &snippetsGroup) + : m_client(client) + , m_itemsTransformer(itemsTransformer) + , m_applyHelper(applyHelper) + , m_snippetsGroup(snippetsGroup) +{} LanguageClientCompletionAssistProcessor::~LanguageClientCompletionAssistProcessor() { @@ -427,10 +430,7 @@ void LanguageClientCompletionAssistProcessor::handleCompletionResponse( proposal->m_pos = m_pos; proposal->setFragile(true); proposal->setSupportsPrefix(false); - if (m_proposalHandler) - m_proposalHandler(proposal); - else - setAsyncProposalAvailable(proposal); + setAsyncProposalAvailable(proposal); m_client->removeAssistProcessor(this); qCDebug(LOGLSPCOMPLETION) << QTime::currentTime() << " : " << items.count() << " completions handled"; @@ -444,8 +444,10 @@ LanguageClientCompletionAssistProvider::LanguageClientCompletionAssistProvider(C IAssistProcessor *LanguageClientCompletionAssistProvider::createProcessor( const AssistInterface *) const { - return new LanguageClientCompletionAssistProcessor(m_client, m_itemsTransformer, m_applyHelper, - m_proposalHandler, m_snippetsGroup); + return new LanguageClientCompletionAssistProcessor(m_client, + m_itemsTransformer, + m_applyHelper, + m_snippetsGroup); } IAssistProvider::RunType LanguageClientCompletionAssistProvider::runType() const diff --git a/src/plugins/languageclient/languageclientcompletionassist.h b/src/plugins/languageclient/languageclientcompletionassist.h index e097e98de67..bc8bccb7d7d 100644 --- a/src/plugins/languageclient/languageclientcompletionassist.h +++ b/src/plugins/languageclient/languageclientcompletionassist.h @@ -53,7 +53,6 @@ using CompletionItemsTransformer = std::function; -using ProposalHandler = std::function; class LANGUAGECLIENT_EXPORT LanguageClientCompletionAssistProvider : public TextEditor::CompletionAssistProvider @@ -72,20 +71,17 @@ public: void setTriggerCharacters(const Utils::optional> triggerChars); - void setProposalHandler(const ProposalHandler &handler) { m_proposalHandler = handler; } void setSnippetsGroup(const QString &group) { m_snippetsGroup = group; } protected: void setItemsTransformer(const CompletionItemsTransformer &transformer); void setApplyHelper(const CompletionApplyHelper &applyHelper); Client *client() const { return m_client; } - const ProposalHandler &proposalHandler() const { return m_proposalHandler; } private: QList m_triggerChars; CompletionItemsTransformer m_itemsTransformer; CompletionApplyHelper m_applyHelper; - ProposalHandler m_proposalHandler; QString m_snippetsGroup; int m_activationCharSequenceLength = 0; Client *m_client = nullptr; // not owned @@ -98,7 +94,6 @@ public: LanguageClientCompletionAssistProcessor(Client *client, const CompletionItemsTransformer &itemsTransformer, const CompletionApplyHelper &applyHelper, - const ProposalHandler &proposalHandler, const QString &snippetsGroup); ~LanguageClientCompletionAssistProcessor() override; TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override; @@ -116,7 +111,6 @@ private: QMetaObject::Connection m_postponedUpdateConnection; const CompletionItemsTransformer m_itemsTransformer; const CompletionApplyHelper m_applyHelper; - const ProposalHandler m_proposalHandler; const QString m_snippetsGroup; int m_pos = -1; int m_basePos = -1; diff --git a/src/plugins/languageclient/languageclientfunctionhint.cpp b/src/plugins/languageclient/languageclientfunctionhint.cpp index 2092b758993..76a851d0cd4 100644 --- a/src/plugins/languageclient/languageclientfunctionhint.cpp +++ b/src/plugins/languageclient/languageclientfunctionhint.cpp @@ -81,9 +81,8 @@ QString FunctionHintProposalModel::text(int index) const + label.mid(end).toHtmlEscaped(); } -FunctionHintProcessor::FunctionHintProcessor(Client *client, const ProposalHandler &proposalHandler) +FunctionHintProcessor::FunctionHintProcessor(Client *client) : m_client(client) - , m_proposalHandler(proposalHandler) {} IAssistProposal *FunctionHintProcessor::perform(const AssistInterface *interface) @@ -117,26 +116,18 @@ void FunctionHintProcessor::handleSignatureResponse(const SignatureHelpRequest:: m_client->removeAssistProcessor(this); auto result = response.result().value_or(LanguageClientValue()); if (result.isNull()) { - processProposal(nullptr); + setAsyncProposalAvailable(nullptr); return; } const SignatureHelp &signatureHelp = result.value(); if (signatureHelp.signatures().isEmpty()) { - processProposal(nullptr); + setAsyncProposalAvailable(nullptr); } else { FunctionHintProposalModelPtr model(new FunctionHintProposalModel(signatureHelp)); - processProposal(new FunctionHintProposal(m_pos, model)); + setAsyncProposalAvailable(new FunctionHintProposal(m_pos, model)); } } -void FunctionHintProcessor::processProposal(IAssistProposal *proposal) -{ - if (m_proposalHandler) - m_proposalHandler(proposal); - else - setAsyncProposalAvailable(proposal); -} - FunctionHintAssistProvider::FunctionHintAssistProvider(Client *client) : CompletionAssistProvider(client) , m_client(client) @@ -145,7 +136,7 @@ FunctionHintAssistProvider::FunctionHintAssistProvider(Client *client) TextEditor::IAssistProcessor *FunctionHintAssistProvider::createProcessor( const AssistInterface *) const { - return new FunctionHintProcessor(m_client, m_proposalHandler); + return new FunctionHintProcessor(m_client); } IAssistProvider::RunType FunctionHintAssistProvider::runType() const diff --git a/src/plugins/languageclient/languageclientfunctionhint.h b/src/plugins/languageclient/languageclientfunctionhint.h index 5c12ef7ac62..fa74823e6c8 100644 --- a/src/plugins/languageclient/languageclientfunctionhint.h +++ b/src/plugins/languageclient/languageclientfunctionhint.h @@ -40,8 +40,6 @@ namespace LanguageClient { class Client; -using ProposalHandler = std::function; - class LANGUAGECLIENT_EXPORT FunctionHintAssistProvider : public TextEditor::CompletionAssistProvider { Q_OBJECT @@ -58,11 +56,8 @@ public: void setTriggerCharacters(const Utils::optional> &triggerChars); - void setProposalHandler(const ProposalHandler &handler) { m_proposalHandler = handler; } - private: QList m_triggerChars; - ProposalHandler m_proposalHandler; int m_activationCharSequenceLength = 0; Client *m_client = nullptr; // not owned }; @@ -70,7 +65,7 @@ private: class LANGUAGECLIENT_EXPORT FunctionHintProcessor : public TextEditor::IAssistProcessor { public: - explicit FunctionHintProcessor(Client *client, const ProposalHandler &proposalHandler); + explicit FunctionHintProcessor(Client *client); TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override; bool running() override { return m_currentRequest.has_value(); } bool needsRestart() const override { return true; } @@ -79,10 +74,8 @@ public: private: void handleSignatureResponse( const LanguageServerProtocol::SignatureHelpRequest::Response &response); - void processProposal(TextEditor::IAssistProposal *proposal); QPointer m_client; - const ProposalHandler m_proposalHandler; Utils::optional m_currentRequest; int m_pos = -1; }; From ebc6e1fc62fe80a9d559b23fad01e10aa25951d0 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 27 Sep 2021 23:14:43 +0200 Subject: [PATCH 07/29] Android: Use Android tools environment for avdmanager call Otherwise AVD creation fails (on Windows). Change-Id: Iff11c2cd96c214b40b714b6b1248adede54da343 Reviewed-by: Assam Boudjelthia --- src/plugins/android/androidavdmanager.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/android/androidavdmanager.cpp b/src/plugins/android/androidavdmanager.cpp index 58204b1cc71..27af7b76db7 100644 --- a/src/plugins/android/androidavdmanager.cpp +++ b/src/plugins/android/androidavdmanager.cpp @@ -119,6 +119,7 @@ static CreateAvdInfo createAvdCommand(const AndroidConfig &config, const CreateA qCDebug(avdManagerLog) << "Running AVD Manager command:" << CommandLine(avdManagerTool, arguments).toUserOutput(); QProcess proc; + proc.setEnvironment(AndroidConfigurations::toolsEnvironment(config).toStringList()); proc.start(avdManagerTool.toString(), arguments); if (!proc.waitForStarted()) { result.error = QApplication::translate("AndroidAvdManager", From e97a8471b505345dc06cba1cdd49b4034bfc1fe2 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 28 Sep 2021 10:28:28 +0200 Subject: [PATCH 08/29] ProjectExplorer: Make Json Wizard icons themable Wizard json files can now define via "iconKind" : "Themed" that the provided icon is a themable mask rather than a plain image. Change-Id: I668b7fe368b6989f3609143b22270cb8cec21b12 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/iwizardfactory.cpp | 7 +++++++ src/plugins/coreplugin/iwizardfactory.h | 2 ++ .../projectexplorer/jsonwizard/jsonwizardfactory.cpp | 8 +++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/iwizardfactory.cpp b/src/plugins/coreplugin/iwizardfactory.cpp index b70cd1a2d03..d7da856b7ea 100644 --- a/src/plugins/coreplugin/iwizardfactory.cpp +++ b/src/plugins/coreplugin/iwizardfactory.cpp @@ -34,6 +34,7 @@ #include #include +#include #include #include @@ -369,6 +370,11 @@ void IWizardFactory::requestNewItemDialog(const QString &title, s_reopenData.setData(title, factories, defaultLocation, extraVariables); } +QIcon IWizardFactory::themedIcon(const Utils::FilePath &iconMaskPath) +{ + return Utils::Icon({{iconMaskPath, Theme::PanelTextColorDark}}, Icon::Tint).icon(); +} + void IWizardFactory::destroyFeatureProvider() { qDeleteAll(s_providerList); @@ -445,6 +451,7 @@ static QIcon iconWithText(const QIcon &icon, const QString &text) font.setPixelSize(fontSize); font.setStretch(85); QPainter p(&pixmap); + p.setPen(Utils::creatorTheme()->color(Theme::PanelTextColorDark)); p.setFont(font); QTextOption textOption(Qt::AlignHCenter | Qt::AlignBottom); textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); diff --git a/src/plugins/coreplugin/iwizardfactory.h b/src/plugins/coreplugin/iwizardfactory.h index b6ede111847..1e27ec6c900 100644 --- a/src/plugins/coreplugin/iwizardfactory.h +++ b/src/plugins/coreplugin/iwizardfactory.h @@ -115,6 +115,8 @@ public: const Utils::FilePath &defaultLocation, const QVariantMap &extraVariables); + static QIcon themedIcon(const Utils::FilePath &iconMaskPath); + protected: static QSet pluginFeatures(); static QSet availableFeatures(Utils::Id platformId); diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp index bb8f24f03e2..579722a63d6 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp @@ -73,6 +73,7 @@ const char DISPLAY_NAME_KEY[] = "trDisplayName"; const char ICON_KEY[] = "icon"; const char ICON_TEXT_KEY[] = "iconText"; const char IMAGE_KEY[] = "image"; +const char ICON_KIND_KEY[] = "iconKind"; const char DESCRIPTION_KEY[] = "trDescription"; const char REQUIRED_FEATURES_KEY[] = "featuresRequired"; const char SUGGESTED_FEATURES_KEY[] = "featuresSuggested"; @@ -586,7 +587,12 @@ bool JsonWizardFactory::initialize(const QVariantMap &data, const FilePath &base return false; } const QString iconText = data.value(QLatin1String(ICON_TEXT_KEY)).toString(); - setIcon(strVal.isEmpty() ? QIcon() : QIcon(iconPath.toString()), iconText); + const bool iconIsThemed = data.value(QLatin1String(ICON_KIND_KEY)).toString() + .compare("Themed", Qt::CaseInsensitive) == 0; + setIcon(iconIsThemed ? themedIcon(iconPath) + : strVal.isEmpty() ? QIcon() + : QIcon(iconPath.toString()), + iconText); strVal = data.value(QLatin1String(IMAGE_KEY)).toString(); if (!strVal.isEmpty()) { From 03f6de1eeb26a9b88df250f136cb6f90216ac68d Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Thu, 16 Sep 2021 18:13:25 +0200 Subject: [PATCH 09/29] ClangCodeModel: Properly mark "#ifdefed-out" blocks with clangd The behavior is now the same as when using libclang. Namely: - The whole block is grayed out, rather than just symbols having a gray background. - Ifdefed-out blocks no longer mess with the brace depth. Change-Id: I8b5f3a788430edcd9dd79249323c26a5ee5d68ed Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 55 ++++++++++++++++----- 1 file changed, 42 insertions(+), 13 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index cc71946ef27..41bfd12f804 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -2386,20 +2386,28 @@ static void collectExtraResults(QFutureInterface // clangd reports also the #ifs, #elses and #endifs around the disabled code as disabled, // and not even in a consistent manner. We don't want this, so we have to clean up here. -// TODO: Fix in clangd? -static void cleanupDisabledCode(TextEditor::HighlightingResults &results, QTextDocument *doc, - const QString &docContent) +// But note that we require this behavior, as otherwise we would not be able to grey out +// e.g. empty lines after an #fdef, due to the lack of symbols. +static QList +cleanupDisabledCode(TextEditor::HighlightingResults &results, QTextDocument *doc, + const QString &docContent) { - bool inDisabled = false; + QList ifdefedOutRanges; + int rangeStartPos = -1; for (auto it = results.begin(); it != results.end();) { - const bool wasInDisabled = inDisabled; + const bool wasIfdefedOut = rangeStartPos != -1; if (it->textStyles.mainStyle != TextEditor::C_DISABLED_CODE) { - inDisabled = false; + if (wasIfdefedOut) { + const QTextBlock block = doc->findBlockByNumber(it->line - 1); + ifdefedOutRanges << TextEditor::BlockRange(rangeStartPos, block.position()); + rangeStartPos = -1; + } ++it; continue; } - inDisabled = true; + if (!wasIfdefedOut) + rangeStartPos = doc->findBlockByNumber(it->line - 1).position(); const int pos = Utils::Text::positionInText(doc, it->line, it->column); const QStringView content(QStringView(docContent).mid(pos, it->length).trimmed()); if (!content.startsWith(QLatin1String("#if")) @@ -2410,25 +2418,37 @@ static void cleanupDisabledCode(TextEditor::HighlightingResults &results, QTextD continue; } - if (!wasInDisabled) { + if (!wasIfdefedOut) { // The #if or #else that starts disabled code should not be disabled. + const QTextBlock nextBlock = doc->findBlockByNumber(it->line); + rangeStartPos = nextBlock.isValid() ? nextBlock.position() : -1; it = results.erase(it); continue; } - if (wasInDisabled && (it + 1 == results.end() + if (wasIfdefedOut && (it + 1 == results.end() || (it + 1)->textStyles.mainStyle != TextEditor::C_DISABLED_CODE)) { // The #else or #endif that ends disabled code should not be disabled. + const QTextBlock block = doc->findBlockByNumber(it->line - 1); + ifdefedOutRanges << TextEditor::BlockRange(rangeStartPos, block.position()); + rangeStartPos = -1; it = results.erase(it); continue; } ++it; } + + if (rangeStartPos != -1) + ifdefedOutRanges << TextEditor::BlockRange(rangeStartPos, doc->characterCount()); + + return ifdefedOutRanges; } static void semanticHighlighter(QFutureInterface &future, const QList &tokens, - const QString &docContents, const AstNode &ast) + const QString &docContents, const AstNode &ast, + const QPointer &widget, + int docRevision) { if (future.isCanceled()) { future.reportFinished(); @@ -2548,7 +2568,12 @@ static void semanticHighlighter(QFutureInterface }; TextEditor::HighlightingResults results = Utils::transform(tokens, toResult); - cleanupDisabledCode(results, &doc, docContents); + const QList ifdefedOutBlocks + = cleanupDisabledCode(results, &doc, docContents); + QMetaObject::invokeMethod(widget, [widget, ifdefedOutBlocks, docRevision] { + if (widget && widget->textDocument()->document()->revision() == docRevision) + widget->setIfdefedOutBlocks(ifdefedOutBlocks); + }, Qt::QueuedConnection); collectExtraResults(future, results, ast, &doc, docContents); if (!future.isCanceled()) { qCDebug(clangdLog) << "reporting" << results.size() << "highlighting results"; @@ -2588,9 +2613,13 @@ void ClangdClient::Private::handleSemanticTokens(TextEditor::TextDocument *doc, if (ast && clangdLogAst().isDebugEnabled()) ast->print(); + IEditor * const editor = Utils::findOrDefault(EditorManager::visibleEditors(), + [doc](const IEditor *editor) { return editor->document() == doc; }); + const auto editorWidget = TextEditor::TextEditorWidget::fromEditor(editor); const auto runner = [tokens, text = doc->document()->toPlainText(), - theAst = ast ? *ast : AstNode()] { - return Utils::runAsync(semanticHighlighter, tokens, text, theAst); + theAst = ast ? *ast : AstNode(), w = QPointer(editorWidget), + rev = doc->document()->revision()] { + return Utils::runAsync(semanticHighlighter, tokens, text, theAst, w, rev); }; if (isTesting) { From 7958de05f5837b578490c667b255b2bad2166af5 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 17 Sep 2021 16:32:50 +0200 Subject: [PATCH 10/29] Introduce Utils::Singleton Introduce Utils::Singleton class and Utils::SingletonWithOptionalDependencies class template that helps implementing singletons that depend on other singletons. It's guaranteed that whenever singleton B depends on singleton A, than A is always created before B is being created, and that the order of destruction is always opposite to the order of creation. Dependencies of singleton are listed as template arguments for SingletonWithOptionalDependencies class template. The first argument of SingletonWithOptionalDependencies class template is always a singleton class itself. Prepare a common interface for all singleton subclasses: SingletonSubClass *SingletonWithOptionalDependencies::instance(); Make instantiating singletons and its dependencies thread-safe. Create singletons on demand (only if some code needs them). It's not needed anymore to explicitly instantiate all required singletons in tests. Make it possible (and thread-safe) to instantiate ProcessReaper and LauncherInterface singletons in non-main threads. Make the following dependencies between existing singletons: SshConnectionManager depends on: -> LauncherInterface depends on: -> ProcessReaper Change-Id: Iefaacab561c2b3dcf07e7fafbb87339ea6a15278 Reviewed-by: Christian Kandeler --- src/app/CMakeLists.txt | 2 +- src/app/app.pro | 2 +- src/app/app.qbs | 1 - src/app/main.cpp | 10 +- src/libs/ssh/sshconnectionmanager.cpp | 19 +--- src/libs/ssh/sshconnectionmanager.h | 12 +- src/libs/utils/CMakeLists.txt | 1 + src/libs/utils/launcherinterface.cpp | 65 ++++------- src/libs/utils/launcherinterface.h | 16 ++- src/libs/utils/processreaper.cpp | 17 +-- src/libs/utils/processreaper.h | 9 +- src/libs/utils/singleton.cpp | 82 ++++++++++++++ src/libs/utils/singleton.h | 106 ++++++++++++++++++ src/libs/utils/utils-lib.pri | 4 +- src/libs/utils/utils.qbs | 2 + .../tests/testmesoninfoparser.cpp | 10 +- .../tests/testmesonwrapper.cpp | 10 +- src/tools/processlauncher/CMakeLists.txt | 2 + .../processlauncher/processlauncher-main.cpp | 6 +- src/tools/processlauncher/processlauncher.pro | 8 +- src/tools/processlauncher/processlauncher.qbs | 2 + tests/auto/ssh/tst_ssh.cpp | 16 +-- .../auto/utils/qtcprocess/tst_qtcprocess.cpp | 9 +- tests/unit/unittest/unittests-main.cpp | 9 +- 24 files changed, 282 insertions(+), 138 deletions(-) create mode 100644 src/libs/utils/singleton.cpp create mode 100644 src/libs/utils/singleton.h diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 236421558ca..ed41f3dce0d 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -12,7 +12,7 @@ install( add_qtc_executable(qtcreator DEFINES IDE_LIBRARY_BASENAME=\"${IDE_LIBRARY_BASE_PATH}\" - DEPENDS Aggregation ExtensionSystem Qt5::Core Qt5::Widgets Utils QtcSsh shared_qtsingleapplication app_version + DEPENDS Aggregation ExtensionSystem Qt5::Core Qt5::Widgets Utils shared_qtsingleapplication app_version SOURCES main.cpp ../tools/qtcreatorcrashhandler/crashhandlersetup.cpp ../tools/qtcreatorcrashhandler/crashhandlersetup.h diff --git a/src/app/app.pro b/src/app/app.pro index 1d15d390c3d..730427ba897 100644 --- a/src/app/app.pro +++ b/src/app/app.pro @@ -17,7 +17,7 @@ include(../rpath.pri) include(../libs/qt-breakpad/qtbreakpad.pri) -LIBS *= -l$$qtLibraryName(ExtensionSystem) -l$$qtLibraryName(Aggregation) -l$$qtLibraryName(Utils) -l$$qtLibraryName(QtcSsh) +LIBS *= -l$$qtLibraryName(ExtensionSystem) -l$$qtLibraryName(Aggregation) -l$$qtLibraryName(Utils) win32 { # We need the version in two separate formats for the .rc file diff --git a/src/app/app.qbs b/src/app/app.qbs index c97a6457274..42172aa09f6 100644 --- a/src/app/app.qbs +++ b/src/app/app.qbs @@ -46,7 +46,6 @@ QtcProduct { Depends { name: "app_version_header" } Depends { name: "Qt"; submodules: ["widgets", "network"] } Depends { name: "Utils" } - Depends { name: "QtcSsh" } Depends { name: "ExtensionSystem" } files: [ diff --git a/src/app/main.cpp b/src/app/main.cpp index bc0d72aeacb..8ab587a7131 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -32,16 +32,13 @@ #include #include -#include - #include #include #include #include -#include #include -#include #include +#include #include #include @@ -537,10 +534,7 @@ int main(int argc, char **argv) QCoreApplication::setOrganizationName(QLatin1String(Core::Constants::IDE_SETTINGSVARIANT_STR)); QGuiApplication::setApplicationDisplayName(Core::Constants::IDE_DISPLAY_NAME); - Utils::ProcessReaper processReaper; - Utils::LauncherInterface::startLauncher(); - auto cleanup = qScopeGuard([] { Utils::LauncherInterface::stopLauncher(); }); - QSsh::SshConnectionManager sshConnectionManager; + auto cleanup = qScopeGuard([] { Utils::Singleton::deleteAll(); }); const QStringList pluginArguments = app.arguments(); diff --git a/src/libs/ssh/sshconnectionmanager.cpp b/src/libs/ssh/sshconnectionmanager.cpp index 59ddb78f2ac..3ac82a7dabc 100644 --- a/src/libs/ssh/sshconnectionmanager.cpp +++ b/src/libs/ssh/sshconnectionmanager.cpp @@ -53,16 +53,11 @@ bool operator!=(const UnacquiredConnection &c1, const UnacquiredConnection &c2) return !(c1 == c2); } -static class SshConnectionManagerPrivate *s_instance = nullptr; - class SshConnectionManagerPrivate : public QObject { public: SshConnectionManagerPrivate() { - QTC_ASSERT(s_instance == nullptr, return); - s_instance = this; - connect(&m_removalTimer, &QTimer::timeout, this, &SshConnectionManagerPrivate::removeInactiveConnections); m_removalTimer.start(SshSettings::connectionSharingTimeout() * 1000 * 60 / 2); @@ -70,8 +65,6 @@ public: ~SshConnectionManagerPrivate() override { - QTC_ASSERT(s_instance == this, return); - for (const UnacquiredConnection &connection : qAsConst(m_unacquiredConnections)) { disconnect(connection.connection, nullptr, this, nullptr); delete connection.connection; @@ -79,8 +72,6 @@ public: QTC_CHECK(m_acquiredConnections.isEmpty()); QTC_CHECK(m_deprecatedConnections.isEmpty()); - - s_instance = nullptr; } SshConnection *acquireConnection(const SshConnectionParameters &sshParams) @@ -213,6 +204,7 @@ private: SshConnectionManager::SshConnectionManager() : d(new Internal::SshConnectionManagerPrivate()) { + QTC_CHECK(QThread::currentThread() == qApp->thread()); } SshConnectionManager::~SshConnectionManager() @@ -222,20 +214,17 @@ SshConnectionManager::~SshConnectionManager() SshConnection *SshConnectionManager::acquireConnection(const SshConnectionParameters &sshParams) { - QTC_ASSERT(Internal::s_instance, return nullptr); - return Internal::s_instance->acquireConnection(sshParams); + return instance()->d->acquireConnection(sshParams); } void SshConnectionManager::releaseConnection(SshConnection *connection) { - QTC_ASSERT(Internal::s_instance, return); - Internal::s_instance->releaseConnection(connection); + instance()->d->releaseConnection(connection); } void SshConnectionManager::forceNewConnection(const SshConnectionParameters &sshParams) { - QTC_ASSERT(Internal::s_instance, return); - Internal::s_instance->forceNewConnection(sshParams); + instance()->d->forceNewConnection(sshParams); } } // namespace QSsh diff --git a/src/libs/ssh/sshconnectionmanager.h b/src/libs/ssh/sshconnectionmanager.h index 8d8a03f43a5..d46a8d8b89f 100644 --- a/src/libs/ssh/sshconnectionmanager.h +++ b/src/libs/ssh/sshconnectionmanager.h @@ -27,6 +27,9 @@ #include "ssh_global.h" +#include +#include + namespace QSsh { class SshConnection; @@ -35,18 +38,21 @@ class SshConnectionParameters; namespace Internal { class SshConnectionManagerPrivate; } class QSSH_EXPORT SshConnectionManager final + : public Utils::SingletonWithOptionalDependencies { public: - SshConnectionManager(); - ~SshConnectionManager(); - static SshConnection *acquireConnection(const SshConnectionParameters &sshParams); static void releaseConnection(SshConnection *connection); // Make sure the next acquireConnection with the given parameters will return a new connection. static void forceNewConnection(const SshConnectionParameters &sshParams); private: + SshConnectionManager(); + ~SshConnectionManager(); + Internal::SshConnectionManagerPrivate *d; + friend class Utils::SingletonWithOptionalDependencies; }; } // namespace QSsh diff --git a/src/libs/utils/CMakeLists.txt b/src/libs/utils/CMakeLists.txt index 3ef203bc21b..9db6ea5f1e7 100644 --- a/src/libs/utils/CMakeLists.txt +++ b/src/libs/utils/CMakeLists.txt @@ -144,6 +144,7 @@ add_qtc_library(Utils settingsutils.h shellcommand.cpp shellcommand.h shellcommandpage.cpp shellcommandpage.h + singleton.cpp singleton.h sizedarray.h smallstring.h smallstringfwd.h diff --git a/src/libs/utils/launcherinterface.cpp b/src/libs/utils/launcherinterface.cpp index 269e4393d73..a5609fd6e7c 100644 --- a/src/libs/utils/launcherinterface.cpp +++ b/src/libs/utils/launcherinterface.cpp @@ -28,7 +28,6 @@ #include "filepath.h" #include "launcherpackets.h" #include "launchersocket.h" -#include "processreaper.h" #include "qtcassert.h" #include @@ -42,7 +41,6 @@ #endif namespace Utils { - namespace Internal { class LauncherProcess : public QProcess @@ -185,92 +183,73 @@ void LauncherInterfacePrivate::handleProcessStderr() using namespace Utils::Internal; static QMutex s_instanceMutex; -static LauncherInterface *s_instance = nullptr; +static QString s_pathToLauncher; +static std::atomic_bool s_started = false; LauncherInterface::LauncherInterface() : m_private(new LauncherInterfacePrivate()) { m_private->moveToThread(&m_thread); - connect(m_private, &LauncherInterfacePrivate::errorOccurred, - this, &LauncherInterface::errorOccurred); - connect(&m_thread, &QThread::finished, m_private, &QObject::deleteLater); + QObject::connect(&m_thread, &QThread::finished, m_private, &QObject::deleteLater); m_thread.start(); -} + m_thread.moveToThread(qApp->thread()); -LauncherInterface::~LauncherInterface() -{ - m_thread.quit(); - m_thread.wait(); -} - -// Called from main thread -void LauncherInterface::startLauncher(const QString &pathToLauncher) -{ - QMutexLocker locker(&s_instanceMutex); - QTC_ASSERT(s_instance == nullptr, return); - s_instance = new LauncherInterface(); - LauncherInterfacePrivate *p = s_instance->m_private; - p->setPathToLauncher(pathToLauncher); - const FilePath launcherFilePath = FilePath::fromString(p->launcherFilePath()) + m_private->setPathToLauncher(s_pathToLauncher); + const FilePath launcherFilePath = FilePath::fromString(m_private->launcherFilePath()) .cleanPath().withExecutableSuffix(); auto launcherIsNotExecutable = [&launcherFilePath]() { qWarning() << "The Creator's process launcher" << launcherFilePath << "is not executable."; }; QTC_ASSERT(launcherFilePath.isExecutableFile(), launcherIsNotExecutable(); return); + s_started = true; // Call in launcher's thread. - QMetaObject::invokeMethod(p, &LauncherInterfacePrivate::doStart); + QMetaObject::invokeMethod(m_private, &LauncherInterfacePrivate::doStart); } -// Called from main thread -void LauncherInterface::stopLauncher() +LauncherInterface::~LauncherInterface() { QMutexLocker locker(&s_instanceMutex); - QTC_ASSERT(s_instance != nullptr, return); - LauncherInterfacePrivate *p = s_instance->m_private; + LauncherInterfacePrivate *p = instance()->m_private; // Call in launcher's thread. QMetaObject::invokeMethod(p, &LauncherInterfacePrivate::doStop, Qt::BlockingQueuedConnection); - delete s_instance; - s_instance = nullptr; + m_thread.quit(); + m_thread.wait(); +} + +void LauncherInterface::setPathToLauncher(const QString &pathToLauncher) +{ + s_pathToLauncher = pathToLauncher; } bool LauncherInterface::isStarted() { - QMutexLocker locker(&s_instanceMutex); - return s_instance != nullptr; + return s_started; } bool LauncherInterface::isReady() { QMutexLocker locker(&s_instanceMutex); - QTC_ASSERT(s_instance != nullptr, return false); - - return s_instance->m_private->socket()->isReady(); + return instance()->m_private->socket()->isReady(); } void LauncherInterface::sendData(const QByteArray &data) { QMutexLocker locker(&s_instanceMutex); - QTC_ASSERT(s_instance != nullptr, return); - - s_instance->m_private->socket()->sendData(data); + instance()->m_private->socket()->sendData(data); } Utils::Internal::CallerHandle *LauncherInterface::registerHandle(QObject *parent, quintptr token, ProcessMode mode) { QMutexLocker locker(&s_instanceMutex); - QTC_ASSERT(s_instance != nullptr, return nullptr); - - return s_instance->m_private->socket()->registerHandle(parent, token, mode); + return instance()->m_private->socket()->registerHandle(parent, token, mode); } void LauncherInterface::unregisterHandle(quintptr token) { QMutexLocker locker(&s_instanceMutex); - QTC_ASSERT(s_instance != nullptr, return); - - s_instance->m_private->socket()->unregisterHandle(token); + instance()->m_private->socket()->unregisterHandle(token); } } // namespace Utils diff --git a/src/libs/utils/launcherinterface.h b/src/libs/utils/launcherinterface.h index 0df595af855..541501efeec 100644 --- a/src/libs/utils/launcherinterface.h +++ b/src/libs/utils/launcherinterface.h @@ -27,9 +27,10 @@ #include "utils_global.h" +#include "processreaper.h" #include "processutils.h" +#include "singleton.h" -#include #include namespace Utils { @@ -40,15 +41,11 @@ class LauncherInterfacePrivate; class ProcessLauncherImpl; } -class QTCREATOR_UTILS_EXPORT LauncherInterface : public QObject +class QTCREATOR_UTILS_EXPORT LauncherInterface final + : public SingletonWithOptionalDependencies { - Q_OBJECT public: - static void startLauncher(const QString &pathToLauncher = {}); - static void stopLauncher(); - -signals: - void errorOccurred(const QString &error); + static void setPathToLauncher(const QString &pathToLauncher); private: friend class Utils::Internal::CallerHandle; @@ -63,10 +60,11 @@ private: static void unregisterHandle(quintptr token); LauncherInterface(); - ~LauncherInterface() override; + ~LauncherInterface(); QThread m_thread; Internal::LauncherInterfacePrivate *m_private; + friend class SingletonWithOptionalDependencies; }; } // namespace Utils diff --git a/src/libs/utils/processreaper.cpp b/src/libs/utils/processreaper.cpp index b3679c7d957..c6d2a071f50 100644 --- a/src/libs/utils/processreaper.cpp +++ b/src/libs/utils/processreaper.cpp @@ -36,8 +36,6 @@ using namespace Utils; namespace Utils { namespace Internal { -static ProcessReaper *d = nullptr; - class Reaper final : public QObject { public: @@ -57,7 +55,7 @@ private: Reaper::Reaper(QProcess *p, int timeoutMs) : m_process(p) { - d->m_reapers.append(this); + ProcessReaper::instance()->m_reapers.append(this); m_iterationTimer.setInterval(timeoutMs); m_iterationTimer.setSingleShot(true); @@ -68,7 +66,7 @@ Reaper::Reaper(QProcess *p, int timeoutMs) : m_process(p) Reaper::~Reaper() { - d->m_reapers.removeOne(this); + ProcessReaper::instance()->m_reapers.removeOne(this); } int Reaper::timeoutMs() const @@ -112,15 +110,8 @@ void Reaper::nextIteration() } // namespace Internal -ProcessReaper::ProcessReaper() -{ - QTC_ASSERT(Internal::d == nullptr, return); - Internal::d = this; -} - ProcessReaper::~ProcessReaper() { - QTC_ASSERT(Internal::d == this, return); while (!m_reapers.isEmpty()) { int alreadyWaited = 0; QList toDelete; @@ -145,8 +136,6 @@ ProcessReaper::~ProcessReaper() qDeleteAll(toDelete); toDelete.clear(); } - - Internal::d = nullptr; } void ProcessReaper::reap(QProcess *process, int timeoutMs) @@ -175,8 +164,6 @@ void ProcessReaper::reap(QProcess *process, int timeoutMs) return; } - QTC_ASSERT(Internal::d, return); - new Internal::Reaper(process, timeoutMs); } diff --git a/src/libs/utils/processreaper.h b/src/libs/utils/processreaper.h index d26325b6f02..f8485c12e39 100644 --- a/src/libs/utils/processreaper.h +++ b/src/libs/utils/processreaper.h @@ -27,6 +27,8 @@ #include "utils_global.h" +#include "singleton.h" + #include QT_BEGIN_NAMESPACE @@ -38,15 +40,16 @@ namespace Utils { namespace Internal { class Reaper; } class QTCREATOR_UTILS_EXPORT ProcessReaper final + : public SingletonWithOptionalDependencies { public: - ProcessReaper(); - ~ProcessReaper(); - static void reap(QProcess *process, int timeoutMs = 500); private: + ProcessReaper() = default; + ~ProcessReaper(); QList m_reapers; friend class Internal::Reaper; + friend class SingletonWithOptionalDependencies; }; } // namespace Utils diff --git a/src/libs/utils/singleton.cpp b/src/libs/utils/singleton.cpp new file mode 100644 index 00000000000..6bd79ca36f6 --- /dev/null +++ b/src/libs/utils/singleton.cpp @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#include "qtcassert.h" +#include "singleton.h" + +#include +#include +#include + +#include + +using namespace Utils; + +namespace Utils { + +// The order of elements reflects dependencies, i.e. +// if B requires A then B will follow A on this list +static QList s_singletonList; +static QMutex s_mutex; +static std::unordered_map s_staticDataList; + +Singleton::~Singleton() +{ + QMutexLocker locker(&s_mutex); + s_singletonList.removeAll(this); +} + +void Singleton::addSingleton(Singleton *singleton) +{ + QMutexLocker locker(&s_mutex); + s_singletonList.append(singleton); +} + +SingletonStaticData &Singleton::staticData(std::type_index index) +{ + QMutexLocker locker(&s_mutex); + return s_staticDataList[index]; +} + +// Note: it's caller responsibility to ensure that this function is being called when all other +// threads don't use any singleton. As a good practice: finish all other threads that were using +// singletons before this function is called. +// Some singletons (currently e.g. SshConnectionManager) can work only in main thread, +// so this method should be called from main thread only. +void Singleton::deleteAll() +{ + QTC_ASSERT(QThread::currentThread() == qApp->thread(), return); + QList oldList; + { + QMutexLocker locker(&s_mutex); + oldList = s_singletonList; + s_singletonList = {}; + } + // Keep the reverse order when deleting + while (!oldList.isEmpty()) + delete oldList.takeLast(); +} + +} // namespace Utils diff --git a/src/libs/utils/singleton.h b/src/libs/utils/singleton.h new file mode 100644 index 00000000000..4ba4dfecd03 --- /dev/null +++ b/src/libs/utils/singleton.h @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#pragma once + +#include "utils_global.h" + +#include +#include + +#include +#include + +namespace Utils { + +class Singleton; + +struct SingletonStaticData +{ + Singleton *m_instance = nullptr; + QMutex m_mutex; +}; + +class QTCREATOR_UTILS_EXPORT Singleton +{ + Q_DISABLE_COPY_MOVE(Singleton) +public: + static void deleteAll(); + +private: + template + friend class SingletonWithOptionalDependencies; + + Singleton() = default; + virtual ~Singleton(); + static void addSingleton(Singleton *singleton); + static SingletonStaticData &staticData(std::type_index index); +}; + +template +class SingletonWithOptionalDependencies : public Singleton +{ +public: + Q_DISABLE_COPY_MOVE(SingletonWithOptionalDependencies) + static SingletonSubClass *instance() + { + SingletonStaticData &data = staticData(); + QMutexLocker locker(&data.m_mutex); + if (data.m_instance == nullptr) { + // instantiate all dependencies first + if constexpr (sizeof...(Dependencies)) + instantiateDependencies(); + data.m_instance = new SingletonSubClass; + // put instance into static list of registered instances + addSingleton(data.m_instance); + } + return static_cast(data.m_instance); + } + +protected: + SingletonWithOptionalDependencies() = default; + ~SingletonWithOptionalDependencies() override + { + SingletonStaticData &data = staticData(); + QMutexLocker locker(&data.m_mutex); + if (data.m_instance == this) + data.m_instance = nullptr; + } + +private: + template static void instantiateDependencies() + { + static_assert ((... && std::is_base_of_v), + "All Dependencies must derive from SingletonWithOptionalDependencies class."); + (..., Dependency::instance()); + } + static SingletonStaticData &staticData() + { + static SingletonStaticData &data = Singleton::staticData(std::type_index(typeid(SingletonSubClass))); + return data; + } +}; + +} // namespace Utils diff --git a/src/libs/utils/utils-lib.pri b/src/libs/utils/utils-lib.pri index 7ceac359e8d..ddaae4bb697 100644 --- a/src/libs/utils/utils-lib.pri +++ b/src/libs/utils/utils-lib.pri @@ -143,6 +143,7 @@ SOURCES += \ $$PWD/link.cpp \ $$PWD/linecolumn.cpp \ $$PWD/multitextcursor.cpp \ + $$PWD/singleton.cpp HEADERS += \ $$PWD/environmentfwd.h \ @@ -307,8 +308,9 @@ HEADERS += \ $$PWD/launcherinterface.h \ $$PWD/launcherpackets.h \ $$PWD/launchersocket.h \ - $$PWD/qtcsettings.h + $$PWD/qtcsettings.h \ $$PWD/multitextcursor.h \ + $$PWD/singleton.h FORMS += $$PWD/filewizardpage.ui \ $$PWD/projectintropage.ui \ diff --git a/src/libs/utils/utils.qbs b/src/libs/utils/utils.qbs index e6b1d0621dd..77f80dd81b8 100644 --- a/src/libs/utils/utils.qbs +++ b/src/libs/utils/utils.qbs @@ -264,6 +264,8 @@ Project { "shellcommand.h", "shellcommandpage.cpp", "shellcommandpage.h", + "singleton.cpp", + "singleton.h", "sizedarray.h", "smallstring.h", "smallstringiterator.h", diff --git a/src/plugins/mesonprojectmanager/tests/testmesoninfoparser.cpp b/src/plugins/mesonprojectmanager/tests/testmesoninfoparser.cpp index cbbf9042daf..e25fec5456e 100644 --- a/src/plugins/mesonprojectmanager/tests/testmesoninfoparser.cpp +++ b/src/plugins/mesonprojectmanager/tests/testmesoninfoparser.cpp @@ -27,7 +27,7 @@ #include "mesoninfoparser/mesoninfoparser.h" #include -#include +#include #include #include @@ -79,9 +79,8 @@ class AMesonInfoParser : public QObject private slots: void initTestCase() { - Utils::LauncherInterface::startLauncher( - QCoreApplication::instance()->applicationDirPath() + '/' - + QLatin1String(TEST_RELATIVE_LIBEXEC_PATH)); + Utils::LauncherInterface::setPathToLauncher(qApp->applicationDirPath() + '/' + + QLatin1String(TEST_RELATIVE_LIBEXEC_PATH)); } void shouldListTargets_data() @@ -121,11 +120,10 @@ private slots: void cleanupTestCase() { - Utils::LauncherInterface::stopLauncher(); + Utils::Singleton::deleteAll(); } private: - Utils::ProcessReaper processReaper; }; QTEST_MAIN(AMesonInfoParser) diff --git a/src/plugins/mesonprojectmanager/tests/testmesonwrapper.cpp b/src/plugins/mesonprojectmanager/tests/testmesonwrapper.cpp index c257434151c..7db2c49480d 100644 --- a/src/plugins/mesonprojectmanager/tests/testmesonwrapper.cpp +++ b/src/plugins/mesonprojectmanager/tests/testmesonwrapper.cpp @@ -26,7 +26,7 @@ #include "exewrappers/mesonwrapper.h" #include -#include +#include #include #include @@ -50,9 +50,8 @@ class AMesonWrapper : public QObject private slots: void initTestCase() { - Utils::LauncherInterface::startLauncher( - QCoreApplication::instance()->applicationDirPath() + '/' - + QLatin1String(TEST_RELATIVE_LIBEXEC_PATH)); + Utils::LauncherInterface::setPathToLauncher(qApp->applicationDirPath() + '/' + + QLatin1String(TEST_RELATIVE_LIBEXEC_PATH)); } void shouldFindMesonFromPATH() @@ -115,11 +114,10 @@ private slots: void cleanupTestCase() { - Utils::LauncherInterface::stopLauncher(); + Utils::Singleton::deleteAll(); } private: - Utils::ProcessReaper processReaper; }; QTEST_MAIN(AMesonWrapper) diff --git a/src/tools/processlauncher/CMakeLists.txt b/src/tools/processlauncher/CMakeLists.txt index 1cd0e85cd42..e0064c62b34 100644 --- a/src/tools/processlauncher/CMakeLists.txt +++ b/src/tools/processlauncher/CMakeLists.txt @@ -18,4 +18,6 @@ add_qtc_executable(qtcreator_processlauncher ${UTILSDIR}/processutils.h ${UTILSDIR}/qtcassert.cpp ${UTILSDIR}/qtcassert.h + ${UTILSDIR}/singleton.cpp + ${UTILSDIR}/singleton.h ) diff --git a/src/tools/processlauncher/processlauncher-main.cpp b/src/tools/processlauncher/processlauncher-main.cpp index c651a276cc5..7686925521d 100644 --- a/src/tools/processlauncher/processlauncher-main.cpp +++ b/src/tools/processlauncher/processlauncher-main.cpp @@ -25,9 +25,10 @@ #include "launcherlogging.h" #include "launchersockethandler.h" -#include "processreaper.h" +#include "singleton.h" #include +#include #include #ifdef Q_OS_WIN @@ -52,7 +53,8 @@ int main(int argc, char *argv[]) return 1; } - Utils::ProcessReaper processReaper; + auto cleanup = qScopeGuard([] { Utils::Singleton::deleteAll(); }); + Utils::Internal::LauncherSocketHandler launcher(app.arguments().constLast()); QTimer::singleShot(0, &launcher, &Utils::Internal::LauncherSocketHandler::start); return app.exec(); diff --git a/src/tools/processlauncher/processlauncher.pro b/src/tools/processlauncher/processlauncher.pro index 260e701e3c2..737cb366cfa 100644 --- a/src/tools/processlauncher/processlauncher.pro +++ b/src/tools/processlauncher/processlauncher.pro @@ -7,6 +7,8 @@ QT = core network UTILS_DIR = $$PWD/../../libs/utils +DEFINES *= QTCREATOR_UTILS_STATIC_LIB + INCLUDEPATH += $$UTILS_DIR HEADERS += \ @@ -15,7 +17,8 @@ HEADERS += \ $$UTILS_DIR/launcherpackets.h \ $$UTILS_DIR/processreaper.h \ $$UTILS_DIR/processutils.h \ - $$UTILS_DIR/qtcassert.h + $$UTILS_DIR/qtcassert.h \ + $$UTILS_DIR/singleton.h SOURCES += \ launcherlogging.cpp \ @@ -24,4 +27,5 @@ SOURCES += \ $$UTILS_DIR/launcherpackets.cpp \ $$UTILS_DIR/processreaper.cpp \ $$UTILS_DIR/processutils.cpp \ - $$UTILS_DIR/qtcassert.cpp + $$UTILS_DIR/qtcassert.cpp \ + $$UTILS_DIR/singleton.cpp diff --git a/src/tools/processlauncher/processlauncher.qbs b/src/tools/processlauncher/processlauncher.qbs index 1050d0d592b..b2fd708169c 100644 --- a/src/tools/processlauncher/processlauncher.qbs +++ b/src/tools/processlauncher/processlauncher.qbs @@ -30,6 +30,8 @@ QtcTool { "processutils.h", "qtcassert.cpp", "qtcassert.h", + "singleton.cpp", + "singleton.h", ] } } diff --git a/tests/auto/ssh/tst_ssh.cpp b/tests/auto/ssh/tst_ssh.cpp index 597d035e509..0990f5727f7 100644 --- a/tests/auto/ssh/tst_ssh.cpp +++ b/tests/auto/ssh/tst_ssh.cpp @@ -26,15 +26,14 @@ #include #include #include -#include #include #include #include #include #include -#include #include +#include #include #include @@ -134,17 +133,12 @@ private slots: void cleanupTestCase(); private: bool waitForConnection(SshConnection &connection); - - Utils::ProcessReaper *processReaper = nullptr; - SshConnectionManager *sshConnectionManager = nullptr; }; void tst_Ssh::initTestCase() { - processReaper = new Utils::ProcessReaper(); - Utils::LauncherInterface::startLauncher(qApp->applicationDirPath() + '/' - + QLatin1String(TEST_RELATIVE_LIBEXEC_PATH)); - sshConnectionManager = new SshConnectionManager(); + Utils::LauncherInterface::setPathToLauncher(qApp->applicationDirPath() + '/' + + QLatin1String(TEST_RELATIVE_LIBEXEC_PATH)); Utils::TemporaryDirectory::setMasterTemporaryDirectory(QDir::tempPath() + "/qtc-ssh-autotest-XXXXXX"); } @@ -647,9 +641,7 @@ void tst_Ssh::sftp() void tst_Ssh::cleanupTestCase() { - delete sshConnectionManager; - Utils::LauncherInterface::stopLauncher(); - delete processReaper; + Utils::Singleton::deleteAll(); } bool tst_Ssh::waitForConnection(SshConnection &connection) diff --git a/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp b/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp index a247e4f9638..2ad9eba89d1 100644 --- a/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp +++ b/tests/auto/utils/qtcprocess/tst_qtcprocess.cpp @@ -27,8 +27,8 @@ #include #include #include -#include #include +#include #include #include @@ -213,7 +213,6 @@ private slots: private: void iteratorEditsHelper(OsType osType); - Utils::ProcessReaper processReaper; Environment envWindows; Environment envLinux; @@ -225,8 +224,8 @@ private: void tst_QtcProcess::initTestCase() { - Utils::LauncherInterface::startLauncher(qApp->applicationDirPath() + '/' - + QLatin1String(TEST_RELATIVE_LIBEXEC_PATH)); + Utils::LauncherInterface::setPathToLauncher(qApp->applicationDirPath() + '/' + + QLatin1String(TEST_RELATIVE_LIBEXEC_PATH)); if (qEnvironmentVariableIsSet(kExitCodeSubProcessCode)) exitCodeSubProcessMain(); if (qEnvironmentVariableIsSet(kRunBlockingStdOutSubProcessWithEndl)) @@ -285,7 +284,7 @@ void tst_QtcProcess::initTestCase() void tst_QtcProcess::cleanupTestCase() { - Utils::LauncherInterface::stopLauncher(); + Utils::Singleton::deleteAll(); } Q_DECLARE_METATYPE(ProcessArgs::SplitError) diff --git a/tests/unit/unittest/unittests-main.cpp b/tests/unit/unittest/unittests-main.cpp index 4d48f2c1dcc..a308b2a6a76 100644 --- a/tests/unit/unittest/unittests-main.cpp +++ b/tests/unit/unittest/unittests-main.cpp @@ -30,7 +30,7 @@ #include #include -#include +#include #include #include @@ -61,10 +61,8 @@ int main(int argc, char *argv[]) Sqlite::Database::activateLogging(); QGuiApplication application(argc, argv); - Utils::ProcessReaper processReaper; - Utils::LauncherInterface::startLauncher(qApp->applicationDirPath() + '/' - + QLatin1String(TEST_RELATIVE_LIBEXEC_PATH)); - auto cleanup = qScopeGuard([] { Utils::LauncherInterface::stopLauncher(); }); + Utils::LauncherInterface::setPathToLauncher(qApp->applicationDirPath() + '/' + + QLatin1String(TEST_RELATIVE_LIBEXEC_PATH)); testing::InitGoogleTest(&argc, argv); #ifdef WITH_BENCHMARKS benchmark::Initialize(&argc, argv); @@ -75,6 +73,7 @@ int main(int argc, char *argv[]) int testsHaveErrors = RUN_ALL_TESTS(); + Utils::Singleton::deleteAll(); #ifdef WITH_BENCHMARKS if (testsHaveErrors == 0 && application.arguments().contains(QStringLiteral("--with-benchmarks"))) benchmark::RunSpecifiedBenchmarks(); From 05e89384e222d24a115059a4ea12c0df0d390b46 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 23 Sep 2021 16:47:20 +0200 Subject: [PATCH 11/29] Wizards: Turn icons into themed icons Turn the current un-themed icons into icon masks which now get recolored according to the current theme. Change-Id: I435f9a43dae04797ad0b948992f77179d93164a8 Reviewed-by: Eike Ziller --- .../templates/wizards/autotest/autotest.png | Bin 604 -> 358 bytes .../wizards/autotest/autotest@2x.png | Bin 1029 -> 677 bytes .../templates/wizards/autotest/wizard.json | 1 + .../wizards/classes/python/wizard.json | 1 + .../templates/wizards/files/nim/wizard.json | 1 + .../wizards/files/nimscript/wizard.json | 1 + .../templates/wizards/files/python/icon.png | Bin 606 -> 342 bytes .../wizards/files/python/icon@2x.png | Bin 989 -> 592 bytes .../wizards/files/python/wizard.json | 1 + .../wizards/global/consoleapplication.png | Bin 369 -> 255 bytes .../wizards/global/consoleapplication@2x.png | Bin 687 -> 450 bytes .../wizards/global/guiapplication.png | Bin 567 -> 320 bytes .../wizards/global/guiapplication@2x.png | Bin 983 -> 543 bytes .../templates/wizards/global/lib.png | Bin 1411 -> 685 bytes .../templates/wizards/global/lib@2x.png | Bin 2555 -> 1389 bytes .../wizards/projects/consoleapp/wizard.json | 1 + .../wizards/projects/cpplibrary/wizard.json | 1 + .../templates/wizards/projects/nim/icon.png | Bin 1448 -> 609 bytes .../wizards/projects/nim/icon@2x.png | Bin 2255 -> 1233 bytes .../wizards/projects/nim/wizard.json | 1 + .../wizards/projects/nimble/wizard.json | 1 + .../wizards/projects/plainc/wizard.json | 1 + .../wizards/projects/plaincpp/wizard.json | 1 + .../wizards/projects/qmake/empty/wizard.json | 1 + .../qtforpythonapplication/empty/icon.png | Bin 728 -> 682 bytes .../qtforpythonapplication/empty/icon@2x.png | Bin 1284 -> 1094 bytes .../qtforpythonapplication/empty/wizard.json | 1 + .../qtforpythonapplication/icons/icon.png | Bin 855 -> 466 bytes .../qtforpythonapplication/icons/icon@2x.png | Bin 1528 -> 849 bytes .../mainwindow/wizard.json | 1 + .../qtquickapplication/wizard.json | 1 + .../qtforpythonapplication/widget/wizard.json | 1 + .../projects/qtquick2-extension/lib.png | Bin 1789 -> 854 bytes .../projects/qtquick2-extension/lib@2x.png | Bin 3717 -> 1869 bytes .../projects/qtquick2-extension/wizard.json | 1 + .../qtquickapplication/empty/icon.png | Bin 376 -> 231 bytes .../qtquickapplication/empty/icon@2x.png | Bin 689 -> 413 bytes .../qtquickapplication/empty/wizard.json | 1 + .../qtquickuiprototype/qtquickuiprototype.png | Bin 1123 -> 560 bytes .../qtquickuiprototype@2x.png | Bin 2376 -> 1268 bytes .../projects/qtquickuiprototype/wizard.json | 1 + .../projects/qtwidgetsapplication/wizard.json | 1 + .../wizards/projects/vcs/bazaar/icon.png | Bin 1935 -> 1640 bytes .../wizards/projects/vcs/bazaar/icon@2x.png | Bin 4321 -> 3539 bytes .../wizards/projects/vcs/bazaar/wizard.json | 1 + .../wizards/projects/vcs/cvs/icon.png | Bin 2012 -> 586 bytes .../wizards/projects/vcs/cvs/icon@2x.png | Bin 4868 -> 1195 bytes .../wizards/projects/vcs/cvs/wizard.json | 1 + .../wizards/projects/vcs/git/icon.png | Bin 1781 -> 551 bytes .../wizards/projects/vcs/git/icon@2x.png | Bin 4251 -> 1055 bytes .../wizards/projects/vcs/git/wizard.json | 1 + .../wizards/projects/vcs/mercurial/icon.png | Bin 2637 -> 1075 bytes .../projects/vcs/mercurial/icon@2x.png | Bin 6162 -> 2764 bytes .../projects/vcs/mercurial/wizard.json | 1 + .../wizards/projects/vcs/subversion/icon.png | Bin 1508 -> 702 bytes .../projects/vcs/subversion/icon@2x.png | Bin 2796 -> 1444 bytes .../projects/vcs/subversion/wizard.json | 1 + .../qtcreatorplugin/qtcreatorplugin.png | Bin 1766 -> 868 bytes .../qtcreatorplugin/qtcreatorplugin@2x.png | Bin 3467 -> 1843 bytes .../wizards/qtcreatorplugin/wizard.json | 1 + src/libs/utils/images/wizardicon-file.png | Bin 214 -> 196 bytes src/libs/utils/images/wizardicon-file@2x.png | Bin 258 -> 241 bytes src/plugins/coreplugin/iwizardfactory.cpp | 3 +- .../wizards/application/wizard.json | 1 + src/plugins/mcusupport/wizards/icon.png | Bin 612 -> 401 bytes src/plugins/mcusupport/wizards/icon@2x.png | Bin 1072 -> 758 bytes .../images/importasproject.png | Bin 895 -> 248 bytes .../images/importasproject@2x.png | Bin 1725 -> 465 bytes .../projectexplorer/projectexplorericons.cpp | 4 +- .../projectexplorer/simpleprojectwizard.cpp | 3 +- .../customwidgetwizard/customwidgetwizard.cpp | 2 +- .../wizards/images/gui.png | Bin 567 -> 320 bytes .../wizards/images/gui@2x.png | Bin 983 -> 543 bytes .../wizards/subdirsprojectwizard.cpp | 2 +- src/tools/icons/qtcreatoricons.svg | 290 ++++++------------ 75 files changed, 129 insertions(+), 202 deletions(-) diff --git a/share/qtcreator/templates/wizards/autotest/autotest.png b/share/qtcreator/templates/wizards/autotest/autotest.png index 3045e83a29d0cfe1c4151e90c8c09193244232f9..0139c89983da756ec82e75041594d2cfcefa97f1 100644 GIT binary patch delta 342 zcmcb^@{DPMWIY1|14B{fvS$v^y+5)_=7nK=_2ObX6SQSv?f=zqKC zrGQ`mH|uFi-TC*2TlE_M&Ke$`SMUE{7kd5j)&Ju^e&qj&Kg%)Qso&6qm+Sj~`P={g zGnq4Qlyb28w||nls@#+J|2L`YK6ypk~vw;I#Vj^-+P66&*uO4_uDPWxbWx0 z{wWdmH;fGpIPU)3-xA@k{wMatkxjq3YT2h%BjcJN-`W%u#vo}p8XRPgr2T`F6*2UngFJS BsLTKW delta 590 zcmaFHbcbbvWIZzj14F_c&aDg#4BrBLLR=Xb7_ti*ata%A3LA5an(|AU3rboFN?Quc zT8k^%ODft+t2#=nI?JoOs_J{I8~SP*`f3{cYa9FPnkF>0O>S^pRs{j-5Dn{N(u)r!Jg2eeu+pOXn_Jy?FV? z)$6yfUB7eV=G{AYAKttF`2K?@4<9{!_~_Y_r!QW-eDnJCyEkv%zj^!quzy28KLauJ{UGfpX zOJAKi^KzfD-gPN2gDm9(jvr^RhkQKA^vOWa!r{$zuVC4{TBkXGA2e#!w(mNB|KMt) z=tK2Mx=hP!uiU?2ClYc%?ZevQXA8a`54`u_%j>sigrozCB8Y_XiA@ z$DaJg>vuM@;j(-x=SO}IpJjh1?yXXZ(|q#6iSjR;c(kHg z^}2cvY;@fChp%xrkPni zKez8#eD1U)_dUywlJ~D{D~juj@9lj)=d=Oa(?ppM{tbard&%@K1SIO$eS}eU|6n$sqA;#OB zAF@juPaK|pcGUranpXiVyBLkC4s^;NIAdqJpit~bT}Uo(lCZF&Fsi^Iu|k zESS0AbKuJGvcF8rUM(@+Y3y&7*JIeepXoFE(th1en+YpTkJWRpnImQ|{?oF)A!pAs z#sjXc&EbEG8_ozE(49JYZZG45mwt1La+4cwx~;8CX#Hcjx9#!s2D!6+&z|pCciZT7 zzDo&Xc~0ShdcGgqzq45v2Z^niov>=*8#~vBJt`0Enboc*zhJIYV{LpPu|dw6E5TCn zXBU&xil3`>i)ISs{abar#FxXe{;N$#Z#}aQAA`=^D;_4&&PU(te{2q!x#8nq4o0rl)|K$1g6DH4}FlE8SDGMe~Uo>U< z;wdv0&z!S-=G+yt=B}7MZ{@s&YZfotuw?nhWh*zWUblVS#$D?-?b@(;_r@)IHf`Cv zW&8fE+xKtVd2q+BLpydK+P(Mao_$C69XP)K;E4l=P98jb>hRIihmW2)e)9Z@Qx{I3 zy>#yU)$$k7pxO?-~y<2x4+`0Sk-h;;v9zJ>S@ae-x zPai#g_V~&3Cr@8IefIMCi`Oq+zJBrY&C6GBUcY(w=FR(e?>@Z$@afa1FP}bt`TY6o z=PzHseEIhE>$k68zkmDo{oD5+-@pI({^RG5A3uNo{PpYC?_a-v|Ni|44E}<_zkmP! z{r_M8zcYGs83O|YV@Z%-FoVOh8)*y-Os<|Tjv*QM-rl$wEbJ(7ATh1ekh7b;LwyB@ zqoJIJno`^Xg#{YNJVKP@9&|QH@IL!~|F;3-rU@qwmx)LC*}o0TeRledPq}}tb8~mB zpqr-5gNCgyUS4D6tB-nnokfWC!9KYMz6>$fne&+HZN6M-=uUkQ8k5U=E4+cf{Yu%z zedP|CnseEEk86on&tr_4>SvN)vhs3VFTd)D6l5cr)g**Ubru zZoXj>uy4)w?qiI3FP}QHC1@$}ez9Bo<<#f>jW^X^`n=Pf2m=Gk)PT@BXTEFRdi|JlfV@Z6k9th1KQ%w4(5KX{h{=MVjc zL&s#;8saq_6|6XO&M5M3m^7uvl~M7^kFR1oy*SM4?&j{&YmwPsCwF8S1J`!OX}e8? z&YoNN?Emy13Zbewwf0U8oqJh}6;ih}Y^k-FaCwqL)!UbAn@%Y4Gw3|$2;;R}u<5^f zD6eIL?fyetr46h8@M>ORWBRH%CqOtOlH&?{wCOs}a|<4OE7UKZY@o86O}6-C!c_?& o{pzopr0O{H-LjV8( diff --git a/share/qtcreator/templates/wizards/autotest/wizard.json b/share/qtcreator/templates/wizards/autotest/wizard.json index 84f3f3d3104..9850079be8c 100644 --- a/share/qtcreator/templates/wizards/autotest/wizard.json +++ b/share/qtcreator/templates/wizards/autotest/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Auto Test Project", "trDisplayCategory": "Other Project", "icon": "autotest.png", + "iconKind": "Themed", "featuresRequired": [ "QtSupport.Wizards.FeatureDesktop" ], "enabled": "%{JS: value('Plugins').indexOf('CppEditor') >= 0}", diff --git a/share/qtcreator/templates/wizards/classes/python/wizard.json b/share/qtcreator/templates/wizards/classes/python/wizard.json index 960a99b9fe5..7a86aa341e5 100644 --- a/share/qtcreator/templates/wizards/classes/python/wizard.json +++ b/share/qtcreator/templates/wizards/classes/python/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Python Class", "trDisplayCategory": "Python", "icon": "../../files/python/icon.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('Python') >= 0}", "options": diff --git a/share/qtcreator/templates/wizards/files/nim/wizard.json b/share/qtcreator/templates/wizards/files/nim/wizard.json index 1baf376aa41..e1957ed3f64 100644 --- a/share/qtcreator/templates/wizards/files/nim/wizard.json +++ b/share/qtcreator/templates/wizards/files/nim/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Nim File", "trDisplayCategory": "Nim", "icon": "../../projects/nim/icon.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('Nim') >= 0}", "options": { "key": "DefaultSuffix", "value": "nim" }, diff --git a/share/qtcreator/templates/wizards/files/nimscript/wizard.json b/share/qtcreator/templates/wizards/files/nimscript/wizard.json index 94012a7167f..09afa96325d 100644 --- a/share/qtcreator/templates/wizards/files/nimscript/wizard.json +++ b/share/qtcreator/templates/wizards/files/nimscript/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Nim Script File", "trDisplayCategory": "Nim", "icon": "../../projects/nim/icon.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('Nim') >= 0}", "options": { "key": "DefaultSuffix", "value": "nims" }, diff --git a/share/qtcreator/templates/wizards/files/python/icon.png b/share/qtcreator/templates/wizards/files/python/icon.png index 8ab694fe7af2e26ee39f28d5c132b63fb74c542a..8eb51c44550c03e4d1c5d0fade9d317c16b2c847 100644 GIT binary patch delta 326 zcmcb|a*b(%WIY1|14B{fvS$v^y+5*Q}eOBOKprmJKnT&U}eWxmXw z^FX$lW0!1;Nx}<-6^ya$iM$zB9Tyr_HB0bnSan=#Skr95>tWS#<$%JO1^^7T$?OhFD z(mpGD&J~IFjJ&rSr1;*ve%a8>%wl3wSX@xiyJX*Ep@j*tkDh*D^!$5e`w^EIb)U-X zf2!p>u6~#|<;h)Ev${0<EamTas26(>p_PNL|PtR2p4dA&$NlpqUD}-%f09&-|NNKHQ5T^ zv})3Ru>W3u%#*@}AJ*O~3A-!X=up0O_rW!#sUj9GrV8yk>zrA7r)H%Z-3^Z{CA=xy`-g;s`?W82iCM2)z_&<& zLr+hym2cm)C2XsM0#`41AiPFjq*SnmcU$v=WzBp|yJnpJ%h=SfrW*KO=<9dujRp4& z4}W*o+v%=ws{4UPJ*SPfyfqA)cjDo-ZMs(E&30CntD8w`{Eo745 z5Psm$(ZImME#a`Bfr*9F!l9voX&n$MU~FsP5oz_B z=ujxEE8WoU<-jELsl zNkY%v^+K~Qoz0QsxpS43Az#y>QPpq%GbTxC4iyUr?X6#u^co$E*=H;Y=i9)}lCMcQC*UUKp61MD^BAIi$^A7eL?o3Oa# zvP(T%_P&qt_YIa^Y`ooX{8r%qi--@_``sTJM)9hYoK2<2S8=MMZ&; l^8iDS$Aj+a+iIAWIZzj1H)Cfb}j}6#*zS^5LX5UhS1PeSp|(b`3>0xAY|nbYV8aUUD%jg)R%r)lpX6 zSzg^$QPWjf+g(-LUDwp#(lNEQV`^*X)Yi^vtzFaGx~8>tO>gg>-rhZ2oiL|w(!Bmj^ZO^y>z_P-!qf#5r!Jg4ec_bpi>Az2JZ9dy3n7wS~ z+~u?8ET1!f)x7$JtLHCTvtaSsg^SlNT(WM_vh|CXtzWWi!;p4) zy=BGfEvwgVUAun!+6_C_Zrr(f%ihgf_io#}&S|H0!&j-5Gm`r_%cm(HHMeE#Cq%a?Cly>{#B_1o8P+`fJH!JWGg?%sQN_g?*@ zd-osRfACn2eYYV40|Q%0kY6wZb7aiVKiwDj>KGW9ggjjwLo)8Yy?!(Js(}bwfk?iF z(k5*U>qK$WD3QRFz;Ctg4u#WW3m0#HKL7i|y_cERnxC|s%cyogS$^MrleeCi=gc`h zMLWiF<((ErQ%Cjyp)CyacCBLB(ol10j=A>T`ewETYA+bPn#2|;y!E~v~ zOhNkv^CTvw3Bm>qQyQ33SY#9w6&l|#iJj0|(3ry{cS1>kVb9FsI$h6(;&Z{`Y#q+L z2@K40k{{fDd~B6b_td+q>UYd%_^`c~RddF2_PC7&YhsHQ+O`8i>GA!?PZR4qs zx_e$`gX{YnW>P;QzsNgqY;0#;mi$XsUZP;4LpDzVdta-7QwOt3fF$#t7H9s7b{4Ni zxAO1IEl4=WtTxdhaoLu#r|rVK-sM&PT_n#L^5bv+p||Ji*Uv57A77%}$hLkz=biP+ z{w^-_lo{*K*&R$5oU5qv;UM$B0|h)A8dxrE|GRgyHQSG-yWRJGIQZ0`&;L@kH>h~B z;Rmy}%{P^PKX75*%qJ=Ektfb4&)R`+ho@|vvG)@d);V&?)1_W;?t1&xceY%G7{h7? z=`RNo7<8D|e4k|Bywv-`ul4J0E`D<0;z`fn9`z-6xc9rCe#vrfnS1_nw%;vxzgIo` uTmE@|4g<5q0S2}Mj3R~&b_Ir?`3sv_yweSK?qOhHVDNPHb6Mw<&;$Vc)6_Ho diff --git a/share/qtcreator/templates/wizards/files/python/wizard.json b/share/qtcreator/templates/wizards/files/python/wizard.json index a01e32bf4a6..a4398f802bd 100644 --- a/share/qtcreator/templates/wizards/files/python/wizard.json +++ b/share/qtcreator/templates/wizards/files/python/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Python File", "trDisplayCategory": "Python", "icon": "icon.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('Python') >= 0}", "options": { "key": "DefaultSuffix", "value": "%{JS: Util.preferredSuffix('text/x-python')}" }, diff --git a/share/qtcreator/templates/wizards/global/consoleapplication.png b/share/qtcreator/templates/wizards/global/consoleapplication.png index 36c822d9dc126de648b8b626e93095637b362e23..3f1f148bd1e41347ba175c0d61e5d1e294e48b9a 100644 GIT binary patch delta 238 zcmey!^q+BpWIY1|14B{fvSsy~MykYNR?$Vonb4t>&8eYL>jagpxr4-h;U$`$-P5*(T3Niz>Uq>HxaMmb=jr`B_6yCZQJGS8=ws1t_I1x+ uF4Vi2C8)d0ODMin;#Zse{V%WW&pu-P$^TkrdQE-<$ZMXielF{r5}E++@M)(2 delta 353 zcmey*_>pOXWIZzj14F_c&aDg#46y+|A+8Jz3=Itp?d{W=JE!IpHf9wzwscI*&TnYx z1d&+?^|;B9&-3$y244$rjF6*2U FngH2KpUnUO diff --git a/share/qtcreator/templates/wizards/global/consoleapplication@2x.png b/share/qtcreator/templates/wizards/global/consoleapplication@2x.png index d94451c152b6c7ac1fdd0e2d40074141337d3842..d3995d28f799df733b471dbdec3f005121c4a83e 100644 GIT binary patch delta 435 zcmZ3_dWd;~WIY1|1H(978hhy}jw{$K)u$`k-swLxxAJe=J$VKRg#n zHd-7#+0!H^=J6y4hUBE4!o#{3maemCNW7qJps3M1yG`x#`W1aMu0)qTsJ(DGR%b!x zg9%Jr8Veej{`0<2|E(Hjy|nqWxVnLj+QvCN(;K&QaW4C`k0Ygix5})!{j3iZ(Nou;{aLxb(+u+y$Zsi*jK7vx-XGjd2fbxO?O{O>lTJ2JdK&fsRx zQt(T#;VM7Fp1S%2SL0&^`5yfF)6`I1|D-|mxBgDoHy|I@bDnTxj92L7nryebIR4Ky zjfGo&xTc$z`=9>Wf7Y8{VQHC&Nv>22E1OAf>zn+)a~2ia#?;r^STCC#rz5k>?wxPl p`-9=eF8_0v)fa0nXkePnRKx5nw@SZVrCkjaKc23BF6*2UngFrdyz>A6 delta 674 zcmX@ayq0#7ByrSG&Q$RZ*HHGUC@wI*Z?B)8=5<&v~*5w>71HX020XtlPw)nTRNuZ zfZ5q#l`S1pAyN>sKD(d+qNt@~ij_lXa71=!R8ClQUSxbhbV5;lN-4mSr%YcoYwn8K^HwZevToDXy_>i0-Lh@p`}ZH;fB5*}!>8ZBf1gcW z#?8RMpji^+7tFxIDJdnRqNS&AZei)vHfi#dsY_R^TEAgq{ifY}E?>EN?f&B@Pd|S8 z_WkE9743%%42(IRE{-7?_ukID9(Kq<#FhPsUc`YeRzZ<9$-SZm|NjS`df@F8F|&Bb z<|hx|9go~#?sM9?Cs4#SaEeOy?BluCrf(PbUiGQXJm0l3TI##L`C5guOSja&yV6x; zHlOQFbYfZ1>+GYEo-Ety@7!>HZ#{3;!Rvb`uT^JK&s!tj{o!Rwd#A(cUfvX@TJ>yI zrp1}vtr9m)41PEEzngHq;eUhv4?n@!4{^-f9_&An!g#|qhVkaI5JoF@A4cm87em{k(U|dsKZ}9ATs_0z0*0@P z8E^2j71)a@{0V6IsLXhZpT%N-y~64Ha~XtB{Q29|_~z$CZl4+TCp8ycY+y6_FrP8f z$v^y+5+trV81vTuK668YgTZX`zWoNg z^|lfnOmX!KrG7cE6$mjXsQWZz86+pH$X4LUl9bR{Aaz4hLdyOCW7$)AI}<~L4bG+v zy4ebA7Ba5j@njZca6O!_#8Ag8TsLvW!G&MhJEdf__D@)GuwL=Ma;KC`Q2gW-2Nl0* zc1p=KN9xRpDl&Z;^Ht)AjSKEjADiu~WMghm`9+_U*|6A_W zg9+YS+V(o^5y&`Nnq=B=K)Rg${oExPKWyv29>1@Wsi3+wD3*C*gAQ+NW`;ubxl^G5 z8$no?$J5o% JWt~$(695JKdlmoy delta 553 zcmX@Ww4G&wWIZzj14F_c&aDg#46g!wLR=Xb7#bQH+S{i!cTUYIY|JWbZ0VSqo!`*X z2_m!d8?p-;S~{k-bWF)E0I{tcLT#MF?OY=4U85Y`qn$ir+`Qx6d=lJ!6MTcy0zxx_ z!ZU-yvw|bCLn3oRB6A~R^J9}r5>m^O(ks%ktLrmzYculdGIMLQ^6Rq;8gdF7N-H}m zYPzcHdmCFPH?>Y~>6qF(VNU<#d2{BkoVRfGqNVFruHLeJ=fT~3kL=lZbnpISM~|O9 zbMEqmi`TARzkT!8z55RyKY9B6_3O89-n@JF?!$+VpFV#4^y%}LFJHcX|Ni60j~_pO z{`~dp*YDrIgSzjT)-y0L2$Tf*1v4-yY33Jh+PZc7@sls#{`h%lhB&#O30)vl53bL@bjRE$nbUXYl05zyIYoc*G()DqABqe7IXS*VS9Ml;iF{ z-&T!0gXL~AqPKqA?RxcBK=96vMBO&MU zgFk_c!Rrq#U0%*O=hwk!cR#Cac*J%*Z5#iCOWbG9D0HK9%h=ID&p$wo)#Y05=G5#ojuLEa_i>Ik2a4DvbStG zZ@#-~-}IUD()P_?Hm`El@GEBx~KlHU#KgPn{?@t%wMiK zRx^)S9DeDrrpMFwWvSGIq)C^PSozL8Y?`ztI3Y|nl7U}d`x4ZwH zC7`^WsYlN)etUd^^n}t?U*{^8Tl6oyz2}aTrowy1oq-4Z8P{7UZ!!I?le+Kf+tjFM z-M@}Gt&V>k{>-h8AtUD??^!16<4n(WO#9!=ub=Pg#&BKUz;4;g*UQ+0-`}h;z2AJ> p(&c}N&);W34NM{vv=2z1sGH=s&zd)afq{#G!PC{xWt~$(69A&n=$-%o delta 972 zcmbQwa-DsGWIZzj1H)Cfb}j}6#@PWrA+8Jz3=ItpeSLjt1+6(b4Y|1u?d?0#7ByrSG&Q$RZ*HHGUC@wI*Z?B)8=5<&v~*5w>71HX020XtlPw)nTRNuZ zfZ5q#l`S1pAyN>sKD(d+qNt@~ij_mCwPTo#W0;LoxV=lHy=#<%Ta=SWjEiTin@@tf zZ-R$!qK99iS3t5)V2W>WT2Odqa71=!R8ClQZdi0)cuZboTtQ@fL3Bc4bV5;lN@;vb zSwd=AQhG&dR#iq`ZDww5W?o%petlMceRcuJ>YVzb#=N4&{NkpP%J$OAj3%Y%U5k)v3kp@ zwcFNh+_`z%-d%eR?>lh(z@Za|j+{Dr{Osv77tfr#eBt7?i{!yt-CjG-Me-B z{{07!A3l2e=<(C%FX~^tc=`I}t2eJ+zj^)o?fVZOKYaZ3@#CjYpFV&2^7Y&I@87@w z`0?Y%&!4}3{rdI$_ix|Hi!U%RFld$p`2{nua7s$asA%cwn_E~qwN08lW$MxutJZJW zxM}yE%U7;myZ`vf(~qCNeg8R2Mf)KG1LGl27srr{dv9;1`X3IEXnXkR-8((~`onV{ z9$veHue`kc_O9a z%jXQO!TTj=Y-?bYGH+y*+QZI#rIwj(#Zw`k3I9ZR0-h>LESMB);LsYK(D3Qn0fwjR z8WBYr=F-VwX{^1%M^C$g)hNXVBapAri4v~xYOtk%XzxjLK^YfytoHf%J{uv)I zXRHxDVPuu#k-wkqc)n?x*U3KpSue~(>gTM_mHNjtL8sMKa$&0{V}ydkq(c*bKRjQ4 z)0A(!{PSO*WOlNoB|qED9J{7}RXR(O{Wb4D*{VXFb>9BdsviE|@Ym-O0|Nttr>mdK II;Vst01fxzN&o-= diff --git a/share/qtcreator/templates/wizards/global/lib.png b/share/qtcreator/templates/wizards/global/lib.png index 52cb73e382eab53f7160f98d2d3876c2319ccf95..e163a749cb03f4247afdd8c43605fad170c87b3b 100644 GIT binary patch delta 672 zcmZqXUduW`vYvr~fuSgKSu_I!Q;DaGV~EG`H7^C6-M0cMFJi(zl!)CUL4uUS>c%UKU9U6f0`GKhuJ{(+X z6ELgs;Kw`vjinb#sm)^Ulz(f}v+CiEDehTDhAWz{?EBK5RdJ+9M20u8XU(yV5`E_B z=>qe=gm4QWFDi z?{aQ$y!ezkOXKJxuBF%ccpMg#wYCJ@Qmt3pBv`KT_y1Fu5RJ^d=I1Z-Ia{1PIVK%T zTzV`|_s_y3lfH4SRbYN*VYBc_C9ikjPm^ha?iwp|j|EE1H##il)g)_QIPG4&c-NwK zp*tTfx_*~ep3zwNq-bUWFUy(24*^bPHuJQyC)=n@36SkyAM_`R|4iYFzT@$4?|pJ> h`ST!C(kj54nPErF+#Mg^`747Gqo=E%%Q~loCIEDwG!y^; delta 1403 zcmZ3>+RQycvYw5BfgzmfXFCG}tCy#XV@Srmw-LYnXQzs|3CDg>pT1*;gsI^%iL*&x z*oFT$9Bpw)bBq49)j@ary1#mR4>a_>KCY#3&L^SUXnT&Nit;0;v>PSGT|0a@TXOl# z?i@-DkkM#XY(BO2?Z-X&`c9cUuiTqfFiBnU$zGf1bDrDi*A&(lMsF0|C~p<}wCrBU zv}Gp+=hrUj5I(dgP{eYvMJvM*n?-Ty8}^7@KEk>%seSg3Ewgv%%gpi2xtQAh{+LK% z^TI!tD&Gu+wy-L^;}4Grj%3QK*XcTPbozt}-gJTIW{!8n@9y!u!r}CGTZiED%G0N( z?C`!VAS7|bP|1FAV2xUjRQ>inP19vvby|CVWcf^f#L@J_=|o5N*GGPjlsKv-I)5iM z-s$YzBelyPV7~L^XnHX~L=GB=y4@h|}_Sh#)E!qYWn+8a z7huQSe0ai%54)Mw4-`}tUv!L+>+bfxP*eX+NoDosmyMb)EpIG*bm4VOf05_?_VN#3 zcov~zWTW5yPPI0mv|BRNyK(eRz_RoZTr>lO04Ey_!Vp|5GP%@Q0)AJny6Ztcm6gX zsuONMa3 zvGH>){nHPcr={l>Ji2oIMqOi;x#;s|SN7X0&VA-u^&l+2et!I;?{5DWv3^m>)U)GI zuJ6e`*Luz*e!*H*b^)gS+u}c0-@Lm}aFy>SzqZhz^tE&NuPG#LKl9GT^1_DJ4}bZ? zGt_I7(~hz6E>^=0>&bGYv!U()nfeWq>aTlEsBifCPDc;w)i9lbkVb3*v$MX$JT z?M-}byFY!RHJ3MkrLeA;{b8;1E%#ex_}H)1R?b?dm|grmym9|J)-KMP;QCj6f49#+ zv2K06#V0)zJG+Oq!q>cRgvW7Bz4&|8WIngMt#z627l}z}B%a^xsPcT4B4gkDj4oU8 ztemWa`{QE6G-sT8@apUAg1_7244zKgt$p(Gzr$b7B*c15%*xDPNt)bF@pr2flLESBS<_SDZGU;p#hnLKmep`+@_ zCtB5nMfW&#?Ou6abCOD;IN$rV8oMqCJzC+T_J-rv?0}j*8+?`0&sJRUQHk|9wBi1{ ziJRBAzgc}JudQB=f1SI<;g?Pw)u&7pRy%dGTu5@AGLPODhO^4?YQpn-xXU{h z{n!ywa&Fa!OCJSxT=;*za>K%qSKA&xHRY%_&}*sR6?04Z`n#U)vJ+F@L|c?hH-F`n zc)fB%qo}V#k#l3LMw1o4nUIi)zqe$Z%ckPfF&b4?{JW&R{;r;JV&{b4Kf`j4hOOzS aXAE}!-}k!aa|Qzg1B0ilpUXO@geCxz6sM8^ diff --git a/share/qtcreator/templates/wizards/global/lib@2x.png b/share/qtcreator/templates/wizards/global/lib@2x.png index c959779b029380d89aa1910acbe51b8dcb3c49b5..946e55a7df35ccf52f712380c45510f8a0504643 100644 GIT binary patch delta 1381 zcmew@{FZBiWIY1|1HpNS9N|AFHvHY z&am|t<*t+0^gh7)>Vul*BAp+5_Zu+EYaE@tq+`Q_tL~HWv0^GyPpJoO$qgXeMV$x|TljE~X5t;9Kan#@_S` z4qG4WRB?&0nqc%;IX6=A*m8gOtqQ%2Tr;*T(%`6ZuiK#b$hhuyjpN1#>lH41Y-PQr z5XpDC!su*ytHk-ppD+LaOt{kXt)mrW&N`raDO?V{eSx&!xds%j12BOY-wD^*?5J!S}46{ zg3gVKYcWsS?(uBt`8KKhAm>WGs@W&&c`hv$@v3?7`>umtsow6z&!32~wdJIUKF^ix z=UO}Z)iq*0iypO0GB=+VO$nX-)X{3^+YXMJl{4!nnEab_qJOQ+xH6oFJ^K=WC4Ev5w{Um!{QM+E^ILEhO{coEz+yx#jarcO-^L@hX z-m1ImXI{cmo~+dqdh6r)_=1;-+(`}OmcFs2P2S_yJf|4dhwT$TwOUQM`gfito7mRl z(PFjV7-uhQdbBAxEn&W<`vMlb>|5DW4qRzGa$V4=KJ{XxhmwQmrh4(trXx2T0vWx3 z?$hwSyLw)N&o{KAR@2 z;bk;3o|w9?>_b!Yh3PGuUaZrbrow&l)&i3cysF8LEnD>_hl#CyaNK9pgEePG+AmGL zna*JrS77-vHBh&n+v3))3DyGt3wNzj9)S_Z9 z3A^e!Y|N%pO1Y zm$DyOSi{XR)wOcTG*^(PbZ(kxb}K|mXG}WHE;ZG4!kV>Zt!=3n^$aKWrc87FKi?y0 ztInl6Z5L1PQFPwB$z#J~^=S)RcHauo>W(PBpCr%obDrDOO(&ijy?ZF*;oP@qlSi)c zJ;s&s!ap>$x&<2hi!GjK>eMUWOcnILrJZ!_jY6%7(J7_#*)Dxn|6(<~+#*}Ve*8H8 z=H64o$q{0SEOrY6-94Q9ZfxT4ejqGoepki6B(i1Fr%w5wf1}PjhD5g5e(03i-S+L` zhiR@mnC73jSe_xzn;zL>{h?F#UVB=uOse3#1L}26OtZFboZ?!+Jb#L&ScZHY?^+!t zfgdWqLXMlwiXvSMK6uV~)|8f85$R&_!E@dU=XZ+*g@2^@nC3NoyV${9Q}oQ}VC3u@ s2h{V;zD+aVW>jBts`g4#AomAmhT!P_pPbLWrGiRSPgg&ebxsLQ0EUcwT>t<8 literal 2555 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 koBtf#RD!jc_= 0 || value('Plugins').indexOf('QbsProjectManager') >= 0 || value('Plugins').indexOf('CMakeProjectManager') >= 0 || value('Plugins').indexOf('MesonProjectManager') >= 0}", diff --git a/share/qtcreator/templates/wizards/projects/cpplibrary/wizard.json b/share/qtcreator/templates/wizards/projects/cpplibrary/wizard.json index 217a5c1a735..c66dce44b0e 100644 --- a/share/qtcreator/templates/wizards/projects/cpplibrary/wizard.json +++ b/share/qtcreator/templates/wizards/projects/cpplibrary/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "C++ Library", "trDisplayCategory": "Library", "icon": "../../global/lib.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('CppEditor') >= 0 && (value('Plugins').indexOf('QmakeProjectManager') >= 0 || value('Plugins').indexOf('CMakeProjectManager') >= 0 || value('Plugins').indexOf('MesonProjectManager') >= 0)}", "options": diff --git a/share/qtcreator/templates/wizards/projects/nim/icon.png b/share/qtcreator/templates/wizards/projects/nim/icon.png index d3f8575b26beeeefa33520c293f937374693d74b..8fe8c03639528d5470fa968bdd44795ac218bd3e 100644 GIT binary patch delta 595 zcmZ3%{g7pXWIY1|14B{fvS$v^y+5+sgE>D^Oa@lblxhnuY2`O1a= z{~cJAc>Lb{f^REX9SV5Q{oVD|Vp-dCZm~7>|NsAg{#(3X{@y+Yo^LXig+DKT|Nnpf z+K3H5wABg?25e%_7R_CLl6HIWiipIkN7OI>f!af_W$eO zMmn%q{Cod@{cQ*7u(cMuD;Wb5-hWix-5|xcs9XP5!Gj|=PftH5bALCR^Lf?8ZD#YO=+*VwOW$E#IsY54(B)o- zZ=p_-&p84DH6MArk;i0C+d_icFk$a{&9r$$+>3FeJAUa z6B(G-eeyThXrvI%s%hWC_;b$Z1B$;FPwr>rTO!^deC;rwo5FHA&%Hq0X;MF1OwKrIr`btA2$%oC zzgM9;y~ls=asD%#zV_PtJ?*Kq-yrt=GV6xbKGW~Et*)zxKG(Z4X3Kl)d0bBqn*@to zJ+tm~y}+u*dAdFu8PwGU+vjY3-??^E-JXiS)laToW?sR_aJ1`=R&QyLI4J#iy85}S Ib4q9e07{h~H2?qr literal 1448 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 literal 2255 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^R$rg^$JhE&{o8(rBW94euI zy-B0P$wokcLu17XmJj?QJY9k!CM^zEBv__QeY?$i?o&0XdnK026APLdnOOp-dmDJ9 zG(L@5mz%z9_uO|y9YtJ4Zh2xW?uVzPzT9?sW?7om?%MrNyl3V7?z{i{-uHdkxn^7_ zpi7I%k;9I*^82qP+f$6Ty}z$-o67LhwDF0n z;K}{^=9TyE-(T>zwE3g|L8*WD_Wu6ie9fA{@m5r0hj3HCozV3gKZbpDO7P_Qbo!~8 z&6)WxcbNxzwHM}3J^xVj&rC66+oQ3{nTxNrK70N@^891XEb(2wH4D_c!oTd-=C~v^ z^~v&&x$RU>|Ah{b>Zu^y-zBhs+~wQP?b*1oqQpM)5-I+SJZpmJpTKd zoo0Od%C8yN-kapNVZrXM+0T|L-O^ zg2?!pr_v zPa6XyYZ65#^_|pTA92T>FHU3Qth}a>Q=gamel)woZK1l)Nx)ovlKubU79M4{CUcF2 zg{K22a8G5ve87ETj90qo%`35$!5YUM&z+dBA3n8N@F?^78(Oz3Pn?ZNpVPNO?51`HghTu{l-*tSQi|=oZ&s{{r-qJJmaNyq)elxA@W*e< zySwb%Dt7hYXWRdz*3Rn+uzlcs{pz$u6Kt1kim=g*+Emp3?BLzW>G_{4{(3Rr{~$88 zWW!R63tKcM&fmWC!LuFfm-k<_*g{{;hQoVyu$OJPGizq?^tcOC zf_(2r7i?2grC6m|h z+FjrC+5e-~_}-39*>JARj&~1-+A84%eqIMBOD{0~Z|a~Jc67$~8Sl<9@>Dq#2DQbM zr|q_Wm6R8;PQT};JJXT&{rt0yB|dG^voW}%A^O?(>V1)h+bbW5$@s_{f4#^exAmOC zF}}MU{GV?*Ofx*QME!ACkItpgx^$7}Os+Mq-HR^qqx2JHO!s%X*gu^TDww8&T zGy3w@$Z^f8(BeGOe%i17^j|AB-w&0HCqBA-n{jZ`wPSY~*fUpMl=aa~^lbdN(A;@j z(5A)5ocRv(A2?TVSmUPPQXN5l@4eH7y}Y+tp_An2Vxe&A{wDCWSl6Xbgte96v&UJ|1NT2oQUDoRz>nGfCc5=$?(6LiR3C%)C=mpKdw2o#nRT#|6951J diff --git a/share/qtcreator/templates/wizards/projects/nim/wizard.json b/share/qtcreator/templates/wizards/projects/nim/wizard.json index 1239e444e91..68970d4d9ac 100644 --- a/share/qtcreator/templates/wizards/projects/nim/wizard.json +++ b/share/qtcreator/templates/wizards/projects/nim/wizard.json @@ -8,6 +8,7 @@ "trDisplayCategory": "Non-Qt Project", "featuresRequired": [ "ToolChain.Nim.NimToolChain" ], "icon": "icon.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('Nim') >= 0 }", "options": diff --git a/share/qtcreator/templates/wizards/projects/nimble/wizard.json b/share/qtcreator/templates/wizards/projects/nimble/wizard.json index 4f3ac9d8ea2..8a0a14b8304 100644 --- a/share/qtcreator/templates/wizards/projects/nimble/wizard.json +++ b/share/qtcreator/templates/wizards/projects/nimble/wizard.json @@ -10,6 +10,7 @@ "ToolChain.Nim.NimToolChain" ], "icon":"../nim/icon.png", + "iconKind": "Themed", "enabled":"%{JS: value('Plugins').indexOf('Nim') >= 0 }", "options":[ { diff --git a/share/qtcreator/templates/wizards/projects/plainc/wizard.json b/share/qtcreator/templates/wizards/projects/plainc/wizard.json index 2f6d8bf5ca4..e7885bde6ae 100644 --- a/share/qtcreator/templates/wizards/projects/plainc/wizard.json +++ b/share/qtcreator/templates/wizards/projects/plainc/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Plain C Application", "trDisplayCategory": "Non-Qt Project", "icon": "../../global/consoleapplication.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('CppEditor') >= 0 && (value('Plugins').indexOf('QmakeProjectManager') >= 0 || value('Plugins').indexOf('QbsProjectManager') >= 0 || value('Plugins').indexOf('CMakeProjectManager') >= 0 || value('Plugins').indexOf('MesonProjectManager') >= 0)}", "options": diff --git a/share/qtcreator/templates/wizards/projects/plaincpp/wizard.json b/share/qtcreator/templates/wizards/projects/plaincpp/wizard.json index 3475d272072..52cb071bee5 100644 --- a/share/qtcreator/templates/wizards/projects/plaincpp/wizard.json +++ b/share/qtcreator/templates/wizards/projects/plaincpp/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Plain C++ Application", "trDisplayCategory": "Non-Qt Project", "icon": "../../global/consoleapplication.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('CppEditor') >= 0 && (value('Plugins').indexOf('QmakeProjectManager') >= 0 || value('Plugins').indexOf('QbsProjectManager') >= 0 || value('Plugins').indexOf('CMakeProjectManager') >= 0 || value('Plugins').indexOf('MesonProjectManager') >= 0)}", "options": diff --git a/share/qtcreator/templates/wizards/projects/qmake/empty/wizard.json b/share/qtcreator/templates/wizards/projects/qmake/empty/wizard.json index 84f019c222f..1c449e0c0d3 100644 --- a/share/qtcreator/templates/wizards/projects/qmake/empty/wizard.json +++ b/share/qtcreator/templates/wizards/projects/qmake/empty/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Empty qmake Project", "trDisplayCategory": "Other Project", "icon": "../../../global/guiapplication.png", + "iconKind": "Themed", "featuresRequired": [ "QtSupport.Wizards.FeatureQt" ], "enabled": "%{JS: value('Plugins').indexOf('QmakeProjectManager') >= 0}", "options": diff --git a/share/qtcreator/templates/wizards/projects/qtforpythonapplication/empty/icon.png b/share/qtcreator/templates/wizards/projects/qtforpythonapplication/empty/icon.png index 483f71196d3a58d0ed21b675e3198a15b7880949..96a00a82ebf90f9564100c07c51ffcf340469702 100644 GIT binary patch delta 658 zcmcb?x{7szO1*4=Plzi60|Ofy8#_C@nVFe|g@u(vsDp!pqobp7r%szTZN`il zGiT16HEY(KIdkUDox5=1!bOV~End8M*|KFTR;*aLa^8vQ_3PK~-Mja| zfddB*ojiE>&?@87@w|NpPf-6_Ms!06%W;uzv_{O#1t@FoWlhxtJhE~aTOja;ni8M5tm*6+O3 z?o^(C|L0#cY4nqs;J$oc<^Cf5eoGs^3mqIKP4(P4v0aWFhMwE+9(czr!n{rRMMKI# z&U%#wpWe2B(+nk+jxq{Y(pequaNaQJYRG)sy!+;oRch&S7Y-g-p=7-5;z0}9pIkyO z93&qLi zC%QB;{QTOxmlrH}!?|YL>%W(mTh{#+75cHv*6wM0+@hlk9^8KatYG00b)EH#wtua> ze&+n_>i)oM*0;?6ZfBen&#HO$a7f|qCmXiD*t=rsfeT8B4yv+8{lgao>OT1EwDt3R dw~w4Vo=2XZt=F=Yft!JW!PC{xWt~$(6969)Vx0g0 delta 704 zcmZ3*dV_U>O1(~iPlzi614BbYLwozQ=FX`(g^gK-jV&Ehv-2BTIzePsenWOaLrcfh zmX0ae1t7MSL#VZ5n2lqYt#gEfTa=@Fw3B;`vuCWEcf4P4T0mGvU|42QcxG@!c1UDS zNMvqUbZ&S|UPNquWL!aPQb}BLNm6=wQhG&pL48AES!+d2cU4_aW9#IWj;XDk)7rYG zw|CFz=$YBsJF~NQR#)GwiBlF#nznGtjKx!DE}1@S>5MtcX3bqOZ{g|%i`Fbyyms-j z4a-+;Ub%Y9nswXPtlz$2^X}bykL){e{NSOJ2M?b-bmY|GqoBnZ{NOs z|Na9Ee*XOV>({SezkmO}c5vEq1_lO!k|4ie1|}uV{K8FJw{Aav^5xqfKM!r(w3C5> z(c9C-F~r0B?WFMVLk1EK%n>f9Jwye+U$bE9iu!&`_nqx3v;Y6?XS|E5kKQLEZ(~<5 z-|F4j>GMPuvi)zHq4J!=!Eaj9y8BEw#m@REIxcgbEPJ9Q#FTA8C}-x@W*x-^=eeCW zl^tkz+{SqQ75nzfwyjRzuk0-_Fk6yvZb^Z`A+}xxeHo3z&sxkLHZ1<^BFMGw*zJwY zdIA}HZ#>?-rGSq$-ERNmy)NnT4GHz9KUT0}lo&T-ba2 zg6_}SFth3L3n!|}ewg|5qIZs|)`ptbTYM64&)Kl&nGVChwf?)aQvL2$3-C4lDO5PI zzR8k@*TDGJ{d8jk!5U9vjh~MrV<%}$Y?HBn$>Q`;B&Bl6qZN%D@h6^FEs?UrM@A+C&ZP3fq{vMiJ6(1mzS51k55WUN?KZ4Mn*h#%g4vZ*Vot2&(GiAKOi6=Ff21TB0D4` zBs4TMEG#S{A|f&}GAb%6E-o%HF)=AADK#}UEiElQy*@o7BO@y-D?2+oCnqO2H@C2` zu&k`Cva+(Krlz*Gw!Xf;xw*NerKPpCwXLnKy}iAoqocF4v#YDCySuxmr>D2Kx390S zzrTONgb9-;Po6Sm%G9Y-r%jtSW5$e`GiT14HEZ_l*>mR1nLBsxym|BH&!4|=;ljm> z7cX13Y{iNdD_5?pU$tu0nl)?IuV24m!-kC;H*Vg%dCQh9TeoiAzJ2?S9XodI+O>Q4 z?mc_9zCr+L`dFITS3l}b2ym;~Y_3Jlp-hA-j!J|iy9zA~g z`0?W>PoF=1`t;eeXV0HMfAQkQ%a9{CN zc&QS1;Gt7NT^B=NXx$F~|FuN=yqSe`^z%9Ms;u7kKX3fb{QO%F`<9~?9n3Nh7}za7 ztY=((@vm)%g)O_=wG9V;ak}WLU$<_|l3z5#ZmDejiubM|o1X_u3phD5Y$ zh7P-J)*o3rF7Mdst-t#n!?%~ooC_xHh%39m_~lhHua!fr{_9ePV_O)PO62~xTyST< zp^Q-Lg`X3BdKouN6j;M!vzY%0YxNPS(g%}f$O!8y`pHW8Fx}bIu=xt(Lot)5Q7GGq#($c_d>Tv8kx7L!SKI^=AYOJ3z z=C~`eipBhL6`o+~r0|X@rh(Vi`pc=J z*sZ`Nm#jce(zTGGB+(-^B~+_s-m{oH*&@Pu@E$ zpXcmtHRY7Q`CeovhbZ$8&PefugWshdu$G?KV|`iA;pl&*$F1UO4=&k%R6d}0i2L;P z{&x(THXDRq=oQ`de!ymv%eMQC4a*rRpQo#}0@zI^wa2g5%wqIqIn7+X2rihyxr=Svzq;r(O^b5>P4`;4v!UVd=f{n0 zpO@@i_W#9-8{aP`O+L6e^YPE*$|x`2^Jn(|I#91({Ggwy_n$GEeH{ZrC@!j-#{*|(AFVhSUEwj@K wx?^(w;B}que=Dv2&+cZHd2rx9(;udLF7K=t1j^oLU|?YIboFyt=akR{0Bp4z4gdfE delta 1264 zcmX@c(ZV%BrT%MxPlzi614BbYLtkHCT0v`0PD5^PLwozwwze6W`3<>6P1*TPnMDoR z1x?NE)0^9;WEV8#6gGg!{D$U^DJ`8-TRNv^6@Wyt!DLIv)RvB^Ibe1+SY=DcREQLu zgs5rhsGnlx5NhohX5$!U;}mY|9AW1YVeb-Y?;7Rg5##I`>*5vX>J{hali==~;2)A6 z5SkGfmKhY06&#Tr5}6$ul@k`77a3O&8D9{cP!yY39Gg@epHiBTT9%wqnVwypo>K#I zXklY+VPkGlV}5Z{QCVwQb!SCQS7mK?b$xGree=YImWhq6lbTv5H?>V}ZlBW9KBc8& zYHR1Twyx>z-P1dIW_0w-?ChP{**mMJe@@SYITI$&pEzZ~q^S!gOII9}E?%}_*~(4JS8ZOkX6u^u+t+T`v2Nqe4V!mw z+`N0!mOY!c?%iC!b?=sK`?hZ1zir3<9lH+h+0p2NHL9Nx9}$ic%Wj~+jJ?8Ld_ zC(a!|dH(d7i{~#~J%91)g^Sm&UcY_q`t2Jx@7{m#_~E0cj~+jL^7Q%BXD^;TfBELk zySMM&zkC1T{rivaKYaY~;nT;DpT2zufgd376AXU+`t|Gg@89SC)>nxzFfeGA1o;Is zuy9IB$*5@Q>6=?vI<-xjJZ0+A6|2^7*tlu;p37IRUc3MJ$y1O~KWC|EKV)EFn(FD| z7?N@C?alAemmOr-J~ZrLWw$6)XcBrPrxA8X+s`F%Pso}@LFJ(WF5ElBABeH{N&Wh3 zt?T(qCG-8IBfCF;tlabcczyM)@0ag+OkO@oMF|8Rom;ZDYu^R%?4^{_;J!CqQ$?Rr$`(N>b|A+qhns&tm?>7H5i@E;8V#jTp z|L9dKs97)Glf;)3F4Z4;+sU>#;cQ{UVzUkNEEVQ6WNc|neZ%-PWpWa;_f6(^8hiL| zZD0*4wm$hXGl^a0(eCRfZ+dQG`obnDo#r5NU;nj$+r-tiR}L({D(9fZyv4zKVf@C1 zYbvS%{tT}ks2hE16XFnT$o_DRMJ|A;KD+R(_O>lAFQhRUdL^XpDhWUDe%EkbO~$vy z#ZwNjt^U7fbL{^+^><&nC)OWmpAhp~j{S|{Z+^#5N1q0BOg6UL&*-_~+)eL_t`C`C ztzB6j?&Pd#_hwme_q)`C)`z{YxFGw%i}HV4Zm@2b{d~XDeYcQ6L0z4V!3(=g z{~PzM_$#KU#mBqtmdTYeR1)!yhK^fO9f@4>y~BkG`0+ zQs;a3EWW(er`O%z^SOh6fsdA3Ot6mVCsr=il`ZM@o>@~rd;k18{aOE;#d{WM*?kRl ut-KZ{YdqKe|D27F;= 0}", "options": diff --git a/share/qtcreator/templates/wizards/projects/qtforpythonapplication/icons/icon.png b/share/qtcreator/templates/wizards/projects/qtforpythonapplication/icons/icon.png index ba97ffd66209b8e35cabe4ab8b851aad85e092a1..e2a92fb5667466143f474f25f039948dcd08e9e2 100644 GIT binary patch delta 451 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 JWt~$(699eq03!eZ diff --git a/share/qtcreator/templates/wizards/projects/qtforpythonapplication/mainwindow/wizard.json b/share/qtcreator/templates/wizards/projects/qtforpythonapplication/mainwindow/wizard.json index 47a26438bd3..a16b7fd900a 100644 --- a/share/qtcreator/templates/wizards/projects/qtforpythonapplication/mainwindow/wizard.json +++ b/share/qtcreator/templates/wizards/projects/qtforpythonapplication/mainwindow/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Qt for Python - Window", "trDisplayCategory": "Application (Qt for Python)", "icon": "../icons/icon.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('Python') >= 0}", "options": diff --git a/share/qtcreator/templates/wizards/projects/qtforpythonapplication/qtquickapplication/wizard.json b/share/qtcreator/templates/wizards/projects/qtforpythonapplication/qtquickapplication/wizard.json index 1967d1666a3..268367d1f6f 100644 --- a/share/qtcreator/templates/wizards/projects/qtforpythonapplication/qtquickapplication/wizard.json +++ b/share/qtcreator/templates/wizards/projects/qtforpythonapplication/qtquickapplication/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Qt for Python - Qt Quick Application - Empty", "trDisplayCategory": "Application (Qt for Python)", "icon": "../icons/icon.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('Python') >= 0}", "options": diff --git a/share/qtcreator/templates/wizards/projects/qtforpythonapplication/widget/wizard.json b/share/qtcreator/templates/wizards/projects/qtforpythonapplication/widget/wizard.json index de9f36df931..6a068d5fd3c 100644 --- a/share/qtcreator/templates/wizards/projects/qtforpythonapplication/widget/wizard.json +++ b/share/qtcreator/templates/wizards/projects/qtforpythonapplication/widget/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Qt for Python - Window (UI file)", "trDisplayCategory": "Application (Qt for Python)", "icon": "../icons/icon.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('Python') >= 0}", "options": diff --git a/share/qtcreator/templates/wizards/projects/qtquick2-extension/lib.png b/share/qtcreator/templates/wizards/projects/qtquick2-extension/lib.png index 0566f1d5f12eff40d7222f38e83148f10c0cde38..7e53940e461eb3fdc5836d1c59b8ef2e704c417f 100644 GIT binary patch delta 842 zcmey%dyQ>^WIY1|14B{fvSQ>VT5zZ@XZE3HoZ0I6y#y+lxL8f zvqEE5$F{pxx7Ka=RhM=D-@La^GQaIx{O@0SVA0v78~3eSw{K&;>e7bQcf%tT6CN|p zc2a2m_AGO%Qv;Xws!dU=xejZ%9@x|RDg5!9a}DQvE;n5;YY2Ee<%oo;p>w$MmiF`S zU02MSCb4))T9km*Ddyt>SrereGo4XrIoHzO*3#0JZaAIs*a`+?j}R~=a7I^jPV|x)>ytzom>L{UrH1^9emZlb1Ji-atW}c6F)u$0F>o*_T$yr$ z+0~Qb1e3tC7y)g)q<5!67~XI=%+L?mqp!sJa`WQ@>ln`HJPUnyUFzzs`d|hY#u?j# zj?G)GvTfy7H8uuThLGp41#HYOUyQ7Dkz`1`_0i0~{QTtCfn1F*_T1dcce{8^cNohO zx2S8^Uk19XUz-=e#Bes+Dd${RyX&Jn#M6p-xXvHkDW567oV zWH;y(T$T5?zw;pR)85DHte40pubEc=?0oToYaWf}^0RZ&A3b@gVWz+Ci$Q~zjQ{(; zk7rBWw>Eime0JE)KOY3-s(j>jNhtVA^siTL+WFbZdSf$@$a3U93&(?)Ln)EOwqIarn>sjdPrjd9pgZKPZy$ ztzf!w=||DNF9`>hJv+GUf7;`?q$!u`jrV;DIcf5rvF2Fgvh<_^c~G|TboFyt=akR{ E03q~{+W-In delta 1784 zcmcb{_Lp~pWIY=L14B5|&vpg|wj-V{jv*QM-bQ5x1cys(y*$%z`pZv?|K6SXuh44l zM*BH^P6u=rbu{HvatbIg9-6j+^(d=>i|c{bOPf}7bU8()Xs*`oTG655wKZwtsvTQ; z{H(hgZe6@q^Y`7==|Ub4R3}V2H)W>rp33({#pm`upZ9yOblTZp_5Y9mP`A~tcdQC? zG<;BcUIy z)I*!rwN7}yyMQl;e-kzB=Eo$;ou8&_{U0KWK zWV0|O=#$ODD;MVddFzs$c53BO&Cm;vbrj?4zb;|&klyyUt;c3VW>%r^)WB&BJB>JP z3KYAiu{2Hg@N!&dTchM4xbM`8wP%C7vsd+~rE=y>iwaxPb(LwE>DGux!5*T~ob?7v zrbQ~ATCw$Nvi*TeA&M8)++sPId2@mHc~^e%fC;Zf_PEdU-CEBS*|Dr@4nw^C)_e95 zm!(CQUyYuvHTmeH8#lIYsoxYft*Y(YqrdxoI2o8W#-9;xExH=KW%ALLhcw09kLq3j z7y2<%fw!mnn6S~|H3plRA`CX|NI&%=rQ0UgxBiVEn^M3NsUIb8&iH6GwC=ZYly40- zpS$tI()AoU@87MxGJCUFI^&hFe_4BDIxlwyTb^BM#CJrmM`v1ur+uKj7-xdw)T50? zRcp_(uqMyYl^s6D(-bt7C-1bgCI5jbtb3ezSX$SygwDCP zC?aNykDpGx=WX}n*$3HwKk8Hwn>b&MalHa(N9%?YrXCu(hayytgs(Z*ux73GL46Im zCa185gpFsC9$nUJXpP@+Y{}X~p_&hLd)p>$s?u1U({QIrDB^`!j%nd+&WgEV8LLIt z=eEw~@7toLDVuj^2QT}oSqpc4Q+V>^-CU!}*_;Uvo0Z>b_SH8qo1Qf=G2t;SZC|+Y zCyR{D9XE56-C_+}xsIr>YybDJ+M|v|tMJKw?fiyo+xTAmdnmOeWAoeKhUqF&(-K6c zO}l>h!v_vm*HGa(Hdi@qum4)G>Y0M*g2VZF`r_S!4|*5-nJuvWy=p~l#3%MuvnT!uy|H^go1C4@kuRBx zo^UQox^}aj!RXb)h_&D1_Gc>i1>CRb=_|{=ZJF`@MN{>D9*5T_i`f_jFKTWRY_NV* znYVZylevG{mG<5f=JHvsn`Ngz2rB1)qqAzk_Y+EKCxs{Y=AUBvai%gje`&y+3m_J2xVFId?0SpC++D=$A!NqP8=Ye)Tm^NKGS0$H#7q&Ndw)O}lj zII}YfpEo!&J1zdrUJ*`t#hW@uik;U@Zu!X3nE$COv7jJB=I78N_t$!A*n zzBf0MU%uHe%0YmyLG;Ogmrt!sjsK6&>8}ryP^;RuKBV@@UF$j5bni}I->dBB@aJC5 z3l&xO6L}}^rB-ZPzvWnmji|t+49%b0D!FT)N7R^^ocI04Sii7dQ1YvLbHDE-^{`+2 z{>gWXywPa=cl&$X*;6<5URYeW^>bLDG;wt-n@r22grwZ=lb?T_S#)5+k>4s@zJlsI z?v2axn198$o=JHxl{7U+h$F@(z^!-_B_@QNY^d+SiRG7 z_XIUw$Gn4eI?PfTHgWqt3G?vSEI4sHF3F`MB0W8DXQNH$c_W>BXE-?~WV`*A>GxK# zYIOLx?W+2P;@BDdb7N}ki-o-Qmk1dZM}GK`l>SFxBIRbQ-pxM^bP zi9$t9@d(DHPfKUG)raro$S4x|S@SEuzB4>#!{#dvY0>BMESfV9Ppbb@!SU(%nF|(- zT}P(#Id#51Q^S37dfic$BLPY&6VviEmmE3yEbMv#PfF2Q?}LvT#3#NA${AE47N412rKy)WtY|N%Y8y44h4Hvh~ zE@ZT6bb0q`-Gb%(5pjR|7$-b?bEYO~)mrn#MTcBxJ$)tk>p^ynxY}>7b&WGc9fX*# zACh$6r!ptI>P)1}7dbB9qfUiK&KkdYS^v#G@`TUA4`(mme12bU%~jo5Sux!V3=9mO Lu6{1-oD!M<0~BRK diff --git a/share/qtcreator/templates/wizards/projects/qtquick2-extension/lib@2x.png b/share/qtcreator/templates/wizards/projects/qtquick2-extension/lib@2x.png index 90a842d6e83cdd59159a57436f1687840ec8c9a1..262342b2cf1a0888b43530ee264130b7f71899f8 100644 GIT binary patch delta 1865 zcmZpbJ>{2njv*QM&d$sX5Kfn9*#5Qs+?Kx=XO{~mD$?F)YPHOvZ;Z6MQK)`M=M{1rHg~amIZtwE-M{gM><&kwb71< z@?Oi)RWsKwI{IQszk}KFcWP;KU;ftK9XT)kq?-RE{Tbgx`M=fM3-#Qyi4Ttq42&%Q zckP9?z@2=J=RSw?g}CFkOqD+SRD2Rw!p@Tpo~*}xS&yrVKAFW;q$0{PgX@o~=pMPm zGyL_jL5yvdZyr3_Zk;gW2ouljSEBRh#RpBAF8AJa>b+?J7vdXc&iuPqi1Qb>$E7(9 zD!PFQNoN;+tYHdMyrbc>qu$cgRYg-p;p88whi-{UXHWVG38~a7UeoZ|VmZ^~1#j@b z*te(Dd9&{6-_!8fWBKMN&#Yrd{kfCA zcbRhu=ku+c?ZN-Me3{QIlc%xO{U<)wKI%PmWVSO`PX$Ob2lo-F)=qPGpL&Hm8fPXw zi%>Vn5jl3$TlImKfnJ#|O-)s8-6^?pn#_4E3CE&SKm7JRoA5;a z=bh!r|MWIKUU}0*QK9Lv@XgwqvxaNcq9gY`Ub*AQI)*An$2Fabt+N(CT&Z*aW6BnJ z1~w)yLG=rBgyx<4B(q;rfI*m1P-5PJ`r9)5PR+8lOPs21psvudAYXg+ttbD;bB10kF#E-zprFvPm2+CypC`G0vFh7TdRM{o?W< zNS;AOs6cqdw~6cDzFw94>SGC$5SN&57B)nvd`LLGB%^k2LYiraiH7 z%=ln%$3BGjp=8a*EllM*?Oix{MGq}YE0H*qb;sB1;3-SvA~%hHk8N%&cD!HaP{9(f zwD3UeyQ_{5FV;_Ufh>#RoxRur+Xp!LEaHD`@;iJ`C z6r|aOIBK4s43>NKBlN7mwtz=Thf6rNok?q4 zKUpWWV9x!Lo~C)%0=64T+WAb6R&3BRuJNzl{;beuSAd`4Zsj(CT|aoWe}sexTwC>D z%DPPJ3dj5BO{?X6KHUDC@ysu3NBh&mvSo*U@Spl;_(REVl5|GJFYedsA68V$_u6c2 z-Br0fMBPJFY>BN&q}LA5BLDjO!}?YKdP`>AkhO8Rd++*U;T%Dsmhu_Vt0l6#5`KDB zPmi*d`?}Qd$d;^E-xAvT_=A72?wfkPA}so!2A>i~{i`qU3xC*8KI3_P?PBw;ed3}z zrz?~;#9i5+d$i>EdW(t@`;C(;8)~Xw-dgHtc(84D6L(O3cFM!@oqyW3zLjo$Td%OU zbW@tshMQ{+tpBz1!J(Y%Mz5SX%jH(;8}7Kp@arv`sE6c#a8}q6+d1*g>UI%wm%oIT(-IumsXu^?!Lg_5WD$aftcF*X^VgS z;4_+YcUSwL?DL9MpO?>_5WeBhY5Ugc-|Hhz*4Jnl&ai!|v-)y#Z_qQ#ILA}A5AXBO z6TKyTz4wF0euv{;eremD7{H4cS@6|VLC&t*_$x5GNYUeoLex1B}s>hx5_St#;S5_VKOtCnf zf5u4tK}v7EyTLW5v!XXH6)ju1O((l}%ln$Bl;?$^>{fQmr;Fxfm7lK~Tw(&w12X34m==CsMP z8MW-Ern$oH&OJNf`SWep{N1iyX{N`&dXiT_Z+mQ^ zuj5=T)^~v)r>}cHQ_twm{#ko}ap#EG%+=?Q4v<$o>?~y&{@HQWcb&)=nqCtURy)jY ze0;gEvSj+lf9kU&KdtBva7x|$U?0=`xoPigy?!hB8XB8kOKU8Pe)zto{BG}|R6R3p lmgPr(i*j#CR@b$DXD?MQvh%3HsxVNk>FMg{vd$@?2>>jFXz~C6 literal 3717 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 diff --git a/share/qtcreator/templates/wizards/projects/qtquick2-extension/wizard.json b/share/qtcreator/templates/wizards/projects/qtquick2-extension/wizard.json index 404fd0951c2..45989fb7de2 100644 --- a/share/qtcreator/templates/wizards/projects/qtquick2-extension/wizard.json +++ b/share/qtcreator/templates/wizards/projects/qtquick2-extension/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Qt Quick 2 Extension Plugin", "trDisplayCategory": "Library", "icon": "lib.png", + "iconKind": "Themed", "featuresRequired": [ "QtSupport.Wizards.FeatureQtQuick", "QtSupport.Wizards.FeatureQtQuick.2" ], "enabled": "%{JS: value('Plugins').indexOf('QmakeProjectManager') >= 0}", diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication/empty/icon.png b/share/qtcreator/templates/wizards/projects/qtquickapplication/empty/icon.png index d9747274a916f44137140403f57f67d0f504599c..8be6c371bed58aaa169a7153c60b6089f2f9b299 100644 GIT binary patch delta 214 zcmeyt^qg^mWIY1|14B{fvSZS}0*n=8LzR$0%H T>%LvT6yya@S3j3^P69XZ3Hf`N{ z{N&STFWr55Yy$?S=d>;5g2vs8u4#`@DMsT8Jygl{goYZw@knEwg%>`s)M zG(*_nEYGS}W$X7_`!~$WUd(cQD&L!F z_BN5P(#_oucYJFM`B`eA+oNLi`h2d|yRE!F(%+ch%u)i_@% diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication/empty/icon@2x.png b/share/qtcreator/templates/wizards/projects/qtquickapplication/empty/icon@2x.png index 7d79b412e3291de71c14559163ae80805344d999..094df34dba0079f9efc03fee842345b328bf2907 100644 GIT binary patch delta 398 zcmdnUI+uBZWIY1|1H~){# zyUD?uC5L(MiQUl)6qtezoROcwlqtv{z{zBApy6uc(xu#6*+Ur;-n&XBEMCvE;olmb z4eNP7>|omPrSbaZqw+h}vASI3WN@`j;5jf$?!(`?JO&3Cn9+$J$_?>s8BB9suRon{ z-BZthCq|}{;rPaeP4(fo4oo&Gcv;f8nLl(v)&G|!jh{c--*j5Kb^6lE1+V!}T;J=f zVEl3J|81;WTn{KP7?lUF|9<%?;CIRAcsx7KF|HQt$+03oobhy{Ww`Rw~ rInvv>H0QrunNry+&WnsM zh)*faE@;RpY^<#9u5X#x&@!p9by8#N)tcxE}uPr<=puz=Pq15 zf8px;_aEPX`1tYT=TDzLfBO98^XD(0zkL1u`*+SE`eno_z-{U%7hi{*$L4KYjl4?dPArWt>4*7#J8` zJY5_^GVZ;-bv%eEP{840x|+m^8KR7r8;shr6(k*8XZ-&!E57U4^?=ya#QR@E=C3k8 zo%cL#QOdTcdFnR8=5}+bzX2+-c_!*N_T;vIAi33 zzmk<^8H|~N1w3Dr-^Vp{ajaleu20}#QDRUKVo7LVyv&@;t@YD1lp!JCQ}ThyN}hsk zYj`%S=G|b$YVfW3`*LfBq9_NEQbvu}jQI?6UNhSNKgqz%V{ibCXs~Dck=meE@b#|m z^Y40U?CbL1+cr$@Z0M`Mee1w3qYaNs8V|dMJ}62)m&x>7+jvte*Ouu^Ll->fKXHAp zBW^ZM_VbqrF5H-q+T*h-!7JTK?9=_mWA!(EFW6fB-7e!l$N n(aTe3o&OSLDO&u0o&GBOH!=;UPR?auU|{fc^>bP0l+XkK=`}!t diff --git a/share/qtcreator/templates/wizards/projects/qtquickapplication/empty/wizard.json b/share/qtcreator/templates/wizards/projects/qtquickapplication/empty/wizard.json index 4e4936a77af..401fb21e16c 100644 --- a/share/qtcreator/templates/wizards/projects/qtquickapplication/empty/wizard.json +++ b/share/qtcreator/templates/wizards/projects/qtquickapplication/empty/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Qt Quick Application", "trDisplayCategory": "Application (Qt)", "icon": "icon.png", + "iconKind": "Themed", "featuresRequired": [ "QtSupport.Wizards.FeatureQt.5.6" ], "enabled": "%{JS: value('Plugins').indexOf('QmakeProjectManager') >= 0 || value('Plugins').indexOf('QbsProjectManager') >= 0 || value('Plugins').indexOf('CMakeProjectManager') >= 0}", diff --git a/share/qtcreator/templates/wizards/projects/qtquickuiprototype/qtquickuiprototype.png b/share/qtcreator/templates/wizards/projects/qtquickuiprototype/qtquickuiprototype.png index 949b09c85166c1061989941cc6fe69f3724b1d6e..3d120b6e30c486903085c1fd4cafbb1b7066cfae 100644 GIT binary patch delta 546 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 0}", "featuresRequired": [ "QtSupport.Wizards.FeatureQtQuickProject", "QtSupport.Wizards.FeatureQt" ], diff --git a/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/wizard.json b/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/wizard.json index baa5d860e18..2a72449b2c9 100644 --- a/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/wizard.json +++ b/share/qtcreator/templates/wizards/projects/qtwidgetsapplication/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Qt Widgets Application", "trDisplayCategory": "Application (Qt)", "icon": "../../global/guiapplication.png", + "iconKind": "Themed", "featuresRequired": [ "QtSupport.Wizards.FeatureQt" ], "enabled": "%{JS: value('Plugins').indexOf('QmakeProjectManager') >= 0 || value('Plugins').indexOf('CMakeProjectManager') >= 0 || value('Plugins').indexOf('QbsProjectManager') >= 0 || value('Plugins').indexOf('MesonProjectManager') >= 0}", diff --git a/share/qtcreator/templates/wizards/projects/vcs/bazaar/icon.png b/share/qtcreator/templates/wizards/projects/vcs/bazaar/icon.png index 4c04cdbad952103f7efff1241cdea6079b55c0c0..256a2008c83e033fa17bf044c7b6834c9694fee9 100644 GIT binary patch delta 1634 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 HoD!MoiJdd%IaoJheQ+W3C6lWc-PM*$Zv7E<4 zX0|8KGcMWxYpcBe*6(%q%lE&(CpphvXU(^J=YQYa|8QpTlUniKML+r;bTfYW_ICH| z?eEmomup`(%D=z!`@6fl-#6HuTI}wB=eG{(&aInyUwuOL%bmptXCQR*p?9FuSJZ{)pv`TU;L3y&a)zH_&iEZH(m zH~QfPM%F);m7h{n-Nkew9A>X8&3?V)$rkhcdv)3kA69(i)I2-OG`(a)1QRp!)Yg=% zt3scio}S(_%QU}n`iuD!4;7R|8CWg#n##q=8MtbqZuGX0l|ikBSvNLZ-1xX~=g$0n zX%6}K_H_34nwxJ=C@Bcljo#+7GVsvh!`WAj)ZE(agB(AOs)h?>va;Hb+m*rH~_iGLnJvkv*TwI*AMZPC)|Gyx{hi?70GcT+N zOpdaCeQj;ZBPnB)GY`kFD^V zyDP9gDQ^F{zmpgap7-+cYX0fHZs#>=TSY}jjm5`$rR!td12-8=Viib=)zp*>3)7wX zEy7ybEa$?XEg$?=hpxW1(7FA{5tn~GeDZd8HY6Ur+pqoU!^FpvjDt=%s_Xup)9Y)! zth|*=bjzigrrBXjy{3LRywrPoSz)2zmc9cWZZ)Pl3S4~k-RcP6IZtngkH#Q2_TdDicTNAvz?@=)0`qn!R~?^5wZ5 zw!Fe?b}%r_^0b6?wHZ>1bD!vSMrM`FXZGcyC&p{GFZZ zv`C1py^-;0%-)A@@6LZ2vMnca-n^E*duu1o?$$nb?AXSQ8=WNI-q^Uf=;^69vI$vB zmZZH9I)6>{!dL0-?L0r(FE0yOdC7a4&cn|4Z_i);J^$*e z(p5&mB~n4^4(9pyB<=pp*RonFrXP34{rBbN{>hmdKRC^9EpqL4F^Jln#yicpTG)E` zw{)ZbEu4$O9m?O`lQ&M&sl8hK?99WJRqyZZbqqcj?eO`^%3vi4-S~ZTJ}L3>^`)PW z6`2?>%=zNo-rx5BWgJSHnwoyd3&d=m(BH6Z`SRr!^Tl>5|1v5#spP3SWuk<`_xJXH zN?(;c*%V=yeXK{)=Blr!XXcd^6P1qqNAD=Y7K6`iX@1vzTjvXw_RUbYS z1_W^Y_V93UV5pBh-Y3hwJxAx9?)S5==X>&V9Mw4eZ@ZA0-fxM8uXgR) zb!nHdx`9r=thL&#iyIOTzgX+m`)POW?|D-i=Gj(ntoti=OF`MaPw16T*xIPjg|ic$ zc73q-2nr6~yLazP?^y;9@0Y*7H=XUm=jZy{+utf(&VF#9(P`@EuV1eg{tVcrZf6%~ zqC6)lFE3Ba*Xxg&?T3elkMCk~ic_sAXW`Cptf{GS$+))Ioqug#YuLf&L`gR{w^u@E z*y6bq4=_dS$k5~q``BQ&WJ}+i1y?HW@2lMyaCBv>_L}PN@BIAy=7u_5xH|XLiB~4M zx2~K!w=Q~np0Zny11rb2Rqq(K^1ca(as9?zFdRG73oy2l@Rx8lDCTNF3J^ zsJ$qrIfY3lXoL8qNt330;$Zr>Y}v9N!M?r?8$L|ekLP4&={A0RrZPm&u++NjjmFMh zQVfYdJ32}^Ce{A_c5s>gOnuX=D=r4RPdu0y<#5yTdTh+D6~2fH%xe-8vVb2ZuJYR;DXgpn3$Vq zy1svJzs-Un>6|!E{7zFxkLj+TKD>#&duJ!F64$w>U$2xu5O6VO*pzyD+EEsPbFB-V z+fS`xyThEGE*`ovPA?Em+yV-n{<(z2?rzbqibBwKrQZ9D1v$7Z$$c&HerI2h~FT zHZq?{PW-5l;``t9m%3j^^%R+g6?-NuSFqYx{M_%Zz4%X2mgW^+Y;!ZDjJ{_bmW?QK zZtqois^&LG!%{)e(?ulgrNp$Phb~vQnL56o@XSivSMccS@cc!yr(Bvei9KUQ$MpRQ zHO3Vm5@MMy<=z$xnI5(}%vQ7IoCWJ_~GS~n6^HYdvQC8(bX3{9p{>qSUv5QICQPqe5iiW7T1iVzJ1ASSIQmibT+W6 z|5vo!Z|+Hz=}Xj)o;u}qII{VaXxdA$NWJ9bWaUFM4@7n)vhr_H8w(>c)+1)mEW2c zKR)i2anaP;XU*ERR~eoBCQ9cYy}xqbbkE=4-u|p%dFB5?b@AUnm0~&_`t_PGOg3y4 zjukpDx}?E0CiFyf?X+V}f=3n^7FhpSBDBnRwp+eM!G#I0ujjvB>^AZ1s)9A0S-Z>M zi?N?Lc+gQ+;R*MJr9l=&HhFg}WHf4GGGyXPIDh@%c@i(6;>a0ix7a89^|n>}Jdz6= z1!ICZR3l?27D-yj}cqm$r&B{#?9chYJhu3C;)ePjd0{ z{>^zcMX%w4u(xQ_wz6-Fyk9TPPg{7dVp+`RXJ;$zq^C(+u^wa+41MxABilgPTR_1_ zD?xH^jq>i;s9%vQ(~fvv=4*8_IrG%OID5e>`OKsCGkCk%*wo9|omdrR9?E}r+-`ZX z@o%Ga*dflUNu@HEQpB}1ySlqCI~Va5Y-Gp`5WV#3(mC-do6<#lE^v7E+=__q&UO-< zqQA_^{et7|$xjxaQ+Zc)tnx@|O8))0TOlmr7ev&|=h|5QdS;*8(r2+yS@efTM1+KD zZq(Mi$&;$wmKj!V@`*bT=WKAt=j!|ZNXAQI4Mi`vWHuiNSXSfA@^seS#?m8uuLoS# z4rLO0&Ntm})tr(~DRciFdS|M&d0LC$^uDcIeOKjJd&@U)y*D-Cdvz$|^Ru&}S|WE| zbmS@-Ep6{S_-lqkYpF~1+0(20E!;W|1Tow{d6JcP#iR- z`6aA=eWDqUtKY?>E=h^XHUVZI=6?p>&y&QS{;vM=BC;Yxz-`vWH4pADJHM;=`Fb1X z&ctV)&4NiUZo<77hLV%JQ*S zpKNm6RZ`gOIAQhimA8&c1?*cnw_AkQOaIQDJBGiQJWH7W&Fgr?(ZR{}DBx7?g!tMI jsSH~4KFLlH`)RLM6;Nu@>dC^uz`)??>gTe~DWM4ftgu>NbCV=b7nx$;Nke>%|wuU)5Z8?Cst6)$i{V zpZ|HT^768udiS61R(r7Ys@=bJ=Mv6^Yg~!-ni{sw{9FF3w{QP0MhG5(VD+28##+O?me4(NP3CH>Fr+p#qX zK|y7|I^*u|XRdp1Yb78o9}Ip{&nvc z-OTy7ir;eHpS_zlyU(1udBz^5cWsPT_226jna@}$tEr`G{3kuCo;NlqefhfBpAQah zujMG(!NYd=yGYkNxlFHJSMM*DwTjANoxic`^K_2ermD+Q1(tdxzj!D2r;*=NU5{m* z^S!&;o<0lxzpqaCvH8i7m--FoBfd_xdL%BAr0O_nir0tt7qaB{J#fCV(Bt_<{-<5< z>I##zY9GaaW#{HlQ9mCeAzE|nRi4R&0~ZRkIWH=4W@b*^zxuj;#l`kDveQqd{3^^| zo#mk6xnYM4gS_&bQ>$hb9!y{JFprzFw?|G*v2W6ch-9O`XWBnVOm|EE=jlEB5hIfs zbHjW?mVZxYS?xZU{-$pA92bs9Yg8W8o8O)OH*U4*-Z##_G9Mhid{ZfSUp}LJP2B+> zF1uf)?g!I-u3hBR^T<(EG%;#3G1*p=W5W0ESo;r-53^_8w&xK)!q+J8@rU8hYE$z$ zZ1XpU&79Im*4Li6%=`Ud_gURf-<26^YF=IZ!F2zZ+LqNX><&yY zux9ei_`BFI{omCo_X|?r&V6r`$KJd8w&dAc)>l}}zau{511)F37- z?#(AAR%oaG;AeAf(mwvgk4sLC$K2Q`rG^YmL(eQ$dES#8{ely$ zd%s&wyl`n%!+!USz56{Da(D#T%=@6y!}jm%t=oKzCh}c|k61SH{^;?XEYu-j7NYl? zG3xT)vW||Vh{zDb%!w=Swbs6N7Z$3S>GN&syS&4_tliT$9pG2J{#u6l|C5*8E*e6% zqBX~ojuxi8{nb0i`AYR!qgksG-ie>*+2B9pfn!yjQ)54CN${+$B-I#NGp83QBH;dPN?@u(oveZ;~(J`K; zl}*0U+ zoTlO{P-Inu;EG#THf7tr^(+kJbfge_CAG#2tpc0#9 ztFIEXX5GfX=mkpraud|9XjKaS_^Zv$)t!4lUw3`Mt^aPvk6N~WskX!hTm?%k*78JM@*_fMTylC>~uF6R;zO_OcUofx7b zN=#O=x3a{mJYYV0O-;9vga2xksp*r`^Qu4fGH0ef6`jBNpuUb)Vb#QHele@JRc=vA z6C}6`_xR;M>TOXznkqKar{QUC#Ktt)QwrKPi(Ffa<~;~;eX5@0`JmC+-BQ$hQA^>T zhV$n{_ilbKu>LDcjYmd?ZLyeYV(dLJro{4%vlq{8JaKB3_W$bKXCIz@Ik%6=k2`u- z7O&v(?n+gLV%NlrOcoxQ6{?A!ztwolDqq<2Z|?4ILd^&F9QA#`&lb0C<$r#$K#33K zPu@S=qHyKIkt3ZItoL^*cDr5){ovW)ci%r?Wp6%%^Pzvu?i^p#*A#BNEm^bo-?6#% zoB1`Q&GMiBbIHB!=^}JpprOrk+dDbs^C~k=EK1dG^Wa!y-|cnEzTI5$s4J`J<r z*Olw_l~=Bu`8l(rtD5PbP4&KC!4<+Sdz$(u9enot6aURB@1D&cL!YE7N-P7J=oX7@v8=j97* zGre_1GVYZ3Z&`5pj$i7>y3I{1Slit%{W4k})fAU+HFwH!Ie;H(AOad!PJ&?Q-!XeMT{Jk>1#ean4TOvnP4!J0Cjq zBD&zwlbh#{=gbaWS#|4gTMU2v*3fdHhEF0Q%oW^>E1n&`TJDPKy zE;MKBt|>U1SJlMeeNTPXJU`po`w>D*_wv_GvpTtGsW#`ijS^p9noId!oDuQ4S;DNK zOvA(QlDZ0`Qw8_6+&j-MRv*)0?DJ0euCQQR#+jd@2hNrFtbC*`th&MD%duBp-@}*; zB+aG2F-2@R{;rbSTe9imldr$p>icf@x22k9ynb`oUVvp``h_``Cd(UVo$PdB5EeYk zY`aqZ-S!<{ru14o{BpB<{>!Sf56i@EurE60KYua%hRB7*8A+Vho&j@hCUPV!>FO)F z{&}hLp$l^r8^khup0)C=k~uT;c;EEPXDiY?ID9v!rRhJ~y5lV$Q@|<-PSdn~+=h!K zy`J1Ga?=uPV+{6FdwAwFpPb#d7P;l=k*jPgHqG{6xxg#gW%Js6XPt9f8(&m+!h!P) zAH(|3mB_lDnlmLY|8RgxH9^J!i}712`u$SSaKD$AQI`2y`x?`YNo8|_TXZ99 zIC8%)Vmh#>b>oB$`yae$QF7plHDxN?RfPoJNtu- z7Yjs=_Uq+(dUUA^%{XwhU5#V8sgXqj>zhkcU;hz(c>KlZ+OV~TcT&FBT&&;oYnL~t zhu`@vnZB~VHB+b9$%lw!ZqYNi^}fI5UgN1%tLMC9U#zuFy`YmPb&Zm($vxAQr#c%g zvvwC9aFhBXmh59+78u9yYWvwGe@aYk=0=~$$=FhTYrf;vttP6?(?yu?awi7pa80>; zziO44Ny?e{jK|E`l~bBF=f3;H`dCPSbydgqPoFxOx<0*_|6NqXd3*8`@n2oK)r=e>Z#p*^EZ?oTktgZW*_S} zr}Y`WNo)lwn;#{<*?4s0#2Uc~%)x<6Jd=e5_=LXPW$&~9dj5WHmb&H6)hm5IzO{8- z@Lpdzcaz@ke{UbBF3&lzJSt-G&l%yS&l7K}oh$S6JD=pcsOy<-@7&!Gj>pb6S>O+gPk@@quY_Xv~2dyNa*RVApAD zP(J=calxlYp@-i6Ie9YnovrM|vX&L+x1YXRyYXY^HP#0;W_nK@-<&*TwceUzN6F4> zY&9}7`Jd0T_RF-k{jO$HvvBWSqu()gEKesVwWv}I>Xqc(5;Um*D;v23#G>#_+?SDQPAr_SpYoj$LeuSR0( z%j0bFPFX##)Q*PFEcg+dz5A8nZ(oPKDa(bmo^2~LeOt6MAe2A;^ooU*^4nt9l*JtG zQvcpC;pVpZy9^%^^?zU6a53dueTX3P%2@>*iw`t?!fY0>3digfE$67K6w z^Pah1dZ|jl$=&Tomt^kC{^5Jz{EQ946*YS}zqFkGwMuT6#hfRvf1h}+v2!usiA9_C zYaeK33CY}WnR}-How?b$WyY3)~*x5W#rv(orEH@36<*~J#@cEri*T;XBE zQ~TCuTNehh&N~)y{MsVD*qvop@>vp`Ef>c*2z7b;+c91YnaA(RH{Dg>PI)1-cXwy# zs)??1ZGZDe9(2E7zwgs0b-mfQ&93T|$UkuV#N9v5Ch-pUG^;`uhIz9Bmmj{SeDJuU zgOZ)ZE9buNo1Om0%n3dvvuZ=fq#5%PKc5xa+`ODnAyYDA0d)@O)=Fhi1{JfxXf>&Sb Zjau!QG}xD9FfcGMc)I$ztaD0e0sumGD6Rki diff --git a/share/qtcreator/templates/wizards/projects/vcs/bazaar/wizard.json b/share/qtcreator/templates/wizards/projects/vcs/bazaar/wizard.json index 060b55944a5..8a20a1ef2e8 100644 --- a/share/qtcreator/templates/wizards/projects/vcs/bazaar/wizard.json +++ b/share/qtcreator/templates/wizards/projects/vcs/bazaar/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Bazaar Clone (Or Branch)", "trDisplayCategory": "Import Project", "icon": "icon.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('Bazaar') >= 0}", "options": diff --git a/share/qtcreator/templates/wizards/projects/vcs/cvs/icon.png b/share/qtcreator/templates/wizards/projects/vcs/cvs/icon.png index bd925b2e984a416bda2b7f754a7ae16ec644120d..1f837052dae33ee37e67572d7b7d20fea7ea64ef 100644 GIT binary patch delta 572 zcmcb^e~M*-WIY1|14B{fvSZ>RWsOfHl-ZXdmK&b35CPVOE~Nm(8( zeW4rko!#6*zKFH9cZN8tG@TGqnI`Ef%M|PC;<>F^ASIUTq(G8@nWyk2u^y|ENY%t; zyeYrSD(*l1%_VEay7BoJoAcj)H{PHB{JV3#*}OeAI@6-E`PY{LQi+p@&Y*_FY#m@iGwP0#DY}so##vBP?Bn}=5FBR;C?CdX7*NY zN&D)nO|K_kp3iwmS+Vx3V`lJ@<=S`dWO}(rl;w!NKD($sH+RM2)#^ptn652pU2@~o zogeRvY`-&P7u0$j_KSXSg3wT`BCSi#^OAUH&I&avTxi!o7ulL;d9u5`lJI) zc7pOs|6I(3I2DC@&Ko@UKGMx7@Te;P&)Z+-Z66(C<*z(86lc$2+{djT)N(`dhs=ow z+=c6pZ>acT)YEa}@@3<~^YiXpIwW+nanGJlQWHJqxIGi@^yqL=;K-5kRGHSnQU5u7 z2g{rNjHSsR*4wXZ?_RGi#COAKp@F6P@(rt2e3{wyXHnO#o}Rs;4Rm|-}je)F1mEe>dS)7;s@?F zKDerQ`wnx&?R=U4a(gqsR}{}qORV|zGjyY)n_8dFBF2Yz$~Iis(laON_Kn2ji|qb> z;H_*fvf95QX5zeg(UCDxS3~};ak_qCjnrNB{Ln?ale1n&wXNvewDxeYk419F=O7^bC ziP9;4T_4{ZYvE@&s$soleE^REM^&KHhq%R`KUF=|Njk11ceKx8b$7uzaocQv70u4a z)f)~@`1&Bp!Qp^k%!}@8j~8>yShCnt^R0PLt@m1S35i|IkzdELH#MEI^3+sRr5|R5xek0C*1J%-x;o_Pfkj` z{o60-@2Xe7;%y45-By?+GnRJ!Oxs>1i9A?-G}1tl7-J#p-pb$2YH= z|K44=aACQ@OXZJ`n5sHg-1>WVn(FJ4Glo8!Zn0{x9$#7Au6L2y%RK+=LFRRbTl`HT z)9PwV4xXHShBZ^QUqff*nwOXRYxW6EWeRjyclGLa{>fFs{c?gg^aGUh%`9y$Tq^w| zUvWT`UvrXthIFX`XXP;gMl-I{=kz9AEPt!@ceX^5lSu=+6l0Q|p0e`#ITxNfmac!P zq}jLq*s?y`Ldo89RgB*mly|tCTJ_q*hi{G(m+-nt%q2G_hfJC<$MqnC%w66bk;_+B zS^9lnzhcG912e=7*cRE|sQNO8W2Q#qhD+zVPSwV0eSJ`=kx(KZw3T0B@2(szjdc?) zi?7N%T+Q)r_c3mZjG%m({|DvvPn%i&oHGWCW?2bQXaV~eKb=-vZd5p}RjY-pQ!oA#p{|)z|+o6A#zdSw9?)29O4<6i&xNziz*Tok`g2yzUR))9vO+LHrX8SkW zEzk5%#z-wZSUhF!wtRnWr&#}I(g(PoFS@Wu$VBdF%X1dF{_S%EKBiV3tNkRV9JH!- z^MoZ!)>cR8sjWR)>mlP>{Jqo4^|nuP_IJ)5rYmPXzh(7XTp;AYj{APgmz=6&`E~80 zbNAe=!>Wr@f7$&po1vDkSo_OZoc#?$Woj?Y;OBsUE--@xWix3!2RRMj(q91 zW$!L+mOL9=-qh5zEn$ZK*H=b2|A{3X480xs_rZ_!6Dn~&bvLxvE%G$oIj7Gnw}RXD z#n~r%Qml z^&3LM9HJ&n&RY9Z$fRb;s{31e&e*qXV9v=fX*@YAs*10*wKezf;olbZ7L^w+ojbBv zwe15Y~<(c;H zY)_KxYvTIZ#n)_ToPD`{AOB~@_dA_p6AkxHOp1)@dfS|MD%!iY=viud;a~Ax>;4NC kul>Ibseb%%zh^(gC+miq?Oe_-3=9kmp00i_>zopr0EbB8i2wiq diff --git a/share/qtcreator/templates/wizards/projects/vcs/cvs/icon@2x.png b/share/qtcreator/templates/wizards/projects/vcs/cvs/icon@2x.png index ec330c9f440207d639eed42254f446eeb696242b..8d4e8921175b8801afcb1dd90a3ea15be422f32b 100644 GIT binary patch delta 1186 zcmZosTg^E^vYvr~f#LXPjVBBYEJdC!jv*QM-cHZ-2niH99=~#JTKC&D)yQdKVq&_^ zmyC2H0wtz7`b9`Yx&;UYZM)1QI&*=2E_TlEgi6S&eL>@FUBWtP&1s5ATB_n1X%{y3{TDR#~U_qemAl7`j~ zU)VBzsG6p9uD|)ge0F31?)yBIadpMfE5EI(la*cW>|3$t z;{)C&&pCJOxSt#Jah*amlSS0xl*R9!X&<=}IklX@V*1C=_YA)Ou6MCyS2t*PjSsvo z*tBuUW|{4GO6&So`(NaXQqh<-P156;!2iRQ!14l5KL#_VK$b zQVbs!d@*JFlf&I~cGKhT-65U{DIHr6TIbxo+Hcih!NIpok)XqYb|t-%>;3k)f zdTaC5nDuqS6VAkOM5r))m?&+X$#O@n_~%d4dYwGcD}2wK-9Ij6dSLWu-es{jhqDfx z|Jd7Rc0oC@w4nSWgEiB+%U|>ZK1n=xTvfc*x~Slwx!i}t%sr}CSQ!;=w(^ST)m~s| zxPR*Dq1NWFJGOUkOVIRK=5c)2=GBZ0^{f^w2Y$8P4-_j4x^Uv`k~{Z5-Ow(Jz+OKx_UCwL+L64_u zm8|}}zAHTY>gx7wMNem`2=HvWxnUBY@}*p^t!sSuhN{Jy>reh`7~35#v>jHan}&a=z8MO1JCT_uP8@xzD~DOg!c72@Z@5xhZKmFRtp`}m6`?Qr^)+$zCJQ*fLdo p)s1o^Sl$O^eQ9Qc1M%|v87enbRv$aEavG>O@^tlcS?83{1ON=JD~A98 literal 4868 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 b^$cxlUM@~0FXI^)7#KWV{an^LB{Ts5q2)>? diff --git a/share/qtcreator/templates/wizards/projects/vcs/cvs/wizard.json b/share/qtcreator/templates/wizards/projects/vcs/cvs/wizard.json index 075a69fdb16..25287a56b07 100644 --- a/share/qtcreator/templates/wizards/projects/vcs/cvs/wizard.json +++ b/share/qtcreator/templates/wizards/projects/vcs/cvs/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "CVS Checkout", "trDisplayCategory": "Import Project", "icon": "icon.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('CVS') >= 0}", "options": diff --git a/share/qtcreator/templates/wizards/projects/vcs/git/icon.png b/share/qtcreator/templates/wizards/projects/vcs/git/icon.png index cfbd0c497ff162107a9b49c5c2714d8c9907460a..df5bb7df518df57d1678098af6ffa8a181d1cf5c 100644 GIT binary patch delta 537 zcmey$yPRc$WIY1|14B{fvS@x@NW9%T$c3DPF1}#@qG^Yjg9V zcb%DqTlT5+J=$q$`{Z$yTm4M66EF3?@f?+NUcSuDysBHtW%Uw?x09UqH-1d&U${3q zZAujLzCz6-%jTcTTfCI#&H=_AkLrfimn<`S^V_>q6ZBp&$zJZ?d*PdJR0m^4-`U*` z<%w+CuNW9^rK$Snn7zAS^&@c8LFE?_=gx55e6;7C#otq5v---*zV1JB;?;NO`uJaa z*?Fv5b3Vp$-Pl|7&D3O{FXM!e?^!nrmKIzN6WOsgW##m$Ob&*El!GR|m;Wf9t^X1A zYuXx(4d<>dfBj?0(=QBL!s8UQAI*uMcF6*2UngDKY1oQv^ delta 1776 zcmZ3^@|AajWIY=L14B5|&vpg|wmqIMjv*QM-bPgWOb!=G|K#Q%r`@lm|I}2I*(-A) z)1pTLj2D|)KWT_@O$mQFTWrIgnSSQa?>w63^EbU%@AjtjZ|B7}yH88KImvZ$Zs+Mu zKEB&5&OX}omfy7O`IX|6>CW7N9@C!gKB*tS|M%VZ_dZ)cFF$WvAOH8yk7MThKKAC< zJicAO-}cbKto57ImR|qJ&cb}?#jE{ZZR`wAjM?Eua~&L16a*)@T=#et@A>%R1BnA{ z4o2y+|Jyrxs#LfpY}@Z?oUz5H=JtX&5)Hq78*YfIG`hJRJ;t?}z1{u3+0A8o+sa?$ zxTy79<6L;6MaSGIqsF4j`D*>O+*z}%-_5f9(v)5FZHM>GH5(o3*&bXJRcMssWja!t z@#}a2Z%gqn$?$@L0;@0XlZCGbr?fP5EcGzB$#MCT(b8mL_n4d{x1{>ZjM_HmW7Igs z>hc|a9$9^>`bHlh9SiQV8H?z-|hcG{!jS3xvF*5^hI;nPF$URZ2ytc zt$UXh7tH4sxG;xt-m%4olD@0_v`-y-Heo{`=zCM?Gs5N;+|XAu)#t}|u}tRin->!jvTgD9`&H+1X75Vbcs|B-#$0jsFMXf?{+jri z`EXx9dz;Mrw$|28UFFOBquv_tSA6h&>wyCfomcIu=So-VSyi{W7ry^7kxkrmo}-rT zUH3EG$JOimswM}soz$PPsddAqRqGP3R6bc}u6(D8J@@&O&eeQ=wzcu~85t|C7#V$j zeuT&T)%jh=)cWroEjNj+;#OApkZN-%p|Gx>B`N9AlhUtV%H=`&H#v=ut1Z6ylh^L} zimlnd;nCks4He(A}XS=S$^Tb%mIC{woc`N28=H~e%6+aZ6XTi}G^`TMtz?9P@h+1K-2V1ks6 zaQK?Oo41uFN~o%8>#h%}FLv%%dG&pz$&8~6vu8RwJSi(FDUsaAJa6h@8S~B?yr0zO zeX{H^5OnZ=zP0Q{-)6hq^&d->q&H4zG>LUyUL$#4QNg+YVQp;fWZ8G#0vjyX7aae_ z7vUHD>+~z>Ewu-J>GsXE|J9Z=zhPbe2D^?I(Jo;X{RbZIx8bna$I&%{+Ztu|e>_@5ITU-7gd`c3L^_@hJ|QU%Ne~=&LuIaj`T7X*lltJcs{#%fTmq ztTZ(}osvHm2{8`-_ zUPT9Tri8`Ctz?nBd+7Va9Lr@{m*?e$)R)O-*;L^H<*8w4XC!Ld$F`?(237uFiiVHzoFNoAIJQhh}wk zy$XAGv;OcmZHv#gUGt*7-#H(b?%cBFi@L{WBb_bN4CD?=iOR|CtGx1a%K5#m=U10$ zZxOXFGu8jLXXnz>9hWZgM#RsZRekR0%Bgt=9e)@pZ&2wBD?Q(x@h8sp^bY>Vk!c^6 zYXx1onr+ei*dVx4D1Jg~;h&_Km^n4!zRuDUGS{!VxBS@s`mJBj`tID>x-%p!-^bHa zFg)yCpooY_uIkH$A=fLf>BV{WR90N>{`ls!R+!Gz{Ns~_kDp3OJu7jrqoZR}PT)MJ zn^y{FoMry{|9nN-1V^WH%fv41Sr`(0^n&6^zEc~Hc6s;m(M?!82H)m-cP?DpNI&-!l|-)(qns`X82B~K#9l8jB8ZqI+l_uxzA-x(jh zk~kkna_;5ZGdERw?)RDVKECF@RKZwjnxXpN=D~y$6CyqRlox-#t`S;gJnwg}w7l@- z3CykYJk3o$_1!c0XSw7c_lKK5G+iF(T=^4a75ccgc7cr!=aqQ|c6H8q-qD%o6(*cq z?)&s?MV^RLhVlC4lP%}+_^F@d@H~BRb)wDpX6qKQuBF*8jO^E3FSr+f`sXjM??1ZJ zw*JqKGHBVoQtrulE&nyU9@adTz7MTN{(t|bFMO}$VsD(;3kC)T22WQ%mvv4FO#p+` Ba)Fx^IvXpmr zR$#o>62+BnN{^bCIGTOzbIVxe$nvp6zjx81jwu&J1g9?0@HD;JuH}8d>B1s@uhsl_ zZQq@Fv$y=4-KJ`D!T2=0xy4n_{@>pD{me{j*AM;dj~MtKFz`L7hfodw*?&x|{%b$gDtBxjJWZmMbEYHz?vL#h7e^SD0hJ8OhUc{;{Ic^g8ocj{%72h)g z3U+H3{){`j;PjbGtPkqHzczN%yQyHyuvXs3V&2pj#t#cEX5LuM*70?wknm++`_ktpPsjXxtjVk`|7nLod2C+huWDs(y?Vp-@Z{DN`U&DsSjEJpruE8idK*GbHD ziKur;s%pLCC~?4PXR?=dq+8Gg&`X9uPR8vOLmR-YP_OuFjuVuQ%=X^zbUIuNDikJ=xNKWd5>+`uiNqj#y7^ z*cbc7L}uQU+lS|!6ne<>E$(OLOXuu8T>&iepO*%@ZmOCWYhAv0QT)$PMWJINOnW*n zU1<+`c$_uj@G+wX=X>}0mzer=N~~IYzxVq`!5Fi*ys4EXrq(<$4pXfCR{CeJ_Wtt5 zEqsB>iZ6-weD?LCdl##$zHvdcOLfIp#o0AW^H1n%RTn*Hxx2~GFS*=g=7NR%x{Ifn zrqpGB5z-La@`aJ>_>R}dEB};*-oL2f7%l(c^F0syz`I+PU3hugR808G7tj3~`%4wo z)z@#h`S7*v&)8ejvi_}S0cSQyUIUSfAM5{`#QJ3ORlcf;pc25-)z4*}Q$iB}B}?g~ literal 4251 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 diff --git a/share/qtcreator/templates/wizards/projects/vcs/git/wizard.json b/share/qtcreator/templates/wizards/projects/vcs/git/wizard.json index 62bad7ee123..2967a51f31c 100644 --- a/share/qtcreator/templates/wizards/projects/vcs/git/wizard.json +++ b/share/qtcreator/templates/wizards/projects/vcs/git/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Git Clone", "trDisplayCategory": "Import Project", "icon": "icon.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('Git') >= 0}", "options": diff --git a/share/qtcreator/templates/wizards/projects/vcs/mercurial/icon.png b/share/qtcreator/templates/wizards/projects/vcs/mercurial/icon.png index b60e2df21a989df39ff79fbed390fcf603c3f0ea..41c03f4f2dd3ec1d7b1f70944c0ce8916e17722f 100644 GIT binary patch delta 1065 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 diff --git a/share/qtcreator/templates/wizards/projects/vcs/mercurial/wizard.json b/share/qtcreator/templates/wizards/projects/vcs/mercurial/wizard.json index 81fa26da041..cb7e5ab4f10 100644 --- a/share/qtcreator/templates/wizards/projects/vcs/mercurial/wizard.json +++ b/share/qtcreator/templates/wizards/projects/vcs/mercurial/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Mercurial Clone", "trDisplayCategory": "Import Project", "icon": "icon.png", + "iconKind": "Themed", "enabled": "%{JS: value('Plugins').indexOf('Mercurial') >= 0}", "options": diff --git a/share/qtcreator/templates/wizards/projects/vcs/subversion/icon.png b/share/qtcreator/templates/wizards/projects/vcs/subversion/icon.png index 815b68ed1cf32966ddeb0fb8fd15e73df0b058c6..cd5c5aca206751666f091a07cc07769b2e06f81d 100644 GIT binary patch delta 689 zcmaFDy^nQ*WIY1|14B{fvS$v^y+5+trVxboKDyJNTYv!;);EwkN$ zRqtlr-JK*Va7JNG<8g~!l`pjnBJRw)+aBM%A~);3*Mv(`_ul+>>`@O7&(|HM8(zD8 zZ#)|tA)R%GS@`HuN5dVNmJx+3SBofbVhQ8jv{3kO7cq zqo#FP4IG?FJ@*zl?A+{(AJcXRQX*)eDRsAEvvuuA#Td1VW`)mt{!AJoc8 zkU#u?`|PlZ417j4H$A$3g-)-R?0YmN+GOM6Z6@Zr+Y2?Fa?b0wC9hZ&cIJ(SKYy`# zuz0%rl0#1oZceWMXZ*)zbLQ1kmBO>UCN;_Sim*s*Y*}R(QkgFvDA{2wmE_p1TWl*R z<#PC0W3m4(B`=@bk+&n0jqhw^oYNdN*Ye{tb`F6ettckH=NFA;WOCkR6Pr7uUe3d+ zKSX6pqr?y2#ZqF;cVk~_x+*YlTv_qVmvQ!z@k+{JUT8?ecQ&)xW>%zrNP||9q?YpZyy*y#2rY z1@r&??d<>m%NxJ^|G(}3doT6*KjTeTGcQbZ{dV~O()MTn=UcD;@c;jorT^{KVt)O% zwEX-3f9XW|f7k!ihwuIH;QzLjOF4M2fB*CUf6m|U|Idfn{`vp^*8Bhe&ENj}|NrFV z|Nqy^{Q3X?-G8nB)A|1V|Nr6q*8fMY^53wrjd~jt$;?pB7!)oUFn1a#b$Yt`xvX{Qv)d)v8qu z4GsJE?{8>W)zC2i*s;fF&YWpznA+Jnx1nLui4(UwI%c-FPiyF#)7CcSDzjn>(jAbxdjMnB3GcskLir zQ~R_F7p|VUc=g=5>up`rS~{k*bxmt-pWfOzrMZ3D`SaIWI;Nhzc%`{>T1)$smiB2a z?NeJjrnPoVZEc_0+&QhaeM)o3)RxYv%^lNPI;Wn!a23P=$xdtOnA+Mot+jJ%bNkem zj%g6`?D?x8T^&4d>2Z0h!qjGPb32YD>qI zm20-0yKr^&n(eFBZa;he>bdh*A>_{8htGky*Y+Jae(3ON5c>j1_8i!#*3M~dUDMjS zrnhy?Xz!lh-aVteXGRAI&Ft!(+1)q0yMK01|D2u)b9yGu>76jQcjDaMNpt%q&g+{r zZ^GpH6Q<0cIAy`asS77fT{vmlqRG=1PM)@C%JfB3rZ1i{W69K+OQz3WI%D>-S#wv+ znzv&1yp^-(ubR7H)!YSZ<}O@4Z_%3h3)jqFxOTzfwF?)oTex)Hq9yAVEnUBO>4wG2 z)-PVRVac+MOP6n4x?ws-TkeOtEf+p=x{)@}Q@Za=Vf z$AN7-4{qOaVEfL4J9Zt~wdct0y+`)!JGyt@v3>iG?c0BR-+|-%51u%1=;T2VI(6{y zsY8cPA3AdS@R8GpkDfVl?99=lXOA8~d+hkRV<*m?IC=iWsf#C1T{w06;;GY@PM^7S z=Io_2XD^>UcjesqE1+2D%@tx`V8|^A@(X5QWM*Mum-TGboj+{7k@$#K#&tLsziI$9KU|_29ba4#vIG&s! z!OF~GVe+Q=GEbt-_L!Ol3(7C{75B?AJ8~uRJ{7(uSN}nR=iS_Ug8lK%Z@=h1KjlihvB!i*PpnK}2(_C8g>X5{32aE|eW z19deEWTLNJE&1+0(=6Su$BH|`Hu;R{iciP+y#-HkNmnn|jobeDMeFVUhYHd1E8jwO&z%8_i~>$Zb+D?ZJ=rO^aADb1-GX;FuQdu?HeP;iPM2%x%{9phhyBm$9-b|) zu%PPOzuyl^_N|jN)?Ije!u{>a)1i}SQ6 zxKtG7#xw5wGvU5b>eGGP{R)OWXTGQY`0V^kG$JPMw&{M;{sOjB43>``-Fqs$>VsG# z2XCQtdb!vWA+`cu9w9ATqg*L@NAicwnXM8rIeP@9o|H;T9O=0sal}VOQbJ^gqy*0w z35g>|B_%|*N=T$gNKDxxDWNh`M51H0{D#UZkpM{shAQW)v(H*H6)`X{FnGH9xvX>n diff --git a/share/qtcreator/templates/wizards/projects/vcs/subversion/icon@2x.png b/share/qtcreator/templates/wizards/projects/vcs/subversion/icon@2x.png index fa986f289378f97b846e2b46c010bc8a58f6cca1..636b7f8e1f269414d44eab6d37d200b907a23130 100644 GIT binary patch delta 1437 zcmaDOx`cazWIY1|1H^4^3)RKt!)jmtCr~^wTS_t3# zAS%1i>&Q~JB%Opy{`0$&>Z|r@>tD>Axq;QlP$Mt?>KjcDFF%z8#_6@XUQKi6tNAB| z9ZzSRTxXYc^G3#5uOi3R+e`;9ywq5>UMEa-`HZ8fjb#suu1s1GGHFkd%xcy-?`ktz zZ=^UEX)Ef8bu8C$(QlC6(P7#j=y30Xor2lk4cqoEUR+&NeYKODf8W9gg*o-xWEQ`R zaMHNBxog$zYPXcova>ObOT(f|KPca6+J9XyW#wSxZ8$>x*Y%^BQD*XFi-c?rMccsR$^E^)%ttstg zo3c7kyFfe5Yxa8$hqW?0e{M8!pU3r=dC9kJ&c>S_|F*IG7&lkL;5{Wul8lKZH_ zyGhMqVSav_pDghc_qt%QMP}<9#xlKFmlYQeCyE&Nu5ioWc~<{>aN3eR%!gK{%#Y~4 zs5K|{-TH$*k*{YpHip+9)?8MjmBwmfd);-`rDwl`|M#TjTp0a<<>cLk#~$&BFqd%GF@1jdW|vC1uN>PehMtg= z#Yay&_!=-cpT57V_fq+b;dLd%hvUAb!~|k&btM zzv}}9Wwd|BM&&nr@m;xpUUcIZ+dj`&h5GIL(r@0-f2{-b8{{KHm zV}em+udvzjjS(NdC3Rn@oX{-%fBtng&WLdR3paU_BGyf2n_1poeDqGc!!O?Kod>EW z{8)bb=9}_{5?9^{H+Z)sNN@;-{MyI+w=av)7*LoH;4c1>$Dwqt&#KCBOG1kR?j%0F#L7B*yB(gu{~a& zU$A~ZX>I#Ru0i7R;=`}@H%r7%c6j#h|71BSD^8J{YybZ@{m*11r^2Gk?wzwrKzW literal 2796 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^TMHha1_hE&{o8&jF194>i( z+m=Pqj*Yrb9Gn`$Fv@ENXVglAoVDbHne^ z96z&<&-VF0FYEidbK~Za6@Lyg32}t{Vt3!ZqW}H(N!vc&P&`>N>BhO=OVs6!=T*M{ zF8hA>vGj8sLMk2;6dapaIMEpGi#$|{l1+A1hU;wmT4A#U3-%tptbZ|Km*M>HXLJ0f&V80R-85|RmJQFg#a%PEIGN_0DAu_w zf^WlSHJoi&vm04lx-oL^*Cm$T+ zbo2GoFaEyCFWWYVQ=gNKLE-H6gU$0lWStRsarz;Lx$nGRe(&y!ciq%UV9T)KaH^1x zGiIvlIy=$(#$98tpnG8(`kWdK9g^=I5p}e{Rs!wJ=FRBk>}BsGn)*wNZ@tG=OL#t9DW9+fona@T+E1 zb57kZVLPyGd-=D`N0mmvi8Mc&UXqptV3ip1wBi=EWO?km`HO_-JFdER##7oJtEsHq3^$tlBTmg?wMl+cm8DiS&2L9pjIiS#hS@u-7aW_F zZ|-!k-(^?e{hOuJ%)0JPiYr-Yq##uJFYH%QEJN`eHI2WkudCYc+p6SXS;l5_LefFr zgz?12e%)L7>#ZkyEP3CUuf3M_?L@A( z&kyCy5h`bPzPyL$<~_p$(F}rTm3|cM*t2Yz0+V>#nYh!TpN!;B6xb$j)c$_C@&CM@ zEowWrEIMLgBlhU;tc>r?ElQ`m9=u-i+0{d0*2KC67X>?Q%A?P%m>%*-(CQ)U<_1?j zR^MO`mxb*{9@~F?czvuj~UsH=Oy8Png z;ybo;)djbW#S^nRJ|2E3!T()xt#Welp2-WlxeV66tzFY-bydV)I={vCYj*m5MZ#(~*#m1%ROYKHx{<#(3_+bk+Mz?jb=8NB!_ue~Yf z^Gys*jO-cBF1!akgamKih}s%zBcHJ3wA6XQ1@~WUIIvixo9UdRt;uDH1|ey)hkNbB z4>xT27W`kcs*g|lf#QnhZF3@gEnF^5I>>PMxsz;%`UXR(ms{LiczsVUZz|XF4dC^x z3NL86UdGRDCDj^uY>m-N&6&Xm8Ll)6?waO3_LZ0!9fanIyeoAjjE6g;orx_CUd&@R%WBy_>VGxvp3f_85IQssPB;>EIK zZS3C#0$)VQ+1h4oaq3o>u|0nN#g!=xU8)*$7HFBeYQCzmzAWIK*SNUzYzp|Ia6pLI2wOS3C?C zE*opxEbmiO|Fge&^&#~JJ1>2X`VN)_PnCXVH%v-ySirR4)TvXmJ7+(C>$mipo;Lrh z{@byqj?3u1HLiGHwmW~L)m8N`&m&?_Oxq0}k%gB^b$(?>=uCV4(%k;h@k|SuQ-6O|N1UqNe(~>HlU1iw-ah{I z_(yMO*!vrw%O^!m&i*UI9Ql{^+1X_EmG54Qb-!Pe$-|Jb<;O3h_9FSc|IWSqa(5Qv zye0o;%vk)P^M>bq<2PDL~<`6t42FRtO6Z&K3hcaJAM zsnq}bPCm@@w+-97&A)f({J!sU{C{rwwc3kn+4mQIuUB5SM=@D;)2+;6t^FIVw;q4- zBWqo$(1iWx-c01W=kR>lkM}B1tH1pFUZobXYSlfaV(0AQw`b~i_*bU8@n8ICU+7u3DmkqE z(^4L`U9a=l4}>lMrm}9~^eeIgacyZAUSBr(w+F7`#&--)7Lc(xdjHe7E=BX#KrkYA2FN9e=x8JeM&qF1{QH|N-ahV~*cQwbC=NHZm=V)f%U{)2o z{p39VS<4yyu5zy|w8*;e$Dp$CnN@*e>GZ_IijH6ERNC3rF#M6_az8P>HGSbIsS=wJ+u1d89cv<%KfaZilVgqs|@U`CHLf&*Av)jUL@gfA-$I{&DWo*FU~K*q7C<$WhX-z~&S9 zO>OO;n(M#gf7R@hHh$*tdC_b0%cWJBw)f91Y`ni= 0}", "options": diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/qtcreatorplugin.png b/share/qtcreator/templates/wizards/qtcreatorplugin/qtcreatorplugin.png index f4c54981afd8d68c84c2af3a96fc3d7b44418582..9fa454a498fd13470c9f59eb759492cd4052c60d 100644 GIT binary patch delta 856 zcmaFH`-E+RWIY1|14B{fvSQ>W#62q(%MSbr%0tKxp{EUTrKFH@uZ zHl}B<*fFbr-C4`%Yuhf>+;&z3a{(oT^bF zc~Co0c-W{T&vSTHJH?^z(Brtvu2HN*ID zzT=9k>KbjFrz-?bC9sG($t4>4gs>^5OmTO2bv^C-#61wiZ|zwjp{AuQ&~ns(i(gkb zPNDnkMJN9U+;x&yZq(m<{Po+G`Qq!8%~eI_t>o1`yo5*P+4}1tnHr2v#XBd*A3N-Q zX03Iu6+;tK%e10!J@>uYwps`I=*X6;tnwkG$vol(R?M@Cysu|NLi;+mNwc{(J6S2Om8S{dD_D;45?giN9WD{V4C9sq$L(S<e-aBW_o8IuOPra(GmYUWjx}SsYrP=xLmX*eQ?(tdgUHSJX_d1Qp%4QAE Qo1jeO>FVdQ&MBb@0I$K1;Q#;t delta 1761 zcmaFD_KbIeWIY=L14B5|&vpg|wzZxvjv*QM-p;J{2@aPz9yv|tck=J_o15&v9sd_M zP3O0_dvpf364xhzs(ek+TaLO*Tc0F73a4{Yn4bC(?OU`Tq9ztLvUupR=uZas6ArL#|i*`f;;$ zZ|=0sahaYJGB4OX2$&tAe!$ zwJuDH;1{sayEHYzy}S2X<@$P?&{b#GS~2xGuy8RMJh+gtwX)YRY2{P>P!HemE9=Ub zJ|0~YU$HOZ)t>n^*RRjuwA^a3lAC3-$(>?Zzg<3^@7h`m5+b?EcRz>@R$_(C1RzK?ZF~0i%^TBkG9-+dTZac z1jd&_e}nhUm{}t6IqQI;+q(KyT5I@LENkwpkF8f?dn`2FrtrPwem0p&nqF_D-s~zk z_UOxdjjN(^w}T%4?G{`8=AKvgX2z&6qq(sQ54}6GjwgIo25*|jR1pWixS8J4OJXD{ z4K-DFuQy{ddN3hm9eZeE=n1w@rc({{HN~GT*NELWzggAe)qHPhN67+>=s+gc8%GYj6N7cXcyrOxzgFjo?H%#E&6ChYtZ<+Bm?f*uNIX@*OwOb?HByWh> z_wjPr`LM-xoYiZq`K6*Ompt*mk(BWgs|(Yw9ZXu;_AMl=kJ07xQ^w}@yA95fJKfSF zGrx*Wio4Phli5<+e0W1?wf&W-YnNUhYI(EZpmJJ+hVP>Kw${u_0c(FY*Bi>t?CuXA z9(LcbYAd%{-pl62i_>3h4S0AsOTlzA!!vbl1+_RY@8xH=@v7O+^xq110p3&-v*lTE)~z4EI9NzP8U+t$%r%i|I9zUBu=VATMdIQJgq9-RZ*MHdZtx!@>*6NQv$9_+hNqb*^ zY?Z5Duz2rh?{gniKJ(5nQNKIsSnR3~D(6q!`EkboPi}&5%$|~&!ZrWRn**|QXHPVF z_v+Drr@J@d@Vrl~ekG5tRK_H&$dqAc z{BQ1GuaWuubMXCVTey#l8*ygE_WJ+${awCc=|bMBUuC~r)mN>F^i9tdI@@^QvG=*g z^GQqPS$F+kx#n=Mdj5y{nEjl;HnB-a*qq?3JAQ7j!huT%BlwOS5N({`%bCXVDs<+d0wc z2js2mrsvh61gj+G1Sll>}l@U4yEWn=TWZ*?Ime2pD~9ff=2yQ1$` zv$y@7c1rwi{Nvy2L|r&NoS2(?MZ*8YHkLWpC)#-^P4Mj1pR~eb?WBss2d}l?)U%5i7#J8lUHx3vIVCg!0EseLqyPW_ diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/qtcreatorplugin@2x.png b/share/qtcreator/templates/wizards/qtcreatorplugin/qtcreatorplugin@2x.png index 3d3bea267f5201c4aed0b49e0dbb141691e5cc70..df1e588989374f5f3594c7ad9e3d341fab433bee 100644 GIT binary patch delta 1839 zcmeB{-pn^avYvr~f#LXPjVBBYY`;8R978hhot>5GBN8riVEHfCwttxv=7jSo6`<8B;GV+d661t&qzr z7P`I;)IK%i*0SEUWo@bD>E-usM<)3E`v2_B=kK>4e@yuP{t@|jUyJM4EQv!VF~Ob} zt{>T?!gzYu;)E%)lpkd>bss9NUo3I`tmU5W)L71lZ67zhb~E%kdo${#SHRDGL5n4h zKFbkvoc!d^^rNp!yLyvEW?xonI`pKe;A2&H(qf6H&pH-x*{AQTZ>@;k8Q4=)tfQay zD@3y{YuD3NMIh-7hl2&y&bCSX^MiB!t3}*vu1}FZs$t$ZSL2tq3_mg*JxwW z4v*BoH0$uDd~>hu$&anQUbkv)vezC@t@3{Ub|nw7g;JDdvg{Kf7{q z$h2+qV&^nXXm$wDDZe;J%qvy%wf7}~Nt^}sQE`%6Ew`K!x;{NsTF|qh@K@5UvL)eR zcC3XQfh-c~(Yxl5KDI|UNvL_fzVObIsJE)?K-<_H?kIR4c>dJw;im z$Nj}VJkYc|(^cta;>CDQBc*d{?aQgxUF}pj%yqlmGp;c8Jl9nZDZ7;ITybIQCRI(2 zUe5&Y1$$=+FK4O{moj1KOucECv4*LdN%yMA`&x&)frsbRvs`$3L~%)z!=wYBczrkxAr7(9Qo|7g6rtK3pg z=Fh|`rp=lW+Bvfp72BM@f9liy!-cyYg_lk{ki&I}v)X9Ox3-4o>!p;fEc&7u7(GNA zE%hRnREw7Kc2xX3eV~4cFw_4T=ajuz9l4AuxJussxn{j5)oRbD^Bgq~Rlm6=i>jRY zBo-GsW8;$p`g=;HY$65Ee{FF%GJ|F1G<7zm)w|!{e(~q9*4t-_cH3q5TztWLa$=nm zTSD4J_v@7}@0|Yr^TMI$lM=6Gu&&%(+p2y{IrH>U$9skAW;)r)J(K@1qpjXe-GfKy z-EOt)@1=2O;!VEC+kVEZD^l%fa%nDjp8R^o$_5MoMVs}Lk&TkEpSH&wI zy}7cLYUR+C3_HZF*5z+=X$^M`p?M_oH8IK7CHS?gZ0? z4%UYZ*>V9t%qQjCPJhApV^=Vz`@yF<_53R&mVD4}o!RI0vNji*)(cg z9?rj#KKGf7e1r8=2hO$ix9yLGIe*aQ+V2~ENBL>7w&Q!g`nT&R@jo&*x!`(?f8F)G zq65Y1wRcX&#H~LZc*yF6!smMJi{{p!cBbZ~=>2>U+`hT%{@#bhO8f0~m)!0A-zj!T z^n+pj*8Vwu(S1!5PyE+2+IG70{7g}Khl`>&D+493O#ETXICJ@&pS}w=v<6xIn<{(8 z&iKG~mVb4zA0yNM&E&W)*?aetaNo4wiVpvb%_5fHJ#cavm(AqZ58A&v+8@VG(0^~P{yJq6 zep1uN+HqXu;HtV`_xU$H*rGh&IHgSZNA*^Lu9HmO*D{(cc04)o{)3jK_k;Oe4Ee@^ z31_8z1z7m@KbpPewZ)|;jp;&aoH>z;IcpZ&?~`BgB}?Jc^(J>7H4c@?#oT$fev}t8 ze;5AwRf^+qQKR#%`y#HLr?e^OXnztPH|CZ{-x@65o7S9W2 zU#`vBRJ)6tq3gfM{{!3Z=_#c3s-0-;eH2~nEIskQ0E?XIVSl&$iLMSO>!o}*Fmbhh z58K>%JKf#pfX=yXKh}TK@i{N$yFs#NuVUJvZ$EQ#mlPxfe~sAnC(rll+lh6Bi)Bsj zdC%E?{^YY$5g!*H`n2zPvdpue=8tyzgrt3ZHS7B}GgH$m>!Krb_(biU9bZhVGu>D9 zN#nXahw%Q7f9zM)ZeRNU1$+K83Fex1jT2QS+c*9EbD;a@r!&F-I&a-S_mlsuTDpH^ S{|X&Y-RSA+=d#Wzp$Py$x0E;l literal 3467 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 KpUXO@geCxAqO&gm diff --git a/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.json b/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.json index 6a629f0d05e..95549b2cd99 100644 --- a/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.json +++ b/share/qtcreator/templates/wizards/qtcreatorplugin/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Qt Creator Plugin", "trDisplayCategory": "Library", "icon": "qtcreatorplugin.png", + "iconKind": "Themed", "featuresRequired": [ "QtSupport.Wizards.FeatureQt", "QtSupport.Wizards.FeatureDesktop" ], "enabled": "%{JS: value('Plugins').indexOf('CMakeProjectManager') >= 0}", diff --git a/src/libs/utils/images/wizardicon-file.png b/src/libs/utils/images/wizardicon-file.png index 01df96631937af6c53ce65e9633dee896dfb376d..f476d80db086ba35df2e80f6f47d2643f960b8fc 100644 GIT binary patch delta 160 zcmcb{c!Y6+PCXM7ld!O`h=_=WhK9DbwvLX@vuDpvkmU9N2!H;f!CWe%7+U2SM! fV9uyFc+cFV8!+djR;e!o0|SGntDnm{r-UW|hUQ3f diff --git a/src/libs/utils/images/wizardicon-file@2x.png b/src/libs/utils/images/wizardicon-file@2x.png index ed7c0cbb696d7992aa99947c2db08cecc833eb42..46b58fe757afa3024d1b249cc6bd29bb910c444b 100644 GIT binary patch delta 213 zcmZo-`p7szrCu(;C&ZP3fq{vMiJ6(1jg4*b;>F9BEqnX+?S~H^{`~p#|Ns9v+D#n{ z3=DmqE{-7)t#8k79_0-jYnW~a1x$Ftchu2o(T3m4^-oWnvxj-N zP41~CD|N@o9FDQS7Ub<+YxK*7rK?`BQB9C(K1ZYfkprqp4}=)}HgGcBU}5rMVpL;f zoZHagm*Ajkus}#*hp@s9VGRwVCk-BdSu(sF5TKy3qMp5T=|RqaA!k1H*UK9*FfcH9 My85}Sb4q9e0MWlw(*OVf delta 230 zcmey!*u*qJrCu?>C&ZP3fgv<>RaQY`PJTmn0Spy3<`y;Hz4z$;gU1IB^42pjFtC*b z`2{mDN5=g8(|v)jj)8%p%hSa%B*Oje`Hj2{1_I6(H*hL%;MShNExbY4$J4P{XuiK@ zlg68WFHdXMZa%qZ?Op}_xd%K2CZzLx<9@q^S-mDc-~+e31t(KM6T_SY1~rKWPOg9^ zrYR2?R4f=e8Mc5Bhe;=gNvFUS5RwqN{i`8Tj_F>A0|Go?{P>U0?H!xRpUFH8%QS8> QFfcH9y85}Sb4q9e0M(^f6#xJL diff --git a/src/plugins/coreplugin/iwizardfactory.cpp b/src/plugins/coreplugin/iwizardfactory.cpp index d7da856b7ea..988c4bdd958 100644 --- a/src/plugins/coreplugin/iwizardfactory.cpp +++ b/src/plugins/coreplugin/iwizardfactory.cpp @@ -433,7 +433,8 @@ void IWizardFactory::initialize() static QIcon iconWithText(const QIcon &icon, const QString &text) { if (icon.isNull()) { - static const QIcon fallBack(":/utils/images/wizardicon-file.png"); + static const QIcon fallBack = + IWizardFactory::themedIcon(":/utils/images/wizardicon-file.png"); return iconWithText(fallBack, text); } diff --git a/src/plugins/mcusupport/wizards/application/wizard.json b/src/plugins/mcusupport/wizards/application/wizard.json index 99888785734..e9caecf4c86 100644 --- a/src/plugins/mcusupport/wizards/application/wizard.json +++ b/src/plugins/mcusupport/wizards/application/wizard.json @@ -7,6 +7,7 @@ "trDisplayName": "Mcu Support Application", "trDisplayCategory": "Application (Qt for MCU)", "icon": "../icon.png", + "iconKind": "Themed", "enabled": true, "options": diff --git a/src/plugins/mcusupport/wizards/icon.png b/src/plugins/mcusupport/wizards/icon.png index ef9160b74cfda0e5ffbcbb81a4601b4080857c78..9043bb1ae04acb9d2490c0e58142c6093a483fdf 100644 GIT binary patch delta 385 zcmaFDGLd$v^s;BqTOW_Rw1C|@a4GFegc zxA^a?_xY3uZV7jPoZ)|K}P;1c|%)D!|++C)L=5kD& zVvGKKcq`Sh=Syz}@BD*O>uS`a4&Sv-P~UrCCF9-8?R7;)1{><^8B&b?{ycxy!C=a& z|JRF)!~W>AZjAr;ecE$Hkt#2y?f?G&`}<$UL-uge0w0@$OAf~GsrWd5Zh~6*#Vu*E zO;QdC@9ND}u3HIQQ~14B)YtZ1Kof&!$yeSZsm?7`GM0U6OW9_!N}hC8U16YiEMCI? sxX!!o&H(?qR;LB0s_ddRPF}*uaJ6*D{7j>KQBY`my85}Sb4q9e0DTOqApigX delta 598 zcmbQp{DftKWIZzj14F_c&aDg#3|9kuLR=Xb7|G)n7 z|IL^GZ@>M2|NZ~_AOAo7{{Q*+|8M{QfB*mg&;S4b{)52JRWlDUFfeeG1o;Ish>A%_ zUb=i;Y{8ee4D}3*W}YsNAs)xyPCXgKWGLb)xx}`qp=t99jcvEO7Cq`v@VoQ>zl!+U zP@zeF&QrDbcIyOvSE<|{^gh)nnd$edEAh;mSm(@|Kl{sbCLxh0I?u23DYqY*+G#EH z*Gy@FoEsLR`qJgaTR3$h7&mX&HfzIbGmoGii(sZ5l2aG_D16OwMtv_I!!LaY%~0M~ zjCZt64PG(YEMadu&+yk=JwdE?t&z?vE)6fyJ({wwmju}baeP?!tm^9YOP?Gjy<5c~ z>-qcM`i)m!m6UKgJbmz|@zn` zEX$jElWA*Mk@30oOTuFRzc3#)-t_5zbFJ0`VdmEMS2`Qt#xO82FnGH9xvX8BGHYxb+ zKDo|i$E2eN9UmQXloAh@WS9B+!b>}|EK(&jke$WxQT|f#J6^Zsyk;-!%q_2xExZ4+ ztbEyK!jL)4tAPK*8;6etn(`Wu^Uc(uimk-M&9wv(`xP{gZse|3@WZi zPTiE!P4D!$BrYI$@znOWF@LXIWVkU)mu;Ft!2MU>&YM`DzsltMR>H_$=|WANiGs^M z`wb^N`6lZNx&^NI!{M;wPyGjn*nO!p*|PGVE@yX>O|SWIrfXMmI>(Jqak>BZoP8UU z#us62v;Xk)vhNdSGUp_$x>39KgYb?=cFCr^EU^Z;!XFA3cbsUuZm{!|zQUKOYwYA1 zE=?`sFSuY)AgOjm;4fo%FSBdK;#cVf<|YCqliD9lT=o8Nz}A?|9Fbn<{j1*BA6QYC zu&XM<#pPGRDT{!%rd8Dm=PUx6Zm-(MYJ99QzQF%#rGznG&w=JyiodT~d|;AWy-Pl> zm90r{i?qR-SKA9>eFGUd=Pu{^`cvl2y7g05r$1P;OWxvumGFVE2T4ocFl}4?&of~< zr^7twpF!;&zgvZDN_XF9JbLBc8^60dJvP`Y zV073sl{an^L HB{Ts56l7uk delta 1062 zcmeyyx`AVYWIZzj1H)Cfb}j}6#*6@;5LX5U21O81QC3z~0fU&B*x1uvuW#&VXzFZi?rQDmZ|j)Q(KV@~dva&b zl+!b>cteLlH-J)fi7A@Pnbmg{X zt9C43vvc+OeH*tO-L(Dq<{ihk?mE3~_v!6>&g?mOdGDbshfdr&aqi)X^N&uRe|+lV z(=(T!pS$w%T>aHo=dZoGaP9Sl>u)aJczfyQyDPUpUcK|_+TG7L?ti^;|J%(6-)}$u zb?3?NyHEbyd-nJKvw!!W|9|-M|D#v`pS=11^zHv=@BTl3|Nr@i|1UoLfBEtMt55&m ze*6FK`~Uaf|9}4T|I6S1U;qC9_W%F)|Nnpe|Nr~{|3Cl#|N9RDA?ckj80r}qI7)*2 zf*C?W!=qz<|LJ*hW(@-aQ@*E*V@Srmw=-V`Uv`im)9&wo-=60Dg6HnpcWK8YKi5=!^85W~(%E;j&nydgp(Hrb#BOVm1K$Zo z%LUzG;zynKW^X=gu72a$Y@w<(pIy6b>)W2o&*2SzU6WA4d+lc%OM8uSQ}8~{RA|jt=SjU;U^(y5+noqh}_=v7gfzKG#?~ zbp4si7@Jo#t7hX2*Oi}i8D4(6%xv|k`GC2?$NT$EPv(u7v1^lJAj=1q8^+E{@_#>i zWL00^u(tTfFFOJLnf4AGTV5?LKR)Zg+lm`KjJsGb-*3^kc6BN9an7DBRj>Mb>Y6@( zhNs(XndW@q+rjE<>RNwT_I-m@O~^l88-Lylcb`O7to&nf#;t7e_Q)*^!l&$;+sY3l zndm4f^)GxX%h03wzd-Yf_Jft5`ZqEBX)Js?Kc$fWS^Y!Tq*MPs@Kx}ypEAGUgzwIZ(8`iunZw)rYUyVMXD9=#Ien&<` zQiAc`k*AUi;;f=@Ju@&Q*W`CBlz^H-F?&fzI2N_{P|+P^-^{CQRW11=6!6lYQ!6On5Uck z^lSKPU%4TA^89_`s-be1=I%f1b#0YU8uyBpn@m~@*(T(x{%LRU*?z_7zDUf|U27}# z1SZ}yZC%50tH!;_ai8!(jr)xWGv@zg=Mrys#a>Dom3W6v98CNLK@ cs6No|%-8yQz|BOOfq{X+)78&qol`;+0PzJmP5=M^ diff --git a/src/plugins/projectexplorer/images/importasproject.png b/src/plugins/projectexplorer/images/importasproject.png index b75e0422f7f45c3a750cd8589aa4569d9fed51c7..6cee1958256e2eea2c4e68b0d2aa4560405f94ff 100644 GIT binary patch delta 231 zcmey*_JeVPWIY1|14B{fvS)_r!NO@$ez({@K>H()_n;4DS~YiA8Y_>^6p8OLN=MR(j-m;Z23FmMS4#_B@gjCHp4^b>DmT mbe~_;*4+gU1M)ZnqL~@`^iO;`b0|~{5r zgMfel0|SGIh=`=5q^zv0f`Y2Dy1JT{p0>WRp`nF|iM5rLqn(|rqoaqjvyZDsfR|5* zpI?}NP-JjuOiEf|NMw9kR&jV_Vp2+8LP}12a&B^ZL25=(Ms{g>R!LTFMRsm^ZedLx z2-W5n)fSdE6qPm>l{b}?HN`LEe{INk|4ie21X`k7FITP4o)s^9$r3v0YM>Q5m7O5 z2}x-gSvh$HMI~hwRW)@DO)YI5T|EN>BV!X&b8A~i7f)}$pzxT))U5pCvWn`4Nt5T# zU$uJsj{OHtoV#)7;nSCI-hKM^EamTas2Jn$mk{qiPqziY@V{5 zEmw>jv;(v^)!rAs{k``7)c^n4g{rSOu+;8a!F~Q~^^bXp&*tzq+&{&xxQfeZzBqs8 zp^u@3Ep2l5zjt>{Tj>?-vi~=aN6KNPnLGL$=46?!n6sPlqvUGE!;7~q%>7Z`R%Etu z!d9tGOlFf`eK;nVoEAKxbhYDjR^ydEcV$F+X5KvW%5t^h@^o)c-(yW>>_^v0>)lGx z{M}OUYKdX}9InN?c6IdMH+%G6?a|k#jLw%H?Kb|uQKem`PWbB0{f~2Q$UV?l-o4=H zmzBcx)7~wbYrS%D^{0LF>Sw&-Jm9u`f1T>#ca;nli)63x{ElL&&ec&ftBHKL-Yu!; z`#G*}=j`e~>lX(JROP!KS!ULidN@qJd)Cdx5f}P={sjmZ7}va%_;@k<@D9oDYWW49 zEivt9)TnjopXvUrbj!m`=BUkJJWbBu`gA Jmvv4FO#rZMKLY>& diff --git a/src/plugins/projectexplorer/images/importasproject@2x.png b/src/plugins/projectexplorer/images/importasproject@2x.png index 8c708b52e3baaeecb28b80220104c3a720ad7364..e352692fc9edee69769d26cd0d7df3579c31088e 100644 GIT binary patch delta 450 zcmdnXdy#p9WIY1|1H>7CtjS*72z-&IV%8@KLW-8sGQW^=DGr`@<-x-2+-zwO!g2Yo}o)IFW* zSx}Y~_cS-B&o9=uGp;sZH;~w4&m!$m;P6-3 zlZ}Zvs)EOwLF{j%>J6qp%(vL99X8Dq@Z@Va{3m|mopxV_&GwC!H&{2_z4v!r_-TfB zwv21{wdNiWzHq^#h|#BxIkECSoj5n8JSs|n%V`1#+qB(TUj}Icm&uuxY*mfd3y&tIeEId`FeSUczOo= z284P0h5H6X`Ugb^hQtI1M~6nlM?@z@#im8Yr=_MBM8{{u#HXicmc%7wr)3r=q~xTg z6{VyXre+o;rx&GXm1bm>re~LC#O`hw!R+`^i? z!kYZzx`L9r!s5EZ;)cS~#-h@OqSD5qvc{sarsDFZ;iX`Q`kvax-nyo~x~Bg6<_Qfg6B=43 zHnvV|Y@O89Ho3WdN=wI7k*A$&85kHkOM?7@85o(ESy_}RaDi~H8eCewY0Q#baZre_4Ex44ULRVOwFyWt!?e>9i5zAT-`l= z`~!kRBctNtlQZ)2ii%6htE%cdySjU)&zL!D$tsYXW=7c?-i-HkWCTxp@WW4ra{-QxH1?w94Sv%h`$ z^5?nltRGC$pOrGs11>IG4~wi?W%sF8xVly>an)C+(7nZm>OM#INlcb_ zCe^g+`?f9DTAc+MH}J4^8uBt^FAezmm(gVskI=$fkpZDX2Ubt=WAb?N`annigE_Bx z6$GT6ADX7k5KuajbinN}L)xqiQN!a5CY%bBjxz}QPRp3g{9{x3Wz7Vx8BEI>V3b11 zrp23+qq~*9?038+R1o(`P*5=Q%pc2!Ep3TRsj3qVon-7{yA2mxZCLn1hS|XQ^a~%q z6t)^#dQTUAVwOILfgoNIb&q`qA7fM(3g5*CKe!1vm!nxSviH^&Io?Z3YA{TE_}o1D_W#G$XD{z5F}+4ZdPvQ|0f4;8=dxA{g#no z_LX&8vTi$>$L;*Z(86$JQ+?__(FZ4!=P$2}yf2f(puv$-_O9mEp?}|IoxQwERO%Z; z!oio9e6IX^`73c|@7qg(42(yLr1+cj_HBp^Gr5`n&4JS;?ftJ9mJe?hK8wtYz5G&b z#f~Fs`TwFW{CgJ_w0;Ym_709gY2RP5Zi$h^!>rRzifYX z_OmSLWp6m~ZLJk!?ba?Op$0R#29GBhAH8}#_UT{tV2EOrV!4vPXWK{4EOv(3%{TS6 z&e#20>8Y}t$?fI_Jr^R5(mhfs%RrJLLiI={o; z&$(|`Dgzh(7O7OTD3Iu%#wa^Eg%dbFPzNPts_!Re rmT(zeT#?`G&Gdko;c|9W?4EzDlSOTqWjCL80#!qvu6{1-oD!M #include +#include #include #include #include @@ -169,7 +170,7 @@ SimpleProjectWizard::SimpleProjectWizard() { setSupportedProjectTypes({QmakeProjectManager::Constants::QMAKEPROJECT_ID, CMakeProjectManager::Constants::CMAKE_PROJECT_ID}); - setIcon(QIcon(QLatin1String(":/projectexplorer/images/importasproject.png"))); + setIcon(ProjectExplorer::Icons::WIZARD_IMPORT_AS_PROJECT.icon()); setDisplayName(tr("Import as qmake or cmake Project (Limited Functionality)")); setId("Z.DummyProFile"); setDescription(tr("Imports existing projects that do not use qmake, CMake, Qbs, Meson, or Autotools.

" diff --git a/src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwizard.cpp b/src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwizard.cpp index f1cc3b9151e..1675cbe9908 100644 --- a/src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwizard.cpp +++ b/src/plugins/qmakeprojectmanager/customwidgetwizard/customwidgetwizard.cpp @@ -48,7 +48,7 @@ CustomWidgetWizard::CustomWidgetWizard() ProjectExplorer::Constants::QT_PROJECT_WIZARD_CATEGORY_DISPLAY)); setDisplayName(tr("Qt Custom Designer Widget")); setDescription(tr("Creates a Qt Custom Designer Widget or a Custom Widget Collection.")); - setIcon(QIcon(QLatin1String(":/wizards/images/gui.png"))); + setIcon(themedIcon(":/wizards/images/gui.png")); setRequiredFeatures({QtSupport::Constants::FEATURE_QWIDGETS}); } diff --git a/src/plugins/qmakeprojectmanager/wizards/images/gui.png b/src/plugins/qmakeprojectmanager/wizards/images/gui.png index fba6e608a09ea3240b3436a7d486241623ca3574..b60008a3c26eec3c20256b948a32973c7aee8aa4 100644 GIT binary patch delta 304 zcmdnaa)4=qWIY1|14B{fvS$v^y+5+trV81vTuK668YgTZX`zWoNg z^|lfnOmX!KrG7cE6$mjXsQWZz86+pH$X4LUl9bR{Aaz4hLdyOCW7$)AI}<~L4bG+v zy4ebA7Ba5j@njZca6O!_#8Ag8TsLvW!G&MhJEdf__D@)GuwL=Ma;KC`Q2gW-2Nl0* zc1p=KN9xRpDl&Z;^Ht)AjSKEjADiu~WMghm`9+_U*|6A_W zg9+YS+V(o^5y&`Nnq=B=K)Rg${oExPKWyv29>1@Wsi3+wD3*C*gAQ+NW`;ubxl^G5 z8$no?$J5o% JWt~$(695JKdlmoy delta 553 zcmX@Ww4G&wWIZzj14F_c&aDg#46g!wLR=Xb7#bQH+S{i!cTUYIY|JWbZ0VSqo!`*X z2_m!d8?p-;S~{k-bWF)E0I{tcLT#MF?OY=4U85Y`qn$ir+`Qx6d=lJ!6MTcy0zxx_ z!ZU-yvw|bCLn3oRB6A~R^J9}r5>m^O(ks%ktLrmzYculdGIMLQ^6Rq;8gdF7N-H}m zYPzcHdmCFPH?>Y~>6qF(VNU<#d2{BkoVRfGqNVFruHLeJ=fT~3kL=lZbnpISM~|O9 zbMEqmi`TARzkT!8z55RyKY9B6_3O89-n@JF?!$+VpFV#4^y%}LFJHcX|Ni60j~_pO z{`~dp*YDrIgSzjT)-y0L2$Tf*1v4-yY33Jh+PZc7@sls#{`h%lhB&#O30)vl53bL@bjRE$nbUXYl05zyIYoc*G()DqABqe7IXS*VS9Ml;iF{ z-&T!0gXL~AqPKqA?RxcBK=96vMBO&MU zgFk_c!Rrq#U0%*O=hwk!cR#Cac*J%*Z5#iCOWbG9D0HK9%h=ID&p$wo)#Y05=G5#ojuLEa_i>Ik2a4DvbStG zZ@#-~-}IUD()P_?Hm`El@GEBx~KlHU#KgPn{?@t%wMiK zRx^)S9DeDrrpMFwWvSGIq)C^PSozL8Y?`ztI3Y|nl7U}d`x4ZwH zC7`^WsYlN)etUd^^n}t?U*{^8Tl6oyz2}aTrowy1oq-4Z8P{7UZ!!I?le+Kf+tjFM z-M@}Gt&V>k{>-h8AtUD??^!16<4n(WO#9!=ub=Pg#&BKUz;4;g*UQ+0-`}h;z2AJ> p(&c}N&);W34NM{vv=2z1sGH=s&zd)afq{#G!PC{xWt~$(69A&n=$-%o delta 972 zcmbQwa-DsGWIZzj1H)Cfb}j}6#@PWrA+8Jz3=ItpeSLjt1+6(b4Y|1u?d?0#7ByrSG&Q$RZ*HHGUC@wI*Z?B)8=5<&v~*5w>71HX020XtlPw)nTRNuZ zfZ5q#l`S1pAyN>sKD(d+qNt@~ij_mCwPTo#W0;LoxV=lHy=#<%Ta=SWjEiTin@@tf zZ-R$!qK99iS3t5)V2W>WT2Odqa71=!R8ClQZdi0)cuZboTtQ@fL3Bc4bV5;lN@;vb zSwd=AQhG&dR#iq`ZDww5W?o%petlMceRcuJ>YVzb#=N4&{NkpP%J$OAj3%Y%U5k)v3kp@ zwcFNh+_`z%-d%eR?>lh(z@Za|j+{Dr{Osv77tfr#eBt7?i{!yt-CjG-Me-B z{{07!A3l2e=<(C%FX~^tc=`I}t2eJ+zj^)o?fVZOKYaZ3@#CjYpFV&2^7Y&I@87@w z`0?Y%&!4}3{rdI$_ix|Hi!U%RFld$p`2{nua7s$asA%cwn_E~qwN08lW$MxutJZJW zxM}yE%U7;myZ`vf(~qCNeg8R2Mf)KG1LGl27srr{dv9;1`X3IEXnXkR-8((~`onV{ z9$veHue`kc_O9a z%jXQO!TTj=Y-?bYGH+y*+QZI#rIwj(#Zw`k3I9ZR0-h>LESMB);LsYK(D3Qn0fwjR z8WBYr=F-VwX{^1%M^C$g)hNXVBapAri4v~xYOtk%XzxjLK^YfytoHf%J{uv)I zXRHxDVPuu#k-wkqc)n?x*U3KpSue~(>gTM_mHNjtL8sMKa$&0{V}ydkq(c*bKRjQ4 z)0A(!{PSO*WOlNoB|qED9J{7}RXR(O{Wb4D*{VXFb>9BdsviE|@Ym-O0|Nttr>mdK II;Vst01fxzN&o-= diff --git a/src/plugins/qmakeprojectmanager/wizards/subdirsprojectwizard.cpp b/src/plugins/qmakeprojectmanager/wizards/subdirsprojectwizard.cpp index 7c51c471e5d..ca63700cd62 100644 --- a/src/plugins/qmakeprojectmanager/wizards/subdirsprojectwizard.cpp +++ b/src/plugins/qmakeprojectmanager/wizards/subdirsprojectwizard.cpp @@ -48,7 +48,7 @@ SubdirsProjectWizard::SubdirsProjectWizard() setDisplayName(tr("Subdirs Project")); setDescription(tr("Creates a qmake-based subdirs project. This allows you to group " "your projects in a tree structure.")); - setIcon(QIcon(QLatin1String(":/wizards/images/gui.png"))); + setIcon(themedIcon(":/wizards/images/gui.png")); setRequiredFeatures({QtSupport::Constants::FEATURE_QT_PREFIX}); } diff --git a/src/tools/icons/qtcreatoricons.svg b/src/tools/icons/qtcreatoricons.svg index 0791aeb2575..2983146a838 100644 --- a/src/tools/icons/qtcreatoricons.svg +++ b/src/tools/icons/qtcreatoricons.svg @@ -517,90 +517,6 @@ fy="91.5" r="18.5" gradientUnits="userSpaceOnUse" /> - - - - - - - - - - - - - - - - - + style="fill:#000000;stroke-width:0.90625" /> @@ -1762,7 +1678,7 @@ height="100%" /> @@ -1779,7 +1695,7 @@ style="display:inline" x="0" y="0" - xlink:href="#transparentBackgroundRect_60_60" + xlink:href="#backgroundRect_60_60" id="use5906" width="100%" height="100%" @@ -1790,7 +1706,7 @@ height="44" width="44" id="rect9153" - style="fill:#6b7080" /> + style="fill:#000000" /> @@ -1816,13 +1732,13 @@ sodipodi:nodetypes="csccccccccccccccccccc" inkscape:connector-curvature="0" d="m 263.88612,170.56484 c -2.25619,-7.49215 -13.9354,-14.04789 -27.88611,-14.04789 -14.23027,0 -25.62993,6.55574 -27.88613,14.04789 l -2.69076,2.30637 -3.80901,-7.33845 -2.93538,-12.37053 5.03208,2.0967 c 1.376,-1.39235 2.35711,-2.47631 5.87076,-4.40307 l 3.35472,-6.91911 5.66109,4.40307 c 3.80983,-0.90692 7.59785,-1.85747 11.95119,-1.67736 L 236,141.42071 l 5.45142,5.24175 c 4.35334,-0.18011 8.14136,0.77044 11.95119,1.67736 l 5.66109,-4.40307 3.35472,6.91911 c 3.51365,1.92676 4.49476,3.01072 5.87076,4.40307 l 5.03208,-2.0967 -2.93538,12.37053 -3.80901,7.33845 z" - style="fill:#cecfd5" + style="fill:#a0a0a0" id="path3799" /> @@ -1833,7 +1749,7 @@ style="display:inline" x="0" y="0" - xlink:href="#transparentBackgroundRect_60_60" + xlink:href="#backgroundRect_60_60" id="use5906-4" width="100%" height="100%" /> @@ -1842,13 +1758,13 @@ inkscape:connector-curvature="0" id="rect8115-9-7-8-0" d="m 212.99412,157.98972 10,10 v 34 h -34 v -44 z" - style="fill:#dfe0e3;stroke:#6b7080;stroke-width:2;fill-opacity:1" /> + style="fill:#f0f0f0;fill-opacity:1;stroke:#000000;stroke-width:2" /> + style="fill:#000000;fill-opacity:1" /> @@ -1857,7 +1773,7 @@ style="display:inline" x="0" y="0" - xlink:href="#transparentBackgroundRect_60_60" + xlink:href="#backgroundRect_60_60" id="use5906-9" width="100%" height="100%" /> @@ -1887,13 +1803,13 @@ inkscape:connector-curvature="0" id="rect8389-0-7-1-1-30-0" d="m 214.11732,109.89875 -21.5,10.5 19,10.5 21,-12.5 z" - style="fill:#6b7080" /> + style="fill:#606060" /> + style="fill:#000000" /> @@ -1918,19 +1834,19 @@ id="wizardicons_puzzlepiece" transform="translate(93,-57.5)"> + style="display:inline;fill:#000000;fill-opacity:1" /> + style="fill:#000000" /> + style="fill:#a0a0a0" /> + style="fill:#d0d0d0;fill-opacity:1" /> @@ -2048,15 +1964,15 @@ inkscape:connector-curvature="0" id="path3357-6-2" d="m 284.44641,270.8572 c 0,0 -2.27003,-11.36616 3.42782,-15.38049 5.69783,-4.01433 17.08994,-3.43121 28.16377,-12.78788 -7.08902,12.04204 -7.24264,18.00316 -13.84237,24.63796 -6.59973,6.63476 -17.74922,3.53041 -17.74922,3.53041 z" - style="fill:#3a4055" /> + style="fill:#202020" /> + style="fill:#f0f0f0" /> @@ -2084,34 +2000,34 @@ @@ -2195,7 +2111,7 @@ style="display:inline" x="0" y="0" - xlink:href="#transparentBackgroundRect_60_60" + xlink:href="#backgroundRect_60_60" id="use5906-0" width="100%" height="100%" @@ -2204,25 +2120,25 @@ id="g5886" transform="matrix(0.78941483,0,0,0.78941483,101.83171,55.17776)"> @@ -2233,7 +2149,7 @@ style="display:inline" x="0" y="0" - xlink:href="#transparentBackgroundRect_60_60" + xlink:href="#backgroundRect_60_60" id="use5906-0-4" width="100%" height="100%" @@ -2245,30 +2161,29 @@ sodipodi:nodetypes="cccccccccc" inkscape:connector-curvature="0" d="m 591,256 v 1 h 40 v -1 z m 0,-32 v 28 h 40 v -28 z" - style="fill:#848895;fill-opacity:1" + style="fill:#000000;fill-opacity:1" id="path81" /> + transform="translate(0,-60)"> + transform="translate(60)"> + style="fill:#000000" /> + transform="translate(120)"> @@ -2326,7 +2239,7 @@ style="display:inline" x="0" y="0" - xlink:href="#transparentBackgroundRect_60_60" + xlink:href="#backgroundRect_60_60" id="use5906-0-4-3-5-6-5" width="100%" height="100%" @@ -2344,7 +2257,7 @@ x="0" style="display:inline" /> @@ -2401,7 +2314,7 @@ style="display:inline" x="0" y="0" - xlink:href="#transparentBackgroundRect_60_60" + xlink:href="#backgroundRect_60_60" id="use5906-0-4-3-5-6-3" width="100%" height="100%" @@ -2416,7 +2329,7 @@ height="100%" transform="translate(93.5,2)" /> @@ -2458,7 +2371,7 @@

    qHOh0!x(p~C7l=e#p*$0LEAKu#hub;6c V=iwutpjuGid%F6$taD0e0sz&ytMmW> literal 0 HcmV?d00001 diff --git a/src/plugins/welcome/welcome.qrc b/src/plugins/welcome/welcome.qrc index 018d398c1b0..70cf9cd9377 100644 --- a/src/plugins/welcome/welcome.qrc +++ b/src/plugins/welcome/welcome.qrc @@ -25,5 +25,7 @@ images/border.png images/download.png images/download@2x.png + images/settings.png + images/settings@2x.png diff --git a/src/tools/icons/qtcreatoricons.svg b/src/tools/icons/qtcreatoricons.svg index 2983146a838..af3ce0d8a03 100644 --- a/src/tools/icons/qtcreatoricons.svg +++ b/src/tools/icons/qtcreatoricons.svg @@ -3258,86 +3258,89 @@ xlink:href="#backgroundRect" y="0" x="0" /> - - - - - - - - - + + + + + + + + + + + + + + + + From 99817d387030ea52c47b0ba70c1da8a414675dee Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Tue, 28 Sep 2021 18:16:07 +0300 Subject: [PATCH 17/29] Update Qbs submodule to the top of 1.20 branch Change-Id: I39d2bd127b0dc75d24614fd1a30b50be71a8d4ab Reviewed-by: Christian Kandeler --- src/shared/qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qbs b/src/shared/qbs index 27bd9ac836b..4592eff2898 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 27bd9ac836b5cd2937b8d19dfa32cb4ff617b73c +Subproject commit 4592eff289852e3e5a81596d1cc6b0c2488e6bc0 From 23a58a320eeb00302eaa0b4277ca13f5164d7bef Mon Sep 17 00:00:00 2001 From: David Schulz Date: Mon, 27 Sep 2021 11:08:59 +0200 Subject: [PATCH 18/29] clangd: introduce ClangdCompletionItem allowing to overwrite apply and get rid of the apply helper in the LanguageClient completion provider and processor. Change-Id: I066fe10b116d638bd1b7a81d4488840bec5f0b63 Reviewed-by: Christian Kandeler --- src/plugins/clangcodemodel/clangdclient.cpp | 90 +++++++++++-------- .../languageclientcompletionassist.cpp | 59 ++++++------ .../languageclientcompletionassist.h | 32 +++---- 3 files changed, 91 insertions(+), 90 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index ed17984e95b..f798992d28c 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -807,45 +807,19 @@ public: } }; -QList completionItemsTransformer( - const Utils::FilePath &filePath, - const QString &content, - int pos, - const QList &items) +class ClangdCompletionItem : public LanguageClientCompletionItem { - qCDebug(clangdLog) << "received" << items.count() << "completions"; - - // If there are signals among the candidates, we employ the built-in code model to find out - // whether the cursor was on the second argument of a (dis)connect() call. - // If so, we offer only signals, as nothing else makes sense in that context. - static const auto criterion = [](const CompletionItem &ci) { - const Utils::optional doc = ci.documentation(); - if (!doc) - return false; - QString docText; - if (Utils::holds_alternative(*doc)) - docText = Utils::get(*doc); - else if (Utils::holds_alternative(*doc)) - docText = Utils::get(*doc).content(); - return docText.contains("Annotation: qt_signal"); - }; - if (pos != -1 && Utils::anyOf(items, criterion) - && CppEditor::CppModelManager::instance()->positionRequiresSignal(filePath.toString(), - content.toUtf8(), - pos)) { - return Utils::filtered(items, criterion); - } - return items; +public: + using LanguageClientCompletionItem::LanguageClientCompletionItem; + void apply(TextDocumentManipulatorInterface &manipulator, + int basePosition) const override; }; class ClangdClient::ClangdCompletionAssistProcessor : public LanguageClientCompletionAssistProcessor { public: ClangdCompletionAssistProcessor(ClangdClient *client, const QString &snippetsGroup) - : LanguageClientCompletionAssistProcessor(client, - &completionItemsTransformer, - &applyCompletionItem, - snippetsGroup) + : LanguageClientCompletionAssistProcessor(client, snippetsGroup) , m_client(client) { } @@ -861,13 +835,53 @@ private: return LanguageClientCompletionAssistProcessor::perform(interface); } - static void applyCompletionItem(const CompletionItem &item, - TextDocumentManipulatorInterface &manipulator, - QChar typedChar); + QList generateCompletionItems( + const QList &items) const override; ClangdClient * const m_client; }; +QList +ClangdClient::ClangdCompletionAssistProcessor::generateCompletionItems( + const QList &items) const +{ + qCDebug(clangdLog) << "received" << items.count() << "completions"; + + auto itemGenerator = [](const QList &items) { + return Utils::transform>( + items, [](const LanguageServerProtocol::CompletionItem &item) { + return new ClangdCompletionItem(item); + }); + }; + + // If there are signals among the candidates, we employ the built-in code model to find out + // whether the cursor was on the second argument of a (dis)connect() call. + // If so, we offer only signals, as nothing else makes sense in that context. + static const auto criterion = [](const CompletionItem &ci) { + const Utils::optional doc = ci.documentation(); + if (!doc) + return false; + QString docText; + if (Utils::holds_alternative(*doc)) + docText = Utils::get(*doc); + else if (Utils::holds_alternative(*doc)) + docText = Utils::get(*doc).content(); + return docText.contains("Annotation: qt_signal"); + }; + const QTextDocument *doc = document(); + const int pos = basePos(); + if (!doc || pos < 0 || !Utils::anyOf(items, criterion)) + return itemGenerator(items); + const QString content = doc->toPlainText(); + const bool requiresSignal = CppEditor::CppModelManager::instance() + ->positionRequiresSignal(filePath().toString(), + content.toUtf8(), + pos); + if (requiresSignal) + return itemGenerator(Utils::filtered(items, criterion)); + return itemGenerator(items); +} + class ClangdClient::ClangdCompletionAssistProvider : public LanguageClientCompletionAssistProvider { public: @@ -2837,9 +2851,11 @@ bool ClangdClient::ClangdCompletionAssistProvider::isContinuationChar(const QCha return CppEditor::isValidIdentifierChar(c); } -void ClangdClient::ClangdCompletionAssistProcessor::applyCompletionItem(const CompletionItem &item, - TextDocumentManipulatorInterface &manipulator, QChar typedChar) +void ClangdCompletionItem::apply(TextDocumentManipulatorInterface &manipulator, + int /*basePosition*/) const { + const LanguageServerProtocol::CompletionItem item = this->item(); + QChar typedChar = triggeredCommitCharacter(); const auto edit = item.textEdit(); if (!edit) return; diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp index c2be893d457..ca38029dc13 100644 --- a/src/plugins/languageclient/languageclientcompletionassist.cpp +++ b/src/plugins/languageclient/languageclientcompletionassist.cpp @@ -54,9 +54,8 @@ using namespace TextEditor; namespace LanguageClient { -LanguageClientCompletionItem::LanguageClientCompletionItem(CompletionItem item, - const CompletionApplyHelper &applyHelper) - : m_item(std::move(item)), m_applyHelper(applyHelper) +LanguageClientCompletionItem::LanguageClientCompletionItem(CompletionItem item) + : m_item(std::move(item)) { } QString LanguageClientCompletionItem::text() const @@ -77,11 +76,6 @@ bool LanguageClientCompletionItem::prematurelyApplies(const QChar &typedCharacte void LanguageClientCompletionItem::apply(TextDocumentManipulatorInterface &manipulator, int /*basePosition*/) const { - if (m_applyHelper) { - m_applyHelper(m_item, manipulator, m_triggeredCommitCharacter); - return; - } - if (auto edit = m_item.textEdit()) { applyTextEdit(manipulator, *edit, isSnippet()); } else { @@ -176,6 +170,16 @@ quint64 LanguageClientCompletionItem::hash() const return qHash(m_item.label()); // TODO: naaaa } +CompletionItem LanguageClientCompletionItem::item() const +{ + return m_item; +} + +QChar LanguageClientCompletionItem::triggeredCommitCharacter() const +{ + return m_triggeredCommitCharacter; +} + const QString &LanguageClientCompletionItem::sortText() const { if (m_sortText.isEmpty()) @@ -289,12 +293,8 @@ public: LanguageClientCompletionAssistProcessor::LanguageClientCompletionAssistProcessor( Client *client, - const CompletionItemsTransformer &itemsTransformer, - const CompletionApplyHelper &applyHelper, const QString &snippetsGroup) : m_client(client) - , m_itemsTransformer(itemsTransformer) - , m_applyHelper(applyHelper) , m_snippetsGroup(snippetsGroup) {} @@ -303,6 +303,18 @@ LanguageClientCompletionAssistProcessor::~LanguageClientCompletionAssistProcesso QTC_ASSERT(!running(), cancel()); } +QTextDocument *LanguageClientCompletionAssistProcessor::document() const +{ + return m_document; +} + +QList LanguageClientCompletionAssistProcessor::generateCompletionItems( + const QList &items) const +{ + return Utils::transform>( + items, [](const CompletionItem &item) { return new LanguageClientCompletionItem(item); }); +} + static QString assistReasonString(AssistReason reason) { switch (reason) { @@ -412,17 +424,12 @@ void LanguageClientCompletionAssistProcessor::handleCompletionResponse( } else if (Utils::holds_alternative>(*result)) { items = Utils::get>(*result); } - if (m_itemsTransformer && m_document) - items = m_itemsTransformer(m_filePath, m_document->toPlainText(), m_basePos, items); - auto model = new LanguageClientCompletionModel(); - auto proposalItems = Utils::transform>(items, - [this](const CompletionItem &item) { - return new LanguageClientCompletionItem(item, m_applyHelper); - }); + auto proposalItems = generateCompletionItems(items); if (!m_snippetsGroup.isEmpty()) { proposalItems << TextEditor::SnippetAssistCollector( m_snippetsGroup, QIcon(":/texteditor/images/snippet.png")).collect(); } + auto model = new LanguageClientCompletionModel(); model->loadContent(proposalItems); LanguageClientCompletionProposal *proposal = new LanguageClientCompletionProposal(m_basePos, model); @@ -445,8 +452,6 @@ IAssistProcessor *LanguageClientCompletionAssistProvider::createProcessor( const AssistInterface *) const { return new LanguageClientCompletionAssistProcessor(m_client, - m_itemsTransformer, - m_applyHelper, m_snippetsGroup); } @@ -478,16 +483,4 @@ void LanguageClientCompletionAssistProvider::setTriggerCharacters( } } -void LanguageClientCompletionAssistProvider::setItemsTransformer( - const CompletionItemsTransformer &transformer) -{ - m_itemsTransformer = transformer; -} - -void LanguageClientCompletionAssistProvider::setApplyHelper( - const CompletionApplyHelper &applyHelper) -{ - m_applyHelper = applyHelper; -} - } // namespace LanguageClient diff --git a/src/plugins/languageclient/languageclientcompletionassist.h b/src/plugins/languageclient/languageclientcompletionassist.h index bc8bccb7d7d..2f5ba014fab 100644 --- a/src/plugins/languageclient/languageclientcompletionassist.h +++ b/src/plugins/languageclient/languageclientcompletionassist.h @@ -47,13 +47,6 @@ namespace LanguageClient { class Client; -using CompletionItemsTransformer = std::function( - const Utils::FilePath &, const QString &, int, - const QList &)>; -using CompletionApplyHelper = std::function; - class LANGUAGECLIENT_EXPORT LanguageClientCompletionAssistProvider : public TextEditor::CompletionAssistProvider { @@ -74,14 +67,10 @@ public: void setSnippetsGroup(const QString &group) { m_snippetsGroup = group; } protected: - void setItemsTransformer(const CompletionItemsTransformer &transformer); - void setApplyHelper(const CompletionApplyHelper &applyHelper); Client *client() const { return m_client; } private: QList m_triggerChars; - CompletionItemsTransformer m_itemsTransformer; - CompletionApplyHelper m_applyHelper; QString m_snippetsGroup; int m_activationCharSequenceLength = 0; Client *m_client = nullptr; // not owned @@ -91,16 +80,20 @@ class LANGUAGECLIENT_EXPORT LanguageClientCompletionAssistProcessor : public TextEditor::IAssistProcessor { public: - LanguageClientCompletionAssistProcessor(Client *client, - const CompletionItemsTransformer &itemsTransformer, - const CompletionApplyHelper &applyHelper, - const QString &snippetsGroup); + LanguageClientCompletionAssistProcessor(Client *client, const QString &snippetsGroup); ~LanguageClientCompletionAssistProcessor() override; TextEditor::IAssistProposal *perform(const TextEditor::AssistInterface *interface) override; bool running() override; bool needsRestart() const override { return true; } void cancel() override; +protected: + QTextDocument *document() const; + Utils::FilePath filePath() const { return m_filePath; } + int basePos() const { return m_basePos; } + virtual QList generateCompletionItems( + const QList &items) const; + private: void handleCompletionResponse(const LanguageServerProtocol::CompletionRequest::Response &response); @@ -109,8 +102,6 @@ private: QPointer m_client; Utils::optional m_currentRequest; QMetaObject::Connection m_postponedUpdateConnection; - const CompletionItemsTransformer m_itemsTransformer; - const CompletionApplyHelper m_applyHelper; const QString m_snippetsGroup; int m_pos = -1; int m_basePos = -1; @@ -120,8 +111,7 @@ class LANGUAGECLIENT_EXPORT LanguageClientCompletionItem : public TextEditor::AssistProposalItemInterface { public: - LanguageClientCompletionItem(LanguageServerProtocol::CompletionItem item, - const CompletionApplyHelper &applyHelper); + LanguageClientCompletionItem(LanguageServerProtocol::CompletionItem item); // AssistProposalItemInterface interface QString text() const override; @@ -136,6 +126,9 @@ public: bool isValid() const override; quint64 hash() const override; + LanguageServerProtocol::CompletionItem item() const; + QChar triggeredCommitCharacter() const; + const QString &sortText() const; bool hasSortText() const; @@ -145,7 +138,6 @@ public: private: LanguageServerProtocol::CompletionItem m_item; - const CompletionApplyHelper m_applyHelper; mutable QChar m_triggeredCommitCharacter; mutable QString m_sortText; mutable QString m_filterText; From 2dfb9ff539b4ccce729a9994c86670af3195b5a0 Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Tue, 28 Sep 2021 13:45:39 +0200 Subject: [PATCH 19/29] RemoteDialog: Fix button states after adding remote As adding a remote leads to a model reset which does not trigger the selectionChanged signal, all buttons were enabled despite no remote was selected. Change-Id: I2f752fcf5f1830728d1bcf9810ca4648bd2f287b Reviewed-by: Orgad Shaneh --- src/plugins/git/remotedialog.cpp | 2 ++ src/plugins/git/remotemodel.cpp | 1 + src/plugins/git/remotemodel.h | 3 +++ 3 files changed, 6 insertions(+) diff --git a/src/plugins/git/remotedialog.cpp b/src/plugins/git/remotedialog.cpp index 6463433f377..e99572ad11f 100644 --- a/src/plugins/git/remotedialog.cpp +++ b/src/plugins/git/remotedialog.cpp @@ -145,6 +145,8 @@ RemoteDialog::RemoteDialog(QWidget *parent) : connect(m_ui->remoteView->selectionModel(), &QItemSelectionModel::selectionChanged, this, &RemoteDialog::updateButtonState); + connect(m_remoteModel, &RemoteModel::refreshed, + this, &RemoteDialog::updateButtonState); updateButtonState(); } diff --git a/src/plugins/git/remotemodel.cpp b/src/plugins/git/remotemodel.cpp index 71d49397ac3..5f8bcd3488b 100644 --- a/src/plugins/git/remotemodel.cpp +++ b/src/plugins/git/remotemodel.cpp @@ -199,6 +199,7 @@ bool RemoteModel::refresh(const FilePath &workingDirectory, QString *errorMessag m_remotes.push_back(newRemote); } endResetModel(); + emit refreshed(); return true; } diff --git a/src/plugins/git/remotemodel.h b/src/plugins/git/remotemodel.h index 1ef6b7ffc64..85ceabdafe8 100644 --- a/src/plugins/git/remotemodel.h +++ b/src/plugins/git/remotemodel.h @@ -65,6 +65,9 @@ public: Utils::FilePath workingDirectory() const; int findRemoteByName(const QString &name) const; +signals: + void refreshed(); + protected: class Remote { public: From ceae67022cb035805a77731e3404ce3128dfc7e7 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 29 Sep 2021 00:10:53 +0200 Subject: [PATCH 20/29] Icons: Fix icon export script The export script is designed to first let Inkscape export all .pngs, and then to optimize the .pngs via optipng. This used to work with previous Inkscape and Python versions. A few Inkscape and Python versions later, however, the optimizing phase starts already while the exporting is still happening. That can leave .pngs unoptimized. This change defines the stdout and stderr channels as subprocess.PIPE in the subprocess.Popen call. That restores the intended behavior with current Inkscape and Python versions. Change-Id: I3b2775cc24b33ffb181c3b24e545f8cf98244103 Reviewed-by: Christian Stenger --- src/tools/icons/export.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/tools/icons/export.py b/src/tools/icons/export.py index bf8f0baa393..2ead1ceab4c 100644 --- a/src/tools/icons/export.py +++ b/src/tools/icons/export.py @@ -112,6 +112,8 @@ def printOutUnexported(svgIDs, scaleFactors): def exportPngs(svgIDs, svgFile, scaleFactors, inkscape): inkscapeProcess = subprocess.Popen([inkscape, '--shell'], stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, cwd=qtcRoot()) actions = ["file-open:" + svgFile] for id in svgIDs: From b115de563cc15e6e181b65902ddca9f13abf41b6 Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 27 Sep 2021 17:04:37 +0200 Subject: [PATCH 21/29] ProjectExplorer: Move user path conversion closer to the edge And replace some foreach(). Change-Id: I788e112c0e314f5514af22dabd111f9cdb64dca5 Reviewed-by: Christian Stenger --- .../projectexplorer/customwizard/customwizardpage.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/plugins/projectexplorer/customwizard/customwizardpage.cpp b/src/plugins/projectexplorer/customwizard/customwizardpage.cpp index 0e256bd9fc3..4348b0f72e3 100644 --- a/src/plugins/projectexplorer/customwizard/customwizardpage.cpp +++ b/src/plugins/projectexplorer/customwizard/customwizardpage.cpp @@ -303,7 +303,7 @@ void CustomWizardFieldPage::initializePage() { QWizardPage::initializePage(); clearError(); - foreach (const LineEditData &led, m_lineEdits) { + for (const LineEditData &led : qAsConst(m_lineEdits)) { if (!led.userChange.isNull()) { led.lineEdit->setText(led.userChange); } else if (!led.defaultText.isEmpty()) { @@ -314,7 +314,7 @@ void CustomWizardFieldPage::initializePage() if (!led.placeholderText.isEmpty()) led.lineEdit->setPlaceholderText(led.placeholderText); } - foreach (const TextEditData &ted, m_textEdits) { + for (const TextEditData &ted : qAsConst(m_textEdits)) { if (!ted.userChange.isNull()) { ted.textEdit->setText(ted.userChange); } else if (!ted.defaultText.isEmpty()) { @@ -323,13 +323,13 @@ void CustomWizardFieldPage::initializePage() ted.textEdit->setText(defaultText); } } - foreach (const PathChooserData &ped, m_pathChoosers) { + for (const PathChooserData &ped : qAsConst(m_pathChoosers)) { if (!ped.userChange.isNull()) { - ped.pathChooser->setPath(ped.userChange); + ped.pathChooser->setFilePath(FilePath::fromUserInput(ped.userChange)); } else if (!ped.defaultText.isEmpty()) { QString defaultText = ped.defaultText; CustomWizardContext::replaceFields(m_context->baseReplacements, &defaultText); - ped.pathChooser->setPath(defaultText); + ped.pathChooser->setFilePath(FilePath::fromUserInput(defaultText)); } } } From 45e23e07a8623d2e8eb6b1a3c8ce10f33d06e764 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 29 Sep 2021 09:32:08 +0200 Subject: [PATCH 22/29] Fix build on macOS Amends 901a96231c562b95f27ba2d96c204c54c551eb7a Change-Id: I4ebc961bed63a9f5a8fc3a997d0c861d779d0c11 Reviewed-by: Christian Stenger --- src/plugins/clangcodemodel/clangdclient.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index f798992d28c..55d90060d12 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -2975,9 +2975,10 @@ MessageId ClangdClient::Private::getAndHandleAst(const TextDocOrFile &doc, const AstHandler &astHandler, AstCallbackMode callbackMode) { - const auto textDocPtr = std::get_if(&doc); + const auto textDocPtr = Utils::get_if(&doc); const TextDocument * const textDoc = textDocPtr ? *textDocPtr : nullptr; - const Utils::FilePath filePath = textDoc ? textDoc->filePath() : std::get(doc); + const Utils::FilePath filePath = textDoc ? textDoc->filePath() + : Utils::get(doc); // If the document's AST is in the cache and is up to date, call the handler. if (const auto ast = textDoc ? astCache.get(textDoc) : externalAstCache.get(filePath)) { From 67a8cfb62a51c3634fb9face687b354fa26973ba Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 28 Sep 2021 12:38:08 +0200 Subject: [PATCH 23/29] Debugger: Use FilePath in debuggersourcepathmappingwidget.cpp Change-Id: I83f9cd55ab4c77609fbd3d2ae0d851de3c5145a3 Reviewed-by: Christian Stenger --- .../debuggersourcepathmappingwidget.cpp | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/plugins/debugger/debuggersourcepathmappingwidget.cpp b/src/plugins/debugger/debuggersourcepathmappingwidget.cpp index 1f18596ee46..dacd3f57806 100644 --- a/src/plugins/debugger/debuggersourcepathmappingwidget.cpp +++ b/src/plugins/debugger/debuggersourcepathmappingwidget.cpp @@ -55,7 +55,7 @@ class SourcePathMappingModel; enum { SourceColumn, TargetColumn, ColumnCount }; -using Mapping = QPair; +using Mapping = QPair; class DebuggerSourcePathMappingWidget : public QGroupBox { @@ -79,7 +79,7 @@ private: void updateEnabled(); QString editSourceField() const; QString editTargetField() const; - void setEditFieldMapping(const QPair &m); + void setEditFieldMapping(const Mapping &m); int currentRow() const; void setCurrentRow(int r); @@ -162,9 +162,9 @@ SourcePathMap SourcePathMappingModel::sourcePathMap() const SourcePathMap rc; const int rows = rowCount(); for (int r = 0; r < rows; ++r) { - const QPair m = mappingAt(r); // Skip placeholders. + const Mapping m = mappingAt(r); // Skip placeholders. if (!m.first.isEmpty() && !m.second.isEmpty()) - rc.insert(m.first, m.second); + rc.insert(m.first.toString(), m.second.toString()); } return rc; } @@ -176,17 +176,17 @@ bool SourcePathMappingModel::isNewPlaceHolder(const Mapping &m) const const QChar greaterThan('>'); return m.first.isEmpty() || m.first.startsWith(lessThan) || m.first.endsWith(greaterThan) - || m.first == m_newSourcePlaceHolder + || m.first.toString() == m_newSourcePlaceHolder || m.second.isEmpty() || m.second.startsWith(lessThan) || m.second.endsWith(greaterThan) - || m.second == m_newTargetPlaceHolder; + || m.second.toString() == m_newTargetPlaceHolder; } // Return raw, unfixed mapping Mapping SourcePathMappingModel::rawMappingAt(int row) const { - return Mapping(QDir::fromNativeSeparators(item(row, SourceColumn)->text()), - QDir::fromNativeSeparators(item(row, TargetColumn)->text())); + return Mapping(FilePath::fromUserInput(item(row, SourceColumn)->text()), + FilePath::fromUserInput(item(row, TargetColumn)->text())); } // Return mapping, empty if it is the place holder. @@ -337,15 +337,14 @@ QString DebuggerSourcePathMappingWidget::editTargetField() const void DebuggerSourcePathMappingWidget::setEditFieldMapping(const Mapping &m) { - m_sourceLineEdit->setText(m.first); - m_targetChooser->setPath(m.second); + m_sourceLineEdit->setText(m.first.toUserOutput()); + m_targetChooser->setFilePath(m.second); } void DebuggerSourcePathMappingWidget::slotCurrentRowChanged (const QModelIndex ¤t, const QModelIndex &) { - setEditFieldMapping(current.isValid() - ? m_model->mappingAt(current.row()) : Mapping()); + setEditFieldMapping(current.isValid() ? m_model->mappingAt(current.row()) : Mapping()); updateEnabled(); } From c44478f0fefc3e358ae1d7faf836f5eef3bb24dd Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 27 Sep 2021 23:21:19 +0200 Subject: [PATCH 24/29] Android: Fix FilePath usage (string vs. userInput/Output) Important on Windows Change-Id: I0a3041e28ad60f28544ecdab2f6153b7931939f2 Reviewed-by: Assam Boudjelthia --- src/plugins/android/androidsdkmanager.cpp | 2 +- src/plugins/android/androidsettingswidget.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp index 246b528f1e6..943e371178a 100644 --- a/src/plugins/android/androidsdkmanager.cpp +++ b/src/plugins/android/androidsdkmanager.cpp @@ -694,7 +694,7 @@ bool SdkManagerOutputParser::parseAbstractData(SdkManagerOutputParser::GenericPa for (const auto &key: qAsConst(keys)) { if (valueForKey(key, line, &value)) { if (key == installLocationKey) - output.installedLocation = Utils::FilePath::fromString(value); + output.installedLocation = Utils::FilePath::fromUserInput(value); else if (key == revisionKey) output.revision = QVersionNumber::fromString(value); else if (key == descriptionKey) diff --git a/src/plugins/android/androidsettingswidget.cpp b/src/plugins/android/androidsettingswidget.cpp index d67c53a9637..44fc69e92b9 100644 --- a/src/plugins/android/androidsettingswidget.cpp +++ b/src/plugins/android/androidsettingswidget.cpp @@ -241,7 +241,7 @@ void AndroidSettingsWidget::updateNdkList() const auto installedPkgs = m_sdkManager.installedNdkPackages(); for (const Ndk *ndk : installedPkgs) { m_ui.ndkListWidget->addItem(new QListWidgetItem(Icons::LOCKED.icon(), - ndk->installedLocation().toString())); + ndk->installedLocation().toUserOutput())); } const auto customNdks = m_androidConfig.getCustomNdkList(); From 7b53ce34397a6d0f5b0f925b0e498e4364281cd6 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 28 Sep 2021 16:43:46 +0200 Subject: [PATCH 25/29] ClangCodeModel: Replace FIXME comment with link to upstream bug report Change-Id: I0ad5c67a481b72d637a4ea8793a7c6cb7b263a30 Reviewed-by: David Schulz --- src/plugins/clangcodemodel/test/clangdtests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index d33f3342f59..858128ad1a6 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -393,7 +393,7 @@ void ClangdTestFollowSymbol::test() timer.stop(); QCOMPARE(actualLink.targetFilePath, filePath(targetFile)); - QEXPECT_FAIL("union member ref", "FIXME: clangd points to union", Abort); + QEXPECT_FAIL("union member ref", "https://github.com/clangd/clangd/issues/877", Abort); QCOMPARE(actualLink.targetLine, targetLine); QCOMPARE(actualLink.targetColumn + 1, targetColumn); } From 94a59f15c6c4c3b1263531d7e9dc1e0db2067a14 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 28 Sep 2021 13:28:05 +0200 Subject: [PATCH 26/29] ClangCodeModel: Replace a TODO item with a version check Change-Id: I22911b5bc5da3e905d1f31ac1bb19251058a5471 Reviewed-by: David Schulz --- src/plugins/clangcodemodel/clangdclient.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 55d90060d12..72c80a75e9f 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -2479,7 +2479,7 @@ static void semanticHighlighter(QFutureInterface &future, const QList &tokens, const QString &docContents, const AstNode &ast, const QPointer &widget, - int docRevision) + int docRevision, const QVersionNumber &clangdVersion) { if (future.isCanceled()) { future.reportFinished(); @@ -2513,7 +2513,8 @@ static void semanticHighlighter(QFutureInterface &future, return false; }; - const auto toResult = [&ast, &isOutputParameter](const ExpandedSemanticToken &token) { + const auto toResult = [&ast, &isOutputParameter, &clangdVersion] + (const ExpandedSemanticToken &token) { TextStyles styles; if (token.type == "variable") { if (token.modifiers.contains("functionScope")) { @@ -2532,11 +2533,10 @@ static void semanticHighlighter(QFutureInterface &future, if (path.length() > 1) { const AstNode declNode = path.at(path.length() - 2); if (declNode.kind() == "Function" || declNode.kind() == "CXXMethod") { - - // TODO: Remove this once we can assume clangd >= 14. - if (declNode.arcanaContains("' virtual")) + if (clangdVersion < QVersionNumber(14) + && declNode.arcanaContains("' virtual")) { styles.mainStyle = C_VIRTUAL_METHOD; - + } if (declNode.hasChildWithRole("statement")) styles.mixinStyles.push_back(C_FUNCTION_DEFINITION); } @@ -2640,8 +2640,9 @@ void ClangdClient::Private::handleSemanticTokens(TextDocument *doc, [doc](const IEditor *editor) { return editor->document() == doc; }); const auto editorWidget = TextEditorWidget::fromEditor(editor); const auto runner = [tokens, text = doc->document()->toPlainText(), ast, - w = QPointer(editorWidget), rev = doc->document()->revision()] { - return Utils::runAsync(semanticHighlighter, tokens, text, ast, w, rev); + w = QPointer(editorWidget), rev = doc->document()->revision(), + clangdVersion = q->versionNumber()] { + return Utils::runAsync(semanticHighlighter, tokens, text, ast, w, rev, clangdVersion); }; if (isTesting) { From 29c0512416701602e8867631351d911773b203b0 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Tue, 28 Sep 2021 15:10:47 +0200 Subject: [PATCH 27/29] ClangCodeModel: Do not use clangd for completing #ifdef & friends Annoyingly, LLVM does not complete preprocessor directives in disabled code, so that we would not offer e.g. "#endif" after "#if 0" (but we would offer it after "#if 1"). Fixing it would require messing with the clang libs (rather than just clangd), so let's just keep using our existing code, which seems to work fine. Change-Id: I9dabf9a2a8f3a2f68e88a11b62c3df3b5e64a55c Reviewed-by: David Schulz --- .../clangcompletionassistprocessor.cpp | 2 +- src/plugins/clangcodemodel/clangdclient.cpp | 64 +++++++++++++++---- .../clangcodemodel/test/clangdtests.cpp | 7 +- src/plugins/cppeditor/cppcompletionassist.cpp | 2 +- .../cppcompletionassistprocessor.cpp | 22 ++++--- .../cppeditor/cppcompletionassistprocessor.h | 3 +- 6 files changed, 71 insertions(+), 29 deletions(-) diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index 363aac03c38..af964f5be95 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -568,7 +568,7 @@ void ClangCompletionAssistProcessor::completeIncludePath(const QString &realPath bool ClangCompletionAssistProcessor::completePreprocessorDirectives() { - foreach (const QString &preprocessorCompletion, m_preprocessorCompletions) + foreach (const QString &preprocessorCompletion, preprocessorCompletions()) addCompletionItem(preprocessorCompletion, Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::Macro)); diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index 72c80a75e9f..6103fada825 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -654,25 +655,47 @@ public: { insert("publishDiagnostics", caps); } }; -class DoxygenAssistProcessor : public IAssistProcessor + +enum class CustomAssistMode { Doxygen, Preprocessor }; +class CustomAssistProcessor : public IAssistProcessor { public: - DoxygenAssistProcessor(ClangdClient *client, int position, unsigned completionOperator) + CustomAssistProcessor(ClangdClient *client, int position, unsigned completionOperator, + CustomAssistMode mode) : m_client(client) , m_position(position) , m_completionOperator(completionOperator) + , m_mode(mode) {} private: - IAssistProposal *perform(const AssistInterface *) override + IAssistProposal *perform(const AssistInterface *interface) override { QList completions; - for (int i = 1; i < CppEditor::T_DOXY_LAST_TAG; ++i) { - const auto item = new ClangPreprocessorAssistProposalItem; - item->setText(QLatin1String(CppEditor::doxygenTagSpell(i))); - item->setIcon(CPlusPlus::Icons::keywordIcon()); - item->setCompletionOperator(m_completionOperator); - completions.append(item); + switch (m_mode) { + case CustomAssistMode::Doxygen: + for (int i = 1; i < CppEditor::T_DOXY_LAST_TAG; ++i) { + completions << createItem(QLatin1String(CppEditor::doxygenTagSpell(i)), + CPlusPlus::Icons::keywordIcon()); + } + break; + case CustomAssistMode::Preprocessor: + static QIcon macroIcon = Utils::CodeModelIcon::iconForType(Utils::CodeModelIcon::Macro); + for (const QString &completion + : CppEditor::CppCompletionAssistProcessor::preprocessorCompletions()) + completions << createItem(completion, macroIcon); + const CppEditor::ProjectFile::Kind fileType + = CppEditor::ProjectFile::classify(interface->filePath().toString()); + switch (fileType) { + case CppEditor::ProjectFile::ObjCHeader: + case CppEditor::ProjectFile::ObjCXXHeader: + case CppEditor::ProjectFile::ObjCSource: + case CppEditor::ProjectFile::ObjCXXSource: + completions << createItem("import", macroIcon); + break; + default: + break; + } } GenericProposalModelPtr model(new GenericProposalModel); model->loadContent(completions); @@ -684,12 +707,21 @@ private: return proposal; } + AssistProposalItemInterface *createItem(const QString &text, const QIcon &icon) const + { + const auto item = new ClangPreprocessorAssistProposalItem; + item->setText(text); + item->setIcon(icon); + item->setCompletionOperator(m_completionOperator); + return item; + } + ClangdClient * const m_client; const int m_position; const unsigned m_completionOperator; + const CustomAssistMode m_mode; }; - static qint64 getRevision(const TextDocument *doc) { return doc->document()->revision(); @@ -2813,9 +2845,15 @@ IAssistProcessor *ClangdClient::ClangdCompletionAssistProvider::createProcessor( qCDebug(clangdLog) << "completion changed to function hint"; return new ClangdFunctionHintProcessor(m_client); case ClangCompletionContextAnalyzer::CompleteDoxygenKeyword: - return new DoxygenAssistProcessor(m_client, - contextAnalyzer.positionForProposal(), - contextAnalyzer.completionOperator()); + return new CustomAssistProcessor(m_client, + contextAnalyzer.positionForProposal(), + contextAnalyzer.completionOperator(), + CustomAssistMode::Doxygen); + case ClangCompletionContextAnalyzer::CompletePreprocessorDirective: + return new CustomAssistProcessor(m_client, + contextAnalyzer.positionForProposal(), + contextAnalyzer.completionOperator(), + CustomAssistMode::Preprocessor); default: break; } diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index 858128ad1a6..965af2dd4ce 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -1462,20 +1462,19 @@ void ClangdTestCompletion::testCompletePreprocessorKeywords() ProposalModelPtr proposal; getProposal("preprocessorKeywordsCompletion.cpp", proposal); QVERIFY(proposal); - QVERIFY(hasItem(proposal, " ifdef macro")); + QVERIFY(hasItem(proposal, "ifdef")); QVERIFY(!hasSnippet(proposal, "class ")); proposal.clear(); getProposal("preprocessorKeywordsCompletion2.cpp", proposal); QVERIFY(proposal); - QVERIFY(hasItem(proposal, " endif")); + QVERIFY(hasItem(proposal, "endif")); QVERIFY(!hasSnippet(proposal, "class ")); proposal.clear(); getProposal("preprocessorKeywordsCompletion3.cpp", proposal); QVERIFY(proposal); - QEXPECT_FAIL("", "TODO: Fix in clangd", Continue); - QVERIFY(hasItem(proposal, " endif")); + QVERIFY(hasItem(proposal, "endif")); QVERIFY(!hasSnippet(proposal, "class ")); } diff --git a/src/plugins/cppeditor/cppcompletionassist.cpp b/src/plugins/cppeditor/cppcompletionassist.cpp index 595a6c85d23..cd2c70b78c3 100644 --- a/src/plugins/cppeditor/cppcompletionassist.cpp +++ b/src/plugins/cppeditor/cppcompletionassist.cpp @@ -1302,7 +1302,7 @@ void InternalCppCompletionAssistProcessor::completeInclude(const QString &realPa void InternalCppCompletionAssistProcessor::completePreprocessor() { - foreach (const QString &preprocessorCompletion, m_preprocessorCompletions) + foreach (const QString &preprocessorCompletion, preprocessorCompletions()) addCompletionItem(preprocessorCompletion); if (objcKeywordsWanted()) diff --git a/src/plugins/cppeditor/cppcompletionassistprocessor.cpp b/src/plugins/cppeditor/cppcompletionassistprocessor.cpp index d6ff7acb117..a222ce49a08 100644 --- a/src/plugins/cppeditor/cppcompletionassistprocessor.cpp +++ b/src/plugins/cppeditor/cppcompletionassistprocessor.cpp @@ -41,20 +41,24 @@ using namespace CPlusPlus; namespace CppEditor { CppCompletionAssistProcessor::CppCompletionAssistProcessor(int snippetItemOrder) - : m_preprocessorCompletions( - QStringList({"define", "error", "include", "line", "pragma", "pragma once", - "pragma omp atomic", "pragma omp parallel", "pragma omp for", - "pragma omp ordered", "pragma omp parallel for", "pragma omp section", - "pragma omp sections", "pragma omp parallel sections", "pragma omp single", - "pragma omp master", "pragma omp critical", "pragma omp barrier", - "pragma omp flush", "pragma omp threadprivate", "undef", "if", "ifdef", - "ifndef", "elif", "else", "endif"})) - , m_snippetCollector(QLatin1String(CppEditor::Constants::CPP_SNIPPETS_GROUP_ID), + : m_snippetCollector(QLatin1String(CppEditor::Constants::CPP_SNIPPETS_GROUP_ID), QIcon(QLatin1String(":/texteditor/images/snippet.png")), snippetItemOrder) { } +const QStringList CppCompletionAssistProcessor::preprocessorCompletions() +{ + static QStringList list{"define", "error", "include", "line", "pragma", "pragma once", + "pragma omp atomic", "pragma omp parallel", "pragma omp for", + "pragma omp ordered", "pragma omp parallel for", "pragma omp section", + "pragma omp sections", "pragma omp parallel sections", "pragma omp single", + "pragma omp master", "pragma omp critical", "pragma omp barrier", + "pragma omp flush", "pragma omp threadprivate", "undef", "if", "ifdef", + "ifndef", "elif", "else", "endif"}; + return list; +} + void CppCompletionAssistProcessor::addSnippets() { m_completions.append(m_snippetCollector.collect()); diff --git a/src/plugins/cppeditor/cppcompletionassistprocessor.h b/src/plugins/cppeditor/cppcompletionassistprocessor.h index 5a94c6cdd90..87d8527e111 100644 --- a/src/plugins/cppeditor/cppcompletionassistprocessor.h +++ b/src/plugins/cppeditor/cppcompletionassistprocessor.h @@ -45,6 +45,8 @@ class CPPEDITOR_EXPORT CppCompletionAssistProcessor : public TextEditor::IAssist public: explicit CppCompletionAssistProcessor(int snippetItemOrder = 0); + static const QStringList preprocessorCompletions(); + protected: void addSnippets(); @@ -60,7 +62,6 @@ protected: int m_positionForProposal = -1; QList m_completions; - QStringList m_preprocessorCompletions; TextEditor::IAssistProposal *m_hintProposal = nullptr; private: From 5e9ac00f19318a6f16c04641ad24f8dc8ce7c9c2 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 29 Sep 2021 11:48:04 +0200 Subject: [PATCH 28/29] ClangCodeModel: Replace FIXME comment with link to upstream bug report Change-Id: I90524adbbc4481cb3e1a3c1bf40ae543cdaf6cd0 Reviewed-by: David Schulz --- src/plugins/clangcodemodel/test/clangdtests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/clangcodemodel/test/clangdtests.cpp b/src/plugins/clangcodemodel/test/clangdtests.cpp index 965af2dd4ce..4622db96a69 100644 --- a/src/plugins/clangcodemodel/test/clangdtests.cpp +++ b/src/plugins/clangcodemodel/test/clangdtests.cpp @@ -1275,7 +1275,7 @@ void ClangdTestHighlighting::test() const TextEditor::HighlightingResults results = findResults(); QEXPECT_FAIL("typedef as underlying type in enum declaration", - "FIXME: clangd does not report this symbol", + "https://github.com/clangd/clangd/issues/878", Abort); QEXPECT_FAIL("Q_PROPERTY (property name)", "FIXME: How to do this?", Abort); QEXPECT_FAIL("Q_PROPERTY (getter)", "FIXME: How to do this?", Abort); From ba672d1334a308b82cd0047a7d5d4ad96ab5388a Mon Sep 17 00:00:00 2001 From: Assam Boudjelthia Date: Sun, 26 Sep 2021 16:57:59 +0300 Subject: [PATCH 29/29] Android: Do some refactoring for AvdDialog class Move some logic for avd creation to the AvdDialog, and some refactoring and simplification. Change-Id: Id65e586ab1c0e9e898a04f07d7707371f20da649 Reviewed-by: Alessandro Portale Reviewed-by: Qt CI Bot --- src/plugins/android/androiddevice.cpp | 54 +++-------- src/plugins/android/avddialog.cpp | 132 ++++++++++++++++---------- src/plugins/android/avddialog.h | 54 +++++------ 3 files changed, 116 insertions(+), 124 deletions(-) diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp index 26f9a446e2b..38d6e09ad8b 100644 --- a/src/plugins/android/androiddevice.cpp +++ b/src/plugins/android/androiddevice.cpp @@ -604,50 +604,20 @@ AndroidDeviceFactory::AndroidDeviceFactory() IDevice::Ptr AndroidDeviceFactory::create() const { - AndroidSdkManager sdkManager = AndroidSdkManager(m_androidConfig); - const CreateAvdInfo info = AvdDialog::gatherCreateAVDInfo(Core::ICore::dialogParent(), - &sdkManager, m_androidConfig); - if (!info.isValid()) { - if (!info.cancelled) { - AndroidDeviceWidget::criticalDialog( - QObject::tr("The returned device info is invalid.")); - } - return nullptr; + AvdDialog dialog = AvdDialog(m_androidConfig, Core::ICore::dialogParent()); + if (dialog.exec() != QDialog::Accepted) + return ProjectExplorer::IDevice::Ptr(); + + const ProjectExplorer::IDevice::Ptr dev = dialog.device(); + const AndroidDevice *androidDev = static_cast(dev.data()); + if (androidDev) { + qCDebug(androidDeviceLog, "Created new Android AVD id \"%s\".", + qPrintable(androidDev->avdName())); + } else { + AndroidDeviceWidget::criticalDialog( + QObject::tr("The device info returned from AvdDialog is invalid.")); } - const AndroidAvdManager avdManager = AndroidAvdManager(m_androidConfig); - QFutureWatcher createAvdFutureWatcher; - createAvdFutureWatcher.setFuture(avdManager.createAvd(info)); - - QEventLoop loop; - QObject::connect(&createAvdFutureWatcher, &QFutureWatcher::finished, - &loop, &QEventLoop::quit); - QObject::connect(&createAvdFutureWatcher, &QFutureWatcher::canceled, - &loop, &QEventLoop::quit); - loop.exec(QEventLoop::ExcludeUserInputEvents); - - QFuture future = createAvdFutureWatcher.future(); - if (!(future.isResultReadyAt(0) && future.result().isValid())) { - AndroidDeviceWidget::criticalDialog(QObject::tr("The device info returned by " - "avdmanager tool is invalid for the device name \"%1\".").arg(info.name)); - return nullptr; - } - - const CreateAvdInfo newAvdInfo = createAvdFutureWatcher.result(); - - AndroidDevice *dev = new AndroidDevice(); - const Utils::Id deviceId = AndroidDevice::idFromAvdInfo(newAvdInfo); - dev->setupId(IDevice::AutoDetected, deviceId); - dev->setMachineType(IDevice::Emulator); - dev->setDisplayName(newAvdInfo.name); - dev->setDeviceState(IDevice::DeviceConnected); - dev->setExtraData(Constants::AndroidAvdName, newAvdInfo.name); - dev->setExtraData(Constants::AndroidCpuAbi, {newAvdInfo.abi}); - dev->setExtraData(Constants::AndroidSdk, newAvdInfo.systemImage->apiLevel()); - dev->setExtraData(Constants::AndroidAvdSdcard, QString("%1 MB").arg(newAvdInfo.sdcardSize)); - dev->setExtraData(Constants::AndroidAvdDevice, newAvdInfo.deviceDefinition); - - qCDebug(androidDeviceLog, "Created new Android AVD id \"%s\".", qPrintable(newAvdInfo.name)); return IDevice::Ptr(dev); } diff --git a/src/plugins/android/avddialog.cpp b/src/plugins/android/avddialog.cpp index 5f5a5cf6821..d3418f39ca8 100644 --- a/src/plugins/android/avddialog.cpp +++ b/src/plugins/android/avddialog.cpp @@ -26,6 +26,8 @@ #include "avddialog.h" #include "androidsdkmanager.h" #include "androidavdmanager.h" +#include "androiddevice.h" +#include "androidconstants.h" #include #include @@ -33,6 +35,7 @@ #include #include +#include #include #include #include @@ -46,29 +49,35 @@ namespace { static Q_LOGGING_CATEGORY(avdDialogLog, "qtc.android.avdDialog", QtWarningMsg) } -AvdDialog::AvdDialog(int minApiLevel, AndroidSdkManager *sdkManager, const QStringList &abis, - const AndroidConfig &config, QWidget *parent) : - QDialog(parent), - m_sdkManager(sdkManager), - m_minApiLevel(minApiLevel), - m_allowedNameChars(QLatin1String("[a-z|A-Z|0-9|._-]*")), - m_androidConfig(config) +AvdDialog::AvdDialog(const AndroidConfig &config, QWidget *parent) + : QDialog(parent), + m_sdkManager(m_androidConfig), + m_allowedNameChars(QLatin1String("[a-z|A-Z|0-9|._-]*")), + m_androidConfig(config) { - QTC_CHECK(m_sdkManager); m_avdDialog.setupUi(this); m_hideTipTimer.setInterval(2000); m_hideTipTimer.setSingleShot(true); - if (abis.isEmpty()) { - m_avdDialog.abiComboBox->addItems(QStringList({ - ProjectExplorer::Constants::ANDROID_ABI_X86, - ProjectExplorer::Constants::ANDROID_ABI_X86_64, - ProjectExplorer::Constants::ANDROID_ABI_ARMEABI_V7A, - ProjectExplorer::Constants::ANDROID_ABI_ARMEABI, - ProjectExplorer::Constants::ANDROID_ABI_ARM64_V8A})); - } else { - m_avdDialog.abiComboBox->addItems(abis); - } + connect(&m_hideTipTimer, &QTimer::timeout, this, &Utils::ToolTip::hide); + connect(m_avdDialog.deviceDefinitionTypeComboBox, + QOverload::of(&QComboBox::currentIndexChanged), + this, &AvdDialog::updateDeviceDefinitionComboBox); + connect(m_avdDialog.abiComboBox, + QOverload::of(&QComboBox::currentIndexChanged), + this, &AvdDialog::updateApiLevelComboBox); + + deviceTypeToStringMap.insert(AvdDialog::Phone, "Phone"); + deviceTypeToStringMap.insert(AvdDialog::Tablet, "Tablet"); + deviceTypeToStringMap.insert(AvdDialog::Automotive, "Automotive"); + deviceTypeToStringMap.insert(AvdDialog::TV, "TV"); + deviceTypeToStringMap.insert(AvdDialog::Wear, "Wear"); + + m_avdDialog.abiComboBox->addItems(QStringList({ + ProjectExplorer::Constants::ANDROID_ABI_X86, + ProjectExplorer::Constants::ANDROID_ABI_X86_64, + ProjectExplorer::Constants::ANDROID_ABI_ARMEABI_V7A, + ProjectExplorer::Constants::ANDROID_ABI_ARM64_V8A})); auto v = new QRegularExpressionValidator(m_allowedNameChars, this); m_avdDialog.nameLineEdit->setValidator(v); @@ -77,46 +86,70 @@ AvdDialog::AvdDialog(int minApiLevel, AndroidSdkManager *sdkManager, const QStri m_avdDialog.warningText->setType(Utils::InfoLabel::Warning); m_avdDialog.warningText->setElideMode(Qt::ElideNone); - connect(&m_hideTipTimer, &QTimer::timeout, this, []() { Utils::ToolTip::hide(); }); - parseDeviceDefinitionsList(); - for (const QString &type : DeviceTypeToStringMap) + for (const QString &type : deviceTypeToStringMap) m_avdDialog.deviceDefinitionTypeComboBox->addItem(type); - connect(m_avdDialog.deviceDefinitionTypeComboBox, - QOverload::of(&QComboBox::currentIndexChanged), - this, - &AvdDialog::updateDeviceDefinitionComboBox); - connect(m_avdDialog.abiComboBox, - QOverload::of(&QComboBox::currentIndexChanged), - this, &AvdDialog::updateApiLevelComboBox); - - m_avdDialog.deviceDefinitionTypeComboBox->setCurrentIndex(1); // Set Phone type as default index updateApiLevelComboBox(); } +int AvdDialog::exec() +{ + const int execResult = QDialog::exec(); + if (execResult == QDialog::Accepted) { + CreateAvdInfo result; + result.systemImage = systemImage(); + result.name = name(); + result.abi = abi(); + result.deviceDefinition = deviceDefinition(); + result.sdcardSize = sdcardSize(); + result.overwrite = m_avdDialog.overwriteCheckBox->isChecked(); + + const AndroidAvdManager avdManager = AndroidAvdManager(m_androidConfig); + QFutureWatcher createAvdFutureWatcher; + createAvdFutureWatcher.setFuture(avdManager.createAvd(result)); + + QEventLoop loop; + QObject::connect(&createAvdFutureWatcher, &QFutureWatcher::finished, + &loop, &QEventLoop::quit); + QObject::connect(&createAvdFutureWatcher, &QFutureWatcher::canceled, + &loop, &QEventLoop::quit); + loop.exec(QEventLoop::ExcludeUserInputEvents); + + const QFuture future = createAvdFutureWatcher.future(); + if (future.isResultReadyAt(0)) + m_createdAvdInfo = future.result(); + } + + return execResult; +} + bool AvdDialog::isValid() const { return !name().isEmpty() && systemImage() && systemImage()->isValid() && !abi().isEmpty(); } -CreateAvdInfo AvdDialog::gatherCreateAVDInfo(QWidget *parent, AndroidSdkManager *sdkManager, - const AndroidConfig &config, int minApiLevel, const QStringList &abis) +ProjectExplorer::IDevice::Ptr AvdDialog::device() const { - CreateAvdInfo result; - AvdDialog d(minApiLevel, sdkManager, abis, config, parent); - result.cancelled = (d.exec() != QDialog::Accepted); - if (result.cancelled || !d.isValid()) - return result; + AndroidDevice *dev = new AndroidDevice(); + const Utils::Id deviceId = AndroidDevice::idFromAvdInfo(m_createdAvdInfo); + using namespace ProjectExplorer; + dev->setupId(IDevice::AutoDetected, deviceId); + dev->setMachineType(IDevice::Emulator); + dev->setDisplayName(m_createdAvdInfo.name); + dev->setDeviceState(IDevice::DeviceConnected); + dev->setExtraData(Constants::AndroidAvdName, m_createdAvdInfo.name); + dev->setExtraData(Constants::AndroidCpuAbi, {m_createdAvdInfo.abi}); + if (!m_createdAvdInfo.systemImage) { + qCWarning(avdDialogLog) << "System image of the created AVD is nullptr"; + return IDevice::Ptr(); + } + dev->setExtraData(Constants::AndroidSdk, m_createdAvdInfo.systemImage->apiLevel()); + dev->setExtraData(Constants::AndroidAvdSdcard, QString("%1 MB") + .arg(m_createdAvdInfo.sdcardSize)); + dev->setExtraData(Constants::AndroidAvdDevice, m_createdAvdInfo.deviceDefinition); - result.systemImage = d.systemImage(); - result.name = d.name(); - result.abi = d.abi(); - result.deviceDefinition = d.deviceDefinition(); - result.sdcardSize = d.sdcardSize(); - result.overwrite = d.m_avdDialog.overwriteCheckBox->isChecked(); - - return result; + return IDevice::Ptr(dev); } AvdDialog::DeviceType AvdDialog::tagToDeviceType(const QString &type_tag) @@ -175,7 +208,7 @@ void AvdDialog::parseDeviceDefinitionsList() void AvdDialog::updateDeviceDefinitionComboBox() { - DeviceType curDeviceType = DeviceTypeToStringMap.key( + DeviceType curDeviceType = deviceTypeToStringMap.key( m_avdDialog.deviceDefinitionTypeComboBox->currentText()); m_avdDialog.deviceDefinitionComboBox->clear(); @@ -215,8 +248,8 @@ int AvdDialog::sdcardSize() const void AvdDialog::updateApiLevelComboBox() { - SystemImageList installedSystemImages = m_sdkManager->installedSystemImages(); - DeviceType curDeviceType = DeviceTypeToStringMap.key( + SystemImageList installedSystemImages = m_sdkManager.installedSystemImages(); + DeviceType curDeviceType = deviceTypeToStringMap.key( m_avdDialog.deviceDefinitionTypeComboBox->currentText()); QString selectedAbi = abi(); @@ -250,8 +283,7 @@ void AvdDialog::updateApiLevelComboBox() m_avdDialog.warningText->setVisible(true); m_avdDialog.warningText->setText( tr("Cannot create a new AVD. No suitable Android system image is installed.
    " - "Install a system image of at least API version %1 from the SDK Manager tab.") - .arg(m_minApiLevel)); + "Install a system image for the intended Android version from the SDK Manager.")); m_avdDialog.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); } else if (filteredList.isEmpty()) { m_avdDialog.targetApiComboBox->setEnabled(false); diff --git a/src/plugins/android/avddialog.h b/src/plugins/android/avddialog.h index 9813cc813ba..3f95bed2130 100644 --- a/src/plugins/android/avddialog.h +++ b/src/plugins/android/avddialog.h @@ -41,21 +41,27 @@ class AvdDialog : public QDialog { Q_OBJECT public: - explicit AvdDialog(int minApiLevel, - AndroidSdkManager *sdkManager, - const QStringList &abis, - const AndroidConfig &config, - QWidget *parent = nullptr); + explicit AvdDialog(const AndroidConfig &config, QWidget *parent = nullptr); + int exec() override; - enum DeviceType { TV, Phone, Wear, Tablet, Automotive, PhoneOrTablet }; + enum DeviceType { Phone, Tablet, Automotive, TV, Wear, PhoneOrTablet }; - const QMap DeviceTypeToStringMap{ - {TV, "TV"}, - {Phone, "Phone"}, - {Wear, "Wear"}, - {Tablet, "Tablet"}, - {Automotive, "Automotive"} - }; + ProjectExplorer::IDevice::Ptr device() const; + + const SystemImage *systemImage() const; + QString name() const; + QString abi() const; + QString deviceDefinition() const; + int sdcardSize() const; + bool isValid() const; + +private: + void parseDeviceDefinitionsList(); + void updateDeviceDefinitionComboBox(); + void updateApiLevelComboBox(); + bool eventFilter(QObject *obj, QEvent *event) override; + + static AvdDialog::DeviceType tagToDeviceType(const QString &type_tag); struct DeviceDefinitionStruct { @@ -64,30 +70,14 @@ public: DeviceType deviceType; }; - const SystemImage *systemImage() const; - QString name() const; - QString abi() const; - QString deviceDefinition() const; - int sdcardSize() const; - bool isValid() const; - static AvdDialog::DeviceType tagToDeviceType(const QString &type_tag); - static CreateAvdInfo gatherCreateAVDInfo(QWidget *parent, AndroidSdkManager *sdkManager, - const AndroidConfig &config, - int minApiLevel = 0, const QStringList &abis = {}); - -private: - void parseDeviceDefinitionsList(); - void updateDeviceDefinitionComboBox(); - void updateApiLevelComboBox(); - bool eventFilter(QObject *obj, QEvent *event) override; - Ui::AddNewAVDDialog m_avdDialog; - AndroidSdkManager *m_sdkManager; - int m_minApiLevel; + AndroidSdkManager m_sdkManager; + CreateAvdInfo m_createdAvdInfo; QTimer m_hideTipTimer; QRegularExpression m_allowedNameChars; QList m_deviceDefinitionsList; AndroidConfig m_androidConfig; + QMap deviceTypeToStringMap; }; } }