diff --git a/src/app/main.cpp b/src/app/main.cpp index c3a41fbb4c4..42b28ea500c 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -196,7 +196,7 @@ static inline FilePaths getPluginPaths() // "%LOCALAPPDATA%\QtProject\qtcreator" on Windows Vista and later // "$XDG_DATA_HOME/data/QtProject/qtcreator" or "~/.local/share/data/QtProject/qtcreator" on Linux // "~/Library/Application Support/QtProject/Qt Creator" on Mac - const FilePath userPluginPath = appInfo().userPluginsRoot; + const FilePath userPluginPath = appInfo().userPluginsRoot.parentDir(); // Qt Creator X.Y.Z can load plugins from X.Y.(Z-1) etc, so add current and previous // patch versions diff --git a/src/libs/extensionsystem/pluginmanager.cpp b/src/libs/extensionsystem/pluginmanager.cpp index 38d1a01f288..a6d8d2a0dfc 100644 --- a/src/libs/extensionsystem/pluginmanager.cpp +++ b/src/libs/extensionsystem/pluginmanager.cpp @@ -2151,4 +2151,13 @@ void PluginManager::setAcceptTermsAndConditionsCallback( d->setAcceptTermsAndConditionsCallback(callback); } +void PluginManager::setTermsAndConditionsAccepted(PluginSpec *spec) +{ + if (spec->termsAndConditions()) { + d->pluginsWithAcceptedTermsAndConditions.append(spec->id()); + if (d->settings) + d->settings->setValue(C_TANDCACCEPTED_PLUGINS, d->pluginsWithAcceptedTermsAndConditions); + } +} + } // ExtensionSystem diff --git a/src/libs/extensionsystem/pluginmanager.h b/src/libs/extensionsystem/pluginmanager.h index 74141d157b5..1fbb266c24a 100644 --- a/src/libs/extensionsystem/pluginmanager.h +++ b/src/libs/extensionsystem/pluginmanager.h @@ -142,6 +142,7 @@ public: static QString systemInformation(); void setAcceptTermsAndConditionsCallback(const std::function &callback); + void setTermsAndConditionsAccepted(PluginSpec *spec); signals: void objectAdded(QObject *obj); diff --git a/src/libs/sqlite/sqlitebasestatement.h b/src/libs/sqlite/sqlitebasestatement.h index a41be5f4822..4da0cefa7fb 100644 --- a/src/libs/sqlite/sqlitebasestatement.h +++ b/src/libs/sqlite/sqlitebasestatement.h @@ -411,10 +411,6 @@ public: BaseSqliteResultRange(BaseSqliteResultRange &) = delete; BaseSqliteResultRange &operator=(BaseSqliteResultRange &) = delete; - - BaseSqliteResultRange(BaseSqliteResultRange &&other) - : m_statement{std::move(other.resetter)} - {} BaseSqliteResultRange &operator=(BaseSqliteResultRange &&) = delete; iterator begin() & { return iterator{m_statement}; } diff --git a/src/libs/sqlite/sqliteids.h b/src/libs/sqlite/sqliteids.h index 4816cd67d7c..7e4f5de4baa 100644 --- a/src/libs/sqlite/sqliteids.h +++ b/src/libs/sqlite/sqliteids.h @@ -147,7 +147,7 @@ public: friend void convertToString(String &string, CompoundBasicId id) { convertToString(string, id.id); - convertToString(string, id.contextId); + convertToString(string, id.contextId()); } friend bool compareId(CompoundBasicId first, CompoundBasicId second) diff --git a/src/libs/utils/algorithm.h b/src/libs/utils/algorithm.h index f0b296e8733..e0de6468f7e 100644 --- a/src/libs/utils/algorithm.h +++ b/src/libs/utils/algorithm.h @@ -273,7 +273,7 @@ template class C, // result container type typename Result = std::decay_t>, typename ResultContainer = C> Q_REQUIRED_RESULT decltype(auto) transform(SC &&container, F function); -#ifdef Q_CC_CLANG +#if __cpp_template_template_args < 201611L // "Matching of template template-arguments excludes compatible templates" // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0522r0.html (P0522R0) // in C++17 makes the above match e.g. C=std::vector even though that takes two @@ -899,7 +899,7 @@ Q_REQUIRED_RESULT decltype(auto) transform(SC &&container, F function) return transform(std::forward(container), function); } -#ifdef Q_CC_CLANG +#if __cpp_template_template_args < 201611L template class C, // result container type typename SC, // input container type typename F, // function type diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp index 70dc13d2bd3..8da2ed5eba3 100644 --- a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp +++ b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp @@ -155,8 +155,8 @@ OpenEditorsWindow::OpenEditorsWindow(QWidget *parent) void OpenEditorsWindow::selectAndHide() { - setVisible(false); selectEditor(m_editorView->currentItem()); + setVisible(false); } void OpenEditorsWindow::setVisible(bool visible) diff --git a/src/plugins/coreplugin/plugininstallwizard.cpp b/src/plugins/coreplugin/plugininstallwizard.cpp index bdae4e6395f..796db4843d0 100644 --- a/src/plugins/coreplugin/plugininstallwizard.cpp +++ b/src/plugins/coreplugin/plugininstallwizard.cpp @@ -499,6 +499,10 @@ bool executePluginInstallWizard(const FilePath &archive) if (!install()) return false; + // install() would have failed if the user did not accept the terms and conditions + // so we can safely set them as accepted here. + PluginManager::instance()->setTermsAndConditionsAccepted(data.pluginSpec.get()); + if (data.loadImmediately) { auto spec = data.pluginSpec.release(); spec->setEnabledBySettings(true); diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp index d3d747c1a89..5196eaa8480 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp @@ -474,8 +474,8 @@ QWidget *SpacerField::createWidget(const QString &displayName, JsonFieldPage *pa Q_UNUSED(page) int hspace = QApplication::style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing); int vspace = QApplication::style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing); - int hsize = hspace * m_factor; - int vsize = vspace * m_factor; + int hsize = qMax(0, hspace * m_factor); + int vsize = qMax(0, vspace * m_factor); auto w = new QWidget(); w->setMinimumSize(hsize, vsize); diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp index be41444a3dd..69bb22da00a 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -187,7 +187,9 @@ QString Toolchain::detectionSource() const ToolchainFactory *Toolchain::factory() const { - return ToolchainFactory::factoryForType(typeId()); + ToolchainFactory * const factory = ToolchainFactory::factoryForType(typeId()); + QTC_ASSERT(factory, qDebug() << typeId()); + return factory; } QByteArray Toolchain::id() const @@ -741,12 +743,11 @@ void ToolchainFactory::autoDetectionToMap(Store &data, bool detected) Toolchain *ToolchainFactory::createToolchain(Id toolchainType) { - for (ToolchainFactory *factory : std::as_const(toolchainFactories())) { - if (factory->m_supportedToolchainType == toolchainType) { - if (Toolchain *tc = factory->create()) { - tc->d->m_typeId = toolchainType; - return tc; - } + if (ToolchainFactory * const factory = factoryForType(toolchainType)) { + if (Toolchain * const tc = factory->create()) { + QTC_ASSERT(tc->typeId() == toolchainType, qDebug() << toolchainType.toSetting()); + tc->d->m_typeId = toolchainType; // FIXME: Redundant? + return tc; } } return nullptr;