diff options
author | Eike Ziller <eike.ziller@qt.io> | 2020-02-27 09:41:05 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2020-02-27 09:41:05 +0100 |
commit | 0585ad0f64e26700f3436802c19ff3c0f663396e (patch) | |
tree | 0559ce940a0dacb874e5a46f6dcbbf9885c52f08 /src | |
parent | 4672013595da7f534f7bd1e49817a48771917751 (diff) | |
parent | 56d2dab5feb4062c71fd4480f90bed0cae43bafb (diff) |
Merge remote-tracking branch 'origin/4.12'
Change-Id: I4523ea36332772a310fd462df55683c93c61bb18
Diffstat (limited to 'src')
56 files changed, 320 insertions, 342 deletions
diff --git a/src/libs/advanceddockingsystem/dockoverlay.h b/src/libs/advanceddockingsystem/dockoverlay.h index b7243c29a63..04f9d627510 100644 --- a/src/libs/advanceddockingsystem/dockoverlay.h +++ b/src/libs/advanceddockingsystem/dockoverlay.h @@ -138,13 +138,13 @@ struct DockOverlayCrossPrivate; * You can style the cross icon using the property system. * \code * ADS--DockOverlayCross - { - qproperty-iconFrameColor: palette(highlight); - qproperty-iconBackgroundColor: palette(base); - qproperty-iconOverlayColor: palette(highlight); - qproperty-iconArrowColor: rgb(227, 227, 227); - qproperty-iconShadowColor: rgb(0, 0, 0); - } + * { + * qproperty-iconFrameColor: palette(highlight); + * qproperty-iconBackgroundColor: palette(base); + * qproperty-iconOverlayColor: palette(highlight); + * qproperty-iconArrowColor: rgb(227, 227, 227); + * qproperty-iconShadowColor: rgb(0, 0, 0); + * } * \endcode * Or you can use the iconColors property to pass in AARRGGBB values as * hex string like shown in the example below. diff --git a/src/libs/advanceddockingsystem/dockwidget.cpp b/src/libs/advanceddockingsystem/dockwidget.cpp index 08857994b5e..5b4ff87265d 100644 --- a/src/libs/advanceddockingsystem/dockwidget.cpp +++ b/src/libs/advanceddockingsystem/dockwidget.cpp @@ -154,16 +154,18 @@ namespace ADS void DockWidgetPrivate::updateParentDockArea() { - if (!m_dockArea) { + if (!m_dockArea) + return; + + // we don't need to change the current tab if the current DockWidget is not the one being closed + if (m_dockArea->currentDockWidget() != q) return; - } auto nextDockWidget = m_dockArea->nextOpenDockWidget(q); - if (nextDockWidget) { + if (nextDockWidget) m_dockArea->setCurrentDockWidget(nextDockWidget); - } else { + else m_dockArea->hideAreaWithNoVisibleContent(); - } } void DockWidgetPrivate::setupToolBar() @@ -222,9 +224,8 @@ namespace ADS QScrollArea *scrollAreaWidget = qobject_cast<QScrollArea *>(widget); if (scrollAreaWidget || ForceNoScrollArea == insertMode) { d->m_layout->addWidget(widget); - if (scrollAreaWidget && scrollAreaWidget->viewport()) { + if (scrollAreaWidget && scrollAreaWidget->viewport()) scrollAreaWidget->viewport()->setProperty("dockWidgetContent", true); - } } else { d->setupScrollArea(); d->m_scrollArea->setWidget(widget); @@ -283,9 +284,8 @@ namespace ADS bool DockWidget::isFloating() const { - if (!isInFloatingContainer()) { + if (!isInFloatingContainer()) return false; - } return dockContainer()->topLevelDockWidget() == this; } @@ -293,13 +293,11 @@ namespace ADS bool DockWidget::isInFloatingContainer() const { auto container = dockContainer(); - if (!container) { + if (!container) return false; - } - if (!container->isFloating()) { + if (!container->isFloating()) return false; - } return true; } @@ -324,17 +322,16 @@ namespace ADS // If the toggle view action mode is ActionModeShow, then Open is always // true if the sender is the toggle view action QAction *action = qobject_cast<QAction *>(sender()); - if (action == d->m_toggleViewAction && !d->m_toggleViewAction->isCheckable()) { + if (action == d->m_toggleViewAction && !d->m_toggleViewAction->isCheckable()) open = true; - } + // If the dock widget state is different, then we really need to toggle // the state. If we are in the right state, then we simply make this // dock widget the current dock widget - if (d->m_closed != !open) { + if (d->m_closed != !open) toggleViewInternal(open); - } else if (open && d->m_dockArea) { + else if (open && d->m_dockArea) d->m_dockArea->setCurrentDockWidget(this); - } } void DockWidget::toggleViewInternal(bool open) @@ -353,13 +350,11 @@ namespace ADS //d->m_toggleViewAction->blockSignals(true); d->m_toggleViewAction->setChecked(open); //d->m_toggleViewAction->blockSignals(false); - if (d->m_dockArea) { + if (d->m_dockArea) d->m_dockArea->toggleDockWidgetView(this, open); - } - if (open && topLevelDockWidgetBefore) { + if (open && topLevelDockWidgetBefore) DockWidget::emitTopLevelEventForWidget(topLevelDockWidgetBefore, false); - } // Here we need to call the dockContainer() function again, because if // this dock widget was unassigned before the call to showDockWidget() then @@ -370,13 +365,12 @@ namespace ADS : nullptr; DockWidget::emitTopLevelEventForWidget(topLevelDockWidgetAfter, true); FloatingDockContainer *floatingContainer = dockContainerWidget->floatingWidget(); - if (floatingContainer) { + if (floatingContainer) floatingContainer->updateWindowTitle(); - } - if (!open) { + if (!open) emit closed(); - } + emit viewToggled(open); } @@ -440,24 +434,22 @@ namespace ADS #ifndef QT_NO_TOOLTIP void DockWidget::setTabToolTip(const QString &text) { - if (d->m_tabWidget) { + if (d->m_tabWidget) d->m_tabWidget->setToolTip(text); - } - if (d->m_toggleViewAction) { + + if (d->m_toggleViewAction) d->m_toggleViewAction->setToolTip(text); - } - if (d->m_dockArea) { + + if (d->m_dockArea) d->m_dockArea->markTitleBarMenuOutdated(); //update tabs menu - } } #endif void DockWidget::setIcon(const QIcon &icon) { d->m_tabWidget->setIcon(icon); - if (!d->m_toggleViewAction->isCheckable()) { + if (!d->m_toggleViewAction->isCheckable()) d->m_toggleViewAction->setIcon(icon); - } } QIcon DockWidget::icon() const { return d->m_tabWidget->icon(); } @@ -466,18 +458,16 @@ namespace ADS QToolBar *DockWidget::createDefaultToolBar() { - if (!d->m_toolBar) { + if (!d->m_toolBar) d->setupToolBar(); - } return d->m_toolBar; } void DockWidget::setToolBar(QToolBar *toolBar) { - if (d->m_toolBar) { + if (d->m_toolBar) delete d->m_toolBar; - } d->m_toolBar = toolBar; d->m_layout->insertWidget(0, d->m_toolBar); @@ -487,59 +477,52 @@ namespace ADS void DockWidget::setToolBarStyle(Qt::ToolButtonStyle style, eState state) { - if (StateFloating == state) { + if (StateFloating == state) d->m_toolBarStyleFloating = style; - } else { + else d->m_toolBarStyleDocked = style; - } setToolbarFloatingStyle(isFloating()); } Qt::ToolButtonStyle DockWidget::toolBarStyle(eState state) const { - if (StateFloating == state) { + if (StateFloating == state) return d->m_toolBarStyleFloating; - } else { + else return d->m_toolBarStyleDocked; - } } void DockWidget::setToolBarIconSize(const QSize &iconSize, eState state) { - if (StateFloating == state) { + if (StateFloating == state) d->m_toolBarIconSizeFloating = iconSize; - } else { + else d->m_toolBarIconSizeDocked = iconSize; - } setToolbarFloatingStyle(isFloating()); } QSize DockWidget::toolBarIconSize(eState state) const { - if (StateFloating == state) { + if (StateFloating == state) return d->m_toolBarIconSizeFloating; - } else { + else return d->m_toolBarIconSizeDocked; - } } void DockWidget::setToolbarFloatingStyle(bool floating) { - if (!d->m_toolBar) { + if (!d->m_toolBar) return; - } auto iconSize = floating ? d->m_toolBarIconSizeFloating : d->m_toolBarIconSizeDocked; - if (iconSize != d->m_toolBar->iconSize()) { + if (iconSize != d->m_toolBar->iconSize()) d->m_toolBar->setIconSize(iconSize); - } auto buttonStyle = floating ? d->m_toolBarStyleFloating : d->m_toolBarStyleDocked; - if (buttonStyle != d->m_toolBar->toolButtonStyle()) { + if (buttonStyle != d->m_toolBar->toolButtonStyle()) d->m_toolBar->setToolButtonStyle(buttonStyle); - } } void DockWidget::emitTopLevelEventForWidget(DockWidget *topLevelDockWidget, bool floating) @@ -564,9 +547,9 @@ namespace ADS void DockWidget::setFloating() { - if (isClosed()) { + if (isClosed()) return; - } + d->m_tabWidget->detachDockWidget(); } @@ -584,13 +567,11 @@ namespace ADS bool DockWidget::closeDockWidgetInternal(bool forceClose) { - if (!forceClose) { + if (!forceClose) emit closeRequested(); - } - if (!forceClose && features().testFlag(DockWidget::CustomCloseHandling)) { + if (!forceClose && features().testFlag(DockWidget::CustomCloseHandling)) return false; - } if (features().testFlag(DockWidget::DockWidgetDeleteOnClose)) { // If the dock widget is floating, then we check if we also need to @@ -598,11 +579,10 @@ namespace ADS if (isFloating()) { FloatingDockContainer* floatingWidget = internal::findParent< FloatingDockContainer *>(this); - if (floatingWidget->dockWidgets().count() == 1) { + if (floatingWidget->dockWidgets().count() == 1) floatingWidget->deleteLater(); - } else { + else floatingWidget->hide(); - } } deleteDockWidget(); } else { diff --git a/src/libs/advanceddockingsystem/floatingdockcontainer.cpp b/src/libs/advanceddockingsystem/floatingdockcontainer.cpp index 2fbe879f471..6bf2d9efbdc 100644 --- a/src/libs/advanceddockingsystem/floatingdockcontainer.cpp +++ b/src/libs/advanceddockingsystem/floatingdockcontainer.cpp @@ -112,7 +112,7 @@ namespace ADS if (testConfigFlag(DockManager::FloatingContainerHasWidgetTitle)) { setWindowTitle(currentWidget->windowTitle()); } else { - setWindowTitle(qApp->applicationDisplayName()); + setWindowTitle(QApplication::applicationDisplayName()); } // reflect CurrentWidget's icon if configured to do so, otherwise display application icon as window icon @@ -495,7 +495,7 @@ namespace ADS &FloatingDockContainer::onDockAreaCurrentChanged); d->m_singleDockArea = nullptr; } - d->setWindowTitle(qApp->applicationDisplayName()); + d->setWindowTitle(QApplication::applicationDisplayName()); setWindowIcon(QApplication::windowIcon()); } } @@ -507,7 +507,7 @@ namespace ADS DockWidget *currentWidget = topLevelDockArea->currentDockWidget(); d->reflectCurrentWidget(currentWidget); } else { - d->setWindowTitle(qApp->applicationDisplayName()); + d->setWindowTitle(QApplication::applicationDisplayName()); setWindowIcon(QApplication::windowIcon()); } } diff --git a/src/libs/advanceddockingsystem/floatingdragpreview.cpp b/src/libs/advanceddockingsystem/floatingdragpreview.cpp index 41dadfc9790..b54b6bfbf06 100644 --- a/src/libs/advanceddockingsystem/floatingdragpreview.cpp +++ b/src/libs/advanceddockingsystem/floatingdragpreview.cpp @@ -96,22 +96,19 @@ namespace ADS void FloatingDragPreviewPrivate::updateDropOverlays(const QPoint &globalPosition) { - if (!q->isVisible() || !m_dockManager) { + if (!q->isVisible() || !m_dockManager) return; - } auto containers = m_dockManager->dockContainers(); DockContainerWidget *topContainer = nullptr; for (auto containerWidget : containers) { - if (!containerWidget->isVisible()) { + if (!containerWidget->isVisible()) continue; - } QPoint mappedPosition = containerWidget->mapFromGlobal(globalPosition); if (containerWidget->rect().contains(mappedPosition)) { - if (!topContainer || containerWidget->isInFrontOf(topContainer)) { + if (!topContainer || containerWidget->isInFrontOf(topContainer)) topContainer = containerWidget; - } } } @@ -124,9 +121,9 @@ namespace ADS if (!topContainer) { containerOverlay->hideOverlay(); dockAreaOverlay->hideOverlay(); - if (DockManager::configFlags().testFlag(DockManager::DragPreviewIsDynamic)) { + if (DockManager::configFlags().testFlag(DockManager::DragPreviewIsDynamic)) setHidden(false); - } + return; } @@ -153,9 +150,8 @@ namespace ADS } } else { dockAreaOverlay->hideOverlay(); - if (dockArea == m_contentSourceArea && InvalidDockWidgetArea == containerDropArea) { + if (dockArea == m_contentSourceArea && InvalidDockWidgetArea == containerDropArea) m_dropContainer = nullptr; - } } if (DockManager::configFlags().testFlag(DockManager::DragPreviewIsDynamic)) { @@ -199,7 +195,10 @@ namespace ADS connect(qApp, &QApplication::applicationStateChanged, this, - &FloatingDragPreview::onApplicationStateChanged); // TODO + &FloatingDragPreview::onApplicationStateChanged); + // The focused object will receive key press events and therefore we install + // the event filter on it to receive escape key press for drag canceling + QApplication::focusObject()->installEventFilter(this); } FloatingDragPreview::FloatingDragPreview(DockWidget *content) @@ -212,9 +211,6 @@ namespace ADS d->m_contenSourceContainer = content->dockContainer(); } setWindowTitle(content->windowTitle()); - // We need to install an event filter for the given content - // widget to receive the escape key press - content->dockAreaWidget()->installEventFilter(this); } FloatingDragPreview::FloatingDragPreview(DockAreaWidget *content) @@ -225,10 +221,6 @@ namespace ADS d->m_contentSourceArea = content; d->m_contenSourceContainer = content->dockContainer(); setWindowTitle(content->currentDockWidget()->windowTitle()); - - // We need to install an event filter for the given Content - // widget to receive the escape key press - content->installEventFilter(this); } FloatingDragPreview::~FloatingDragPreview() { delete d; } @@ -277,9 +269,8 @@ namespace ADS floatingWidget = new FloatingDockContainer(dockWidget); } else { DockAreaWidget *dockArea = qobject_cast<DockAreaWidget *>(d->m_content); - if (dockArea->features().testFlag(DockWidget::DockWidgetFloatable)) { + if (dockArea->features().testFlag(DockWidget::DockWidgetFloatable)) floatingWidget = new FloatingDockContainer(dockArea); - } } if (floatingWidget) { @@ -303,14 +294,12 @@ namespace ADS void FloatingDragPreview::paintEvent(QPaintEvent *event) { Q_UNUSED(event) - if (d->m_hidden) { + if (d->m_hidden) return; - } QPainter painter(this); - if (DockManager::configFlags().testFlag(DockManager::DragPreviewShowsContentPixmap)) { + if (DockManager::configFlags().testFlag(DockManager::DragPreviewShowsContentPixmap)) painter.drawPixmap(QPoint(0, 0), d->m_contentPreviewPixmap); - } // If we do not have a window frame then we paint a QRubberBand like frameless window if (!DockManager::configFlags().testFlag(DockManager::DragPreviewHasWindowFrame)) { diff --git a/src/libs/utils/CMakeLists.txt b/src/libs/utils/CMakeLists.txt index a0663ebd8f3..ff7bbe62862 100644 --- a/src/libs/utils/CMakeLists.txt +++ b/src/libs/utils/CMakeLists.txt @@ -1,19 +1,8 @@ -if (IDE_LIBEXEC_PATH AND IDE_BIN_PATH) - get_filename_component(bin_path - "${CMAKE_INSTALL_PREFIX}/${IDE_BIN_PATH}" ABSOLUTE "${CMAKE_BINARY_DIR}") - get_filename_component(libexec_path - "${CMAKE_INSTALL_PREFIX}/${IDE_LIBEXEC_PATH}" ABSOLUTE "${CMAKE_BINARY_DIR}") - file(RELATIVE_PATH RELATIVE_TOOLS_PATH "${bin_path}" "${libexec_path}") -else() - message(WARNING "IDE_LIBEXEC_PATH or IDE_BIN_PATH undefined when calculating tools path") - set(RELATIVE_TOOLS_PATH "") -endif() - add_qtc_library(Utils DEPENDS Qt5::Xml PUBLIC_DEPENDS Qt5::Concurrent Qt5::Core Qt5::Network Qt5::Qml Qt5::Gui Qt5::Widgets DEFINES - "QTC_REL_TOOLS_PATH=\"${RELATIVE_TOOLS_PATH}\"" + "QTC_REL_TOOLS_PATH=\"${RELATIVE_LIBEXEC_PATH}\"" SOURCES ../3rdparty/optional/optional.hpp ../3rdparty/variant/variant.hpp diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp index a9f5aeb2816..42ea48ee97c 100644 --- a/src/plugins/android/androidtoolchain.cpp +++ b/src/plugins/android/androidtoolchain.cpp @@ -228,8 +228,16 @@ ToolChainList AndroidToolChainFactory::autodetectToolChainsForNdk(const ToolChai const Abi &abi = targetItr.value(); const QString target = targetItr.key(); ToolChain *tc = findToolChain(compilerCommand, lang, target, alreadyKnown); + + const QString displayName(QString("Android Clang (%1, %2, NDK %3)") + .arg(ToolChainManager::displayNameOfLanguageId(lang), + AndroidConfig::displayName(abi), + config.ndkVersion(qtVersion).toString())); if (tc) { qCDebug(androidTCLog) << "Tool chain already known" << abi.toString() << lang; + // make sure to update the toolchain with current name format + if (tc->displayName() != displayName) + tc->setDisplayName(displayName); } else { qCDebug(androidTCLog) << "New Clang toolchain found" << abi.toString() << lang; auto atc = new AndroidToolChain(); @@ -239,14 +247,11 @@ ToolChainList AndroidToolChainFactory::autodetectToolChainsForNdk(const ToolChai atc->setTargetAbi(ClangTargets[target]); atc->setPlatformCodeGenFlags({"-target", target}); atc->setPlatformLinkerFlags({"-target", target}); - atc->setDetection(ToolChain::AutoDetection); - atc->setDisplayName(QString("Android Clang (%1, %2, NDK %3)") - .arg(ToolChainManager::displayNameOfLanguageId(lang), - AndroidConfig::displayName(abi), - config.ndkVersion(qtVersion).toString())); + atc->setDisplayName(displayName); atc->resetToolChain(compilerCommand); tc = atc; } + tc->setDetection(ToolChain::AutoDetection); result << tc; ++targetItr; } diff --git a/src/plugins/autotest/autotestplugin.cpp b/src/plugins/autotest/autotestplugin.cpp index 3dfaa4fad51..df73f237c6b 100644 --- a/src/plugins/autotest/autotestplugin.cpp +++ b/src/plugins/autotest/autotestplugin.cpp @@ -236,7 +236,7 @@ void AutotestPluginPrivate::initializeMenuEntries() this, &AutotestPlugin::updateMenuItemsEnabledState); connect(BuildManager::instance(), &BuildManager::buildQueueFinished, this, &AutotestPlugin::updateMenuItemsEnabledState); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &AutotestPlugin::updateMenuItemsEnabledState); connect(TestTreeModel::instance(), &TestTreeModel::testTreeModelChanged, this, &AutotestPlugin::updateMenuItemsEnabledState); diff --git a/src/plugins/autotest/testrunconfiguration.h b/src/plugins/autotest/testrunconfiguration.h index 1c86f663591..df43b9dc86f 100644 --- a/src/plugins/autotest/testrunconfiguration.h +++ b/src/plugins/autotest/testrunconfiguration.h @@ -59,7 +59,7 @@ public: if (auto debugAspect = aspect<Debugger::DebuggerRunConfigurationAspect>()) { debugAspect->setUseQmlDebugger(enableQuick); - ProjectExplorer::ProjectExplorerPlugin::instance()->updateRunActions(); + ProjectExplorer::ProjectExplorerPlugin::updateRunActions(); } m_testConfig = config; } diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp index 09f5ee95075..592f7c8795c 100644 --- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp +++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp @@ -215,8 +215,11 @@ void ClangCompletionAssistProcessor::handleAvailableCompletions(const CodeComple return; } - if (!m_fallbackToNormalCompletion) + if (!m_fallbackToNormalCompletion) { + // We must report back to the code assistant under all circumstances + setAsyncProposalAvailable(nullptr); return; + } // else: Proceed with a normal completion in case: // 1) it was not a function call, but e.g. a function declaration like "void f(" // 2) '{' meant not a constructor call. diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp index b1684788cf9..ba7747d9a08 100644 --- a/src/plugins/clangtools/clangtool.cpp +++ b/src/plugins/clangtools/clangtool.cpp @@ -602,7 +602,7 @@ ClangTool::ClangTool() update(); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &ClangTool::update); connect(CppModelManager::instance(), &CppModelManager::projectPartsUpdated, this, &ClangTool::update); diff --git a/src/plugins/cppcheck/cppcheckplugin.cpp b/src/plugins/cppcheck/cppcheckplugin.cpp index 02488c696c9..e38e367daef 100644 --- a/src/plugins/cppcheck/cppcheckplugin.cpp +++ b/src/plugins/cppcheck/cppcheckplugin.cpp @@ -176,7 +176,7 @@ bool CppcheckPlugin::initialize(const QStringList &arguments, QString *errorStri } using ProjectExplorer::ProjectExplorerPlugin; - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, d.get(), &CppcheckPluginPrivate::updateManualRunAction); d->updateManualRunAction(); diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp index 5fdf0015e1b..73c8a2ade8b 100644 --- a/src/plugins/debugger/debuggerplugin.cpp +++ b/src/plugins/debugger/debuggerplugin.cpp @@ -1186,7 +1186,7 @@ DebuggerPluginPrivate::DebuggerPluginPrivate(const QStringList &arguments) this, &DebuggerPluginPrivate::writeSettings); // ProjectExplorer - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &DebuggerPluginPrivate::updatePresetState); // EditorManager diff --git a/src/plugins/git/branchview.cpp b/src/plugins/git/branchview.cpp index 3cac8265f18..87c4e097537 100644 --- a/src/plugins/git/branchview.cpp +++ b/src/plugins/git/branchview.cpp @@ -82,7 +82,7 @@ BranchView::BranchView() : m_refreshButton(new QToolButton(this)), m_repositoryLabel(new Utils::ElidingLabel(this)), m_branchView(new Utils::NavigationTreeView(this)), - m_model(new BranchModel(GitPlugin::client(), this)), + m_model(new BranchModel(GitClient::instance(), this)), m_filterModel(new BranchFilterModel(this)) { m_addButton->setIcon(Utils::Icons::PLUS_TOOLBAR.icon()); @@ -122,7 +122,7 @@ BranchView::BranchView() : this, &BranchView::setIncludeOldEntries); m_includeTagsAction->setCheckable(true); m_includeTagsAction->setChecked( - GitPlugin::client()->settings().boolValue(GitSettings::showTagsKey)); + GitClient::instance()->settings().boolValue(GitSettings::showTagsKey)); connect(m_includeTagsAction, &QAction::toggled, this, &BranchView::setIncludeTags); @@ -214,12 +214,12 @@ void BranchView::slotCustomContextMenu(const QPoint &point) const Utils::optional<QString> remote = m_model->remoteName(index); if (remote.has_value()) { contextMenu.addAction(tr("&Fetch"), this, [this, &remote]() { - GitPlugin::client()->fetch(m_repository, *remote); + GitClient::instance()->fetch(m_repository, *remote); }); contextMenu.addSeparator(); if (!remote->isEmpty()) { contextMenu.addAction(tr("Remove &Stale Branches"), this, [this, &remote]() { - GitPlugin::client()->removeStaleRemoteBranches(m_repository, *remote); + GitClient::instance()->removeStaleRemoteBranches(m_repository, *remote); }); contextMenu.addSeparator(); } @@ -238,7 +238,7 @@ void BranchView::slotCustomContextMenu(const QPoint &point) contextMenu.addAction(tr("&Diff"), this, [this] { const QString fullName = m_model->fullName(selectedIndex(), true); if (!fullName.isEmpty()) - GitPlugin::client()->diffBranch(m_repository, fullName); + GitClient::instance()->diffBranch(m_repository, fullName); }); contextMenu.addAction(tr("&Log"), this, [this] { log(selectedIndex()); }); contextMenu.addAction(tr("Reflo&g"), this, [this] { reflog(selectedIndex()); }); @@ -289,7 +289,7 @@ void BranchView::setIncludeOldEntries(bool filter) void BranchView::setIncludeTags(bool includeTags) { - GitPlugin::client()->settings().setValue(GitSettings::showTagsKey, includeTags); + GitClient::instance()->settings().setValue(GitSettings::showTagsKey, includeTags); refreshCurrentRepository(); } @@ -365,7 +365,7 @@ bool BranchView::checkout() ' ' + nextBranch + "-AutoStash "; BranchCheckoutDialog branchCheckoutDialog(this, currentBranch, nextBranch); - GitClient *client = GitPlugin::client(); + GitClient *client = GitClient::instance(); if (client->gitStatus(m_repository, StatusMode(NoUntracked | NoSubmodules)) != GitClient::StatusChanged) branchCheckoutDialog.foundNoLocalChanges(); @@ -500,7 +500,7 @@ bool BranchView::reset(const QByteArray &resetType) if (QMessageBox::question(this, tr("Git Reset"), tr("Reset branch \"%1\" to \"%2\"?") .arg(currentName).arg(branchName), QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) { - GitPlugin::client()->reset(m_repository, QLatin1String("--" + resetType), branchName); + GitClient::instance()->reset(m_repository, QLatin1String("--" + resetType), branchName); return true; } return false; @@ -512,7 +512,7 @@ bool BranchView::isFastForwardMerge() QTC_CHECK(selected != m_model->currentBranch()); const QString branch = m_model->fullName(selected, true); - return GitPlugin::client()->isFastForwardMerge(m_repository, branch); + return GitClient::instance()->isFastForwardMerge(m_repository, branch); } bool BranchView::merge(bool allowFastForward) @@ -523,7 +523,7 @@ bool BranchView::merge(bool allowFastForward) QTC_CHECK(selected != m_model->currentBranch()); const QString branch = m_model->fullName(selected, true); - GitClient *client = GitPlugin::client(); + GitClient *client = GitClient::instance(); if (client->beginStashScope(m_repository, "merge", AllowUnstashed)) return client->synchronousMerge(m_repository, branch, allowFastForward); @@ -538,7 +538,7 @@ void BranchView::rebase() QTC_CHECK(selected != m_model->currentBranch()); const QString baseBranch = m_model->fullName(selected, true); - GitClient *client = GitPlugin::client(); + GitClient *client = GitClient::instance(); if (client->beginStashScope(m_repository, "rebase")) client->rebase(m_repository, baseBranch); } @@ -551,21 +551,21 @@ bool BranchView::cherryPick() QTC_CHECK(selected != m_model->currentBranch()); const QString branch = m_model->fullName(selected, true); - return GitPlugin::client()->synchronousCherryPick(m_repository, branch); + return GitClient::instance()->synchronousCherryPick(m_repository, branch); } void BranchView::log(const QModelIndex &idx) { const QString branchName = m_model->fullName(idx, true); if (!branchName.isEmpty()) - GitPlugin::client()->log(m_repository, QString(), false, {branchName}); + GitClient::instance()->log(m_repository, QString(), false, {branchName}); } void BranchView::reflog(const QModelIndex &idx) { const QString branchName = m_model->fullName(idx, true); if (!branchName.isEmpty()) - GitPlugin::client()->reflog(m_repository, branchName); + GitClient::instance()->reflog(m_repository, branchName); } void BranchView::push() @@ -581,7 +581,7 @@ void BranchView::push() const QString remoteBranch = fullTargetName.mid(pos + 1); const QStringList pushArgs = {remoteName, localBranch + ':' + remoteBranch}; - GitPlugin::client()->push(m_repository, pushArgs); + GitClient::instance()->push(m_repository, pushArgs); } BranchViewFactory::BranchViewFactory() diff --git a/src/plugins/git/changeselectiondialog.cpp b/src/plugins/git/changeselectiondialog.cpp index c1cc46ce984..52f8c4762fa 100644 --- a/src/plugins/git/changeselectiondialog.cpp +++ b/src/plugins/git/changeselectiondialog.cpp @@ -25,7 +25,6 @@ #include "changeselectiondialog.h" #include "logchangedialog.h" -#include "gitplugin.h" #include "gitclient.h" #include "ui_changeselectiondialog.h" @@ -57,12 +56,12 @@ ChangeSelectionDialog::ChangeSelectionDialog(const QString &workingDirectory, Co QWidget *parent) : QDialog(parent), m_ui(new Ui::ChangeSelectionDialog) { - m_gitExecutable = GitPlugin::client()->vcsBinary(); + m_gitExecutable = GitClient::instance()->vcsBinary(); m_ui->setupUi(this); m_ui->workingDirectoryChooser->setExpectedKind(PathChooser::ExistingDirectory); m_ui->workingDirectoryChooser->setPromptDialogTitle(tr("Select Git Directory")); m_ui->workingDirectoryChooser->setPath(workingDirectory); - m_gitEnvironment = GitPlugin::client()->processEnvironment(); + m_gitEnvironment = GitClient::instance()->processEnvironment(); m_ui->changeNumberEdit->setFocus(); m_ui->changeNumberEdit->selectAll(); @@ -203,7 +202,7 @@ void ChangeSelectionDialog::recalculateCompletion() if (workingDir.isEmpty()) return; - GitClient *client = GitPlugin::client(); + GitClient *client = GitClient::instance(); VcsBase::VcsCommand *command = client->asyncForEachRefCmd( workingDir, {"--format=%(refname:short)"}); connect(this, &QObject::destroyed, command, &VcsBase::VcsCommand::abort); diff --git a/src/plugins/git/gerrit/branchcombobox.cpp b/src/plugins/git/gerrit/branchcombobox.cpp index 6cc866ce3f1..bc7aa282df2 100644 --- a/src/plugins/git/gerrit/branchcombobox.cpp +++ b/src/plugins/git/gerrit/branchcombobox.cpp @@ -24,7 +24,6 @@ ****************************************************************************/ #include "branchcombobox.h" -#include "../gitplugin.h" #include "../gitclient.h" using namespace Git::Internal; @@ -36,7 +35,7 @@ BranchComboBox::BranchComboBox(QWidget *parent) : QComboBox(parent) void BranchComboBox::init(const QString &repository) { m_repository = repository; - QString currentBranch = GitPlugin::client()->synchronousCurrentLocalBranch(repository); + QString currentBranch = GitClient::instance()->synchronousCurrentLocalBranch(repository); if (currentBranch.isEmpty()) { m_detached = true; currentBranch = "HEAD"; @@ -44,7 +43,7 @@ void BranchComboBox::init(const QString &repository) } QString output; const QString branchPrefix("refs/heads/"); - if (!GitPlugin::client()->synchronousForEachRefCmd( + if (!GitClient::instance()->synchronousForEachRefCmd( m_repository, {"--format=%(refname)", branchPrefix}, &output)) { return; } diff --git a/src/plugins/git/gerrit/gerritmodel.cpp b/src/plugins/git/gerrit/gerritmodel.cpp index a9be6358ccb..c5e346aaa6e 100644 --- a/src/plugins/git/gerrit/gerritmodel.cpp +++ b/src/plugins/git/gerrit/gerritmodel.cpp @@ -24,7 +24,6 @@ ****************************************************************************/ #include "gerritmodel.h" -#include "../gitplugin.h" #include "../gitclient.h" #include <coreplugin/progressmanager/progressmanager.h> @@ -295,7 +294,7 @@ QueryContext::QueryContext(const QString &query, connect(&m_process, &QProcess::errorOccurred, this, &QueryContext::processError); connect(&m_watcher, &QFutureWatcherBase::canceled, this, &QueryContext::terminate); m_watcher.setFuture(m_progress.future()); - m_process.setProcessEnvironment(Git::Internal::GitPlugin::client()->processEnvironment()); + m_process.setProcessEnvironment(Git::Internal::GitClient::instance()->processEnvironment()); m_progress.setProgressRange(0, 1); m_timer.setInterval(timeOutMS); diff --git a/src/plugins/git/gerrit/gerritplugin.cpp b/src/plugins/git/gerrit/gerritplugin.cpp index 656f1e34f70..85d414b9b9a 100644 --- a/src/plugins/git/gerrit/gerritplugin.cpp +++ b/src/plugins/git/gerrit/gerritplugin.cpp @@ -148,7 +148,7 @@ FetchContext::FetchContext(const QSharedPointer<GerritChange> &change, connect(&m_watcher, &QFutureWatcher<void>::canceled, this, &FetchContext::terminate); m_watcher.setFuture(m_progress.future()); m_process.setWorkingDirectory(repository); - m_process.setProcessEnvironment(GitPlugin::client()->processEnvironment()); + m_process.setProcessEnvironment(GitClient::instance()->processEnvironment()); m_process.closeWriteChannel(); } @@ -240,7 +240,7 @@ void FetchContext::show() { const QString title = QString::number(m_change->number) + '/' + QString::number(m_change->currentPatchSet.patchSetNumber); - GitPlugin::client()->show(m_repository, "FETCH_HEAD", title); + GitClient::instance()->show(m_repository, "FETCH_HEAD", title); } void FetchContext::cherryPick() @@ -248,12 +248,12 @@ void FetchContext::cherryPick() // Point user to errors. VcsBase::VcsOutputWindow::instance()->popup(IOutputPane::ModeSwitch | IOutputPane::WithFocus); - GitPlugin::client()->synchronousCherryPick(m_repository, "FETCH_HEAD"); + GitClient::instance()->synchronousCherryPick(m_repository, "FETCH_HEAD"); } void FetchContext::checkout() { - GitPlugin::client()->checkout(m_repository, "FETCH_HEAD"); + GitClient::instance()->checkout(m_repository, "FETCH_HEAD"); } void FetchContext::terminate() @@ -328,7 +328,7 @@ void GerritPlugin::push(const QString &topLevel) dialog.storeTopic(); m_reviewers = dialog.reviewers(); - GitPlugin::client()->push(topLevel, {dialog.selectedRemoteName(), dialog.pushTarget()}); + GitClient::instance()->push(topLevel, {dialog.selectedRemoteName(), dialog.pushTarget()}); } static QString currentRepository() @@ -375,19 +375,19 @@ void GerritPlugin::push() Utils::FilePath GerritPlugin::gitBinDirectory() { - return GitPlugin::client()->gitBinDirectory(); + return GitClient::instance()->gitBinDirectory(); } // Find the branch of a repository. QString GerritPlugin::branch(const QString &repository) { - return GitPlugin::client()->synchronousCurrentLocalBranch(repository); + return GitClient::instance()->synchronousCurrentLocalBranch(repository); } void GerritPlugin::fetch(const QSharedPointer<GerritChange> &change, int mode) { // Locate git. - const Utils::FilePath git = GitPlugin::client()->vcsBinary(); + const Utils::FilePath git = GitClient::instance()->vcsBinary(); if (git.isEmpty()) { VcsBase::VcsOutputWindow::appendError(tr("Git is not available.")); return; @@ -400,7 +400,7 @@ void GerritPlugin::fetch(const QSharedPointer<GerritChange> &change, int mode) if (!repository.isEmpty()) { // Check if remote from a working dir is the same as remote from patch - QMap<QString, QString> remotesList = GitPlugin::client()->synchronousRemotesList(repository); + QMap<QString, QString> remotesList = GitClient::instance()->synchronousRemotesList(repository); if (!remotesList.isEmpty()) { const QStringList remotes = remotesList.values(); for (QString remote : remotes) { @@ -413,7 +413,7 @@ void GerritPlugin::fetch(const QSharedPointer<GerritChange> &change, int mode) } if (!verifiedRepository) { - const SubmoduleDataMap submodules = GitPlugin::client()->submoduleList(repository); + const SubmoduleDataMap submodules = GitClient::instance()->submoduleList(repository); for (const SubmoduleData &submoduleData : submodules) { QString remote = submoduleData.url; if (remote.endsWith(".git")) diff --git a/src/plugins/git/gerrit/gerritpushdialog.cpp b/src/plugins/git/gerrit/gerritpushdialog.cpp index 08c280fc90f..ddd45134f79 100644 --- a/src/plugins/git/gerrit/gerritpushdialog.cpp +++ b/src/plugins/git/gerrit/gerritpushdialog.cpp @@ -27,7 +27,6 @@ #include "ui_gerritpushdialog.h" #include "branchcombobox.h" -#include "../gitplugin.h" #include "../gitclient.h" #include "../gitconstants.h" @@ -70,7 +69,7 @@ QString GerritPushDialog::determineRemoteBranch(const QString &localBranch) QString output; QString error; - if (!GitPlugin::client()->synchronousBranchCmd( + if (!GitClient::instance()->synchronousBranchCmd( m_workingDir, {"-r", "--contains", earliestCommit + '^'}, &output, &error)) { return QString(); } @@ -79,7 +78,7 @@ QString GerritPushDialog::determineRemoteBranch(const QString &localBranch) QString remoteTrackingBranch; if (localBranch != "HEAD") - remoteTrackingBranch = GitPlugin::client()->synchronousTrackingBranch(m_workingDir, localBranch); + remoteTrackingBranch = GitClient::instance()->synchronousTrackingBranch(m_workingDir, localBranch); QString remoteBranch; for (const QString &reference : refs) { @@ -103,7 +102,7 @@ void GerritPushDialog::initRemoteBranches() const QString head = "/HEAD"; QString remotesPrefix("refs/remotes/"); - if (!GitPlugin::client()->synchronousForEachRefCmd( + if (!GitClient::instance()->synchronousForEachRefCmd( m_workingDir, {"--format=%(refname)\t%(committerdate:raw)", remotesPrefix}, &output)) { return; } @@ -186,8 +185,8 @@ QString GerritPushDialog::calculateChangeRange(const QString &branch) QString number; QString error; - GitPlugin::client()->synchronousRevListCmd(m_workingDir, { remote + ".." + branch, "--count" }, - &number, &error); + GitClient::instance()->synchronousRevListCmd( + m_workingDir, { remote + ".." + branch, "--count" }, &number, &error); number.chop(1); return number; @@ -303,8 +302,8 @@ QString GerritPushDialog::pushTarget() const void GerritPushDialog::storeTopic() { const QString branch = m_ui->localBranchComboBox->currentText(); - GitPlugin::client()->setConfigValue(m_workingDir, QString("branch.%1.topic").arg(branch), - selectedTopic()); + GitClient::instance()->setConfigValue( + m_workingDir, QString("branch.%1.topic").arg(branch), selectedTopic()); } void GerritPushDialog::setRemoteBranches(bool includeOld) @@ -316,7 +315,7 @@ void GerritPushDialog::setRemoteBranches(bool includeOld) const QString remoteName = selectedRemoteName(); if (!m_remoteBranches.contains(remoteName)) { const QStringList remoteBranches = - GitPlugin::client()->synchronousRepositoryBranches(remoteName, m_workingDir); + GitClient::instance()->synchronousRepositoryBranches(remoteName, m_workingDir); for (const QString &branch : remoteBranches) m_remoteBranches.insertMulti(remoteName, qMakePair(branch, QDate())); if (remoteBranches.isEmpty()) { @@ -354,7 +353,7 @@ void GerritPushDialog::updateCommits(int index) { const QString branch = m_ui->localBranchComboBox->itemText(index); m_hasLocalCommits = m_ui->commitView->init(m_workingDir, branch, LogChangeWidget::Silent); - QString topic = GitPlugin::client()->readConfigValue( + QString topic = GitClient::instance()->readConfigValue( m_workingDir, QString("branch.%1.topic").arg(branch)); if (!topic.isEmpty()) m_ui->topicLineEdit->setText(topic); diff --git a/src/plugins/git/gerrit/gerritremotechooser.cpp b/src/plugins/git/gerrit/gerritremotechooser.cpp index 8e5e7cd8828..6b94bcd238f 100644 --- a/src/plugins/git/gerrit/gerritremotechooser.cpp +++ b/src/plugins/git/gerrit/gerritremotechooser.cpp @@ -27,7 +27,6 @@ #include "gerritparameters.h" #include "gerritserver.h" #include "../gitclient.h" -#include "../gitplugin.h" #include <utils/qtcassert.h> #include <utils/utilsicons.h> @@ -104,7 +103,7 @@ bool GerritRemoteChooser::updateRemotes(bool forceReload) m_remotes.clear(); QString errorMessage; // Mute errors. We'll just fallback to the defaults const QMap<QString, QString> remotesList = - Git::Internal::GitPlugin::client()->synchronousRemotesList(m_repository, &errorMessage); + Git::Internal::GitClient::instance()->synchronousRemotesList(m_repository, &errorMessage); for (auto mapIt = remotesList.cbegin(), end = remotesList.cend(); mapIt != end; ++mapIt) { GerritServer server; if (!server.fillFromRemote(mapIt.value(), *m_parameters, forceReload)) diff --git a/src/plugins/git/gerrit/gerritserver.cpp b/src/plugins/git/gerrit/gerritserver.cpp index f2fae53d517..a0a6a650469 100644 --- a/src/plugins/git/gerrit/gerritserver.cpp +++ b/src/plugins/git/gerrit/gerritserver.cpp @@ -241,7 +241,7 @@ QStringList GerritServer::curlArguments() const int GerritServer::testConnection() { - static GitClient *const client = GitPlugin::client(); + static GitClient *const client = GitClient::instance(); const QStringList arguments = curlArguments() << (url(RestUrl) + accountUrlC); const SynchronousProcessResponse resp = client->vcsFullySynchronousExec( QString(), {curlBinary, arguments}, @@ -333,7 +333,7 @@ bool GerritServer::resolveRoot() void GerritServer::resolveVersion(const GerritParameters &p, bool forceReload) { - static GitClient *const client = GitPlugin::client(); + static GitClient *const client = GitClient::instance(); QSettings *settings = Core::ICore::settings(); const QString fullVersionKey = "Gerrit/" + host + '/' + versionKey; version = settings->value(fullVersionKey).toString(); diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp index 005e0e66f86..8608d947e1c 100644 --- a/src/plugins/git/gitclient.cpp +++ b/src/plugins/git/gitclient.cpp @@ -106,6 +106,8 @@ using namespace VcsBase; namespace Git { namespace Internal { +static GitClient *m_instance = nullptr; + // Suppress git diff warnings about "LF will be replaced by CRLF..." on Windows. static unsigned diffExecutionFlags() { @@ -300,7 +302,7 @@ void GitDiffEditorController::updateBranchList() return; const QString workingDirectory = baseDirectory(); - VcsCommand *command = GitPlugin::client()->vcsExec( + VcsCommand *command = m_instance->vcsExec( workingDirectory, {"branch", noColorOption, "-a", "--contains", revision}, nullptr, false, 0, workingDirectory); connect(command, &VcsCommand::stdOutText, this, [this](const QString &text) { @@ -375,7 +377,7 @@ QStringList GitDiffEditorController::addHeadWhenCommandInProgress() const // This is workaround for lack of support for merge commits and resolving conflicts, // we compare the current state of working tree to the HEAD of current branch // instead of showing unsupported combined diff format. - GitClient::CommandInProgress commandInProgress = GitPlugin::client()->checkCommandInProgress(workingDirectory()); + GitClient::CommandInProgress commandInProgress = m_instance->checkCommandInProgress(workingDirectory()); if (commandInProgress != GitClient::NoCommand) return {HEAD}; return QStringList(); @@ -478,7 +480,7 @@ public: setReloader([this] { m_state = GettingDescription; const QStringList args = {"show", "-s", noColorOption, showFormatC, m_id}; - runCommand({args}, GitPlugin::client()->encoding(workingDirectory(), "i18n.commitEncoding")); + runCommand({args}, m_instance->encoding(workingDirectory(), "i18n.commitEncoding")); setStartupFile(VcsBase::source(this->document())); }); } @@ -495,7 +497,7 @@ void ShowController::processCommandOutput(const QString &output) { QTC_ASSERT(m_state != Idle, return); if (m_state == GettingDescription) { - setDescription(GitPlugin::client()->extendedShowDescription(workingDirectory(), output)); + setDescription(m_instance->extendedShowDescription(workingDirectory(), output)); // stage 2 m_state = GettingDiff; const QStringList args = {"show", "--format=format:", // omit header, already generated @@ -669,12 +671,11 @@ private: { // If interactive rebase editor window is closed, plugin is terminated // but referenced here when the command ends - GitClient *client = GitPlugin::client(); if (m_commit.isEmpty() && m_files.isEmpty()) { - if (client->checkCommandInProgress(m_workingDirectory) == GitClient::NoCommand) - client->endStashScope(m_workingDirectory); + if (m_instance->checkCommandInProgress(m_workingDirectory) == GitClient::NoCommand) + m_instance->endStashScope(m_workingDirectory); } else { - client->handleMergeConflicts(m_workingDirectory, m_commit, m_files, m_abortCommand); + m_instance->handleMergeConflicts(m_workingDirectory, m_commit, m_files, m_abortCommand); } } @@ -763,11 +764,17 @@ GitClient::GitClient(GitSettings *settings) : VcsBase::VcsBaseClientImpl(setting m_cachedGitVersion(0), m_disableEditor(false) { + m_instance = this; m_gitQtcEditor = QString::fromLatin1("\"%1\" -client -block -pid %2") .arg(QCoreApplication::applicationFilePath()) .arg(QCoreApplication::applicationPid()); } +GitClient *GitClient::instance() +{ + return m_instance; +} + QString GitClient::findRepositoryForDirectory(const QString &directory) const { if (directory.isEmpty() || directory.endsWith("/.git") || directory.contains("/.git/")) @@ -3476,8 +3483,8 @@ bool GitClient::StashInfo::init(const QString &workingDirectory, const QString & m_pushAction = pushAction; QString errorMessage; QString statusOutput; - switch (GitPlugin::client()->gitStatus(m_workingDir, StatusMode(NoUntracked | NoSubmodules), - &statusOutput, &errorMessage)) { + switch (m_instance->gitStatus(m_workingDir, StatusMode(NoUntracked | NoSubmodules), + &statusOutput, &errorMessage)) { case GitClient::StatusChanged: if (m_flags & NoPrompt) executeStash(command, &errorMessage); @@ -3529,14 +3536,14 @@ void GitClient::StashInfo::stashPrompt(const QString &command, const QString &st msgBox.exec(); if (msgBox.clickedButton() == discardButton) { - m_stashResult = GitPlugin::client()->synchronousReset(m_workingDir, QStringList(), errorMessage) ? + m_stashResult = m_instance->synchronousReset(m_workingDir, QStringList(), errorMessage) ? StashUnchanged : StashFailed; } else if (msgBox.clickedButton() == ignoreButton) { // At your own risk, so. m_stashResult = NotStashed; } else if (msgBox.clickedButton() == cancelButton) { m_stashResult = StashCanceled; } else if (msgBox.clickedButton() == stashButton) { - const bool result = GitPlugin::client()->executeSynchronousStash( + const bool result = m_instance->executeSynchronousStash( m_workingDir, creatorStashMessage(command), false, errorMessage); m_stashResult = result ? StashUnchanged : StashFailed; } else if (msgBox.clickedButton() == stashAndPopButton) { @@ -3547,7 +3554,7 @@ void GitClient::StashInfo::stashPrompt(const QString &command, const QString &st void GitClient::StashInfo::executeStash(const QString &command, QString *errorMessage) { m_message = creatorStashMessage(command); - if (!GitPlugin::client()->executeSynchronousStash(m_workingDir, m_message, false, errorMessage)) + if (!m_instance->executeSynchronousStash(m_workingDir, m_message, false, errorMessage)) m_stashResult = StashFailed; else m_stashResult = Stashed; @@ -3570,12 +3577,12 @@ void GitClient::StashInfo::end() { if (m_stashResult == Stashed) { QString stashName; - if (GitPlugin::client()->stashNameFromMessage(m_workingDir, m_message, &stashName)) - GitPlugin::client()->stashPop(m_workingDir, stashName); + if (m_instance->stashNameFromMessage(m_workingDir, m_message, &stashName)) + m_instance->stashPop(m_workingDir, stashName); } if (m_pushAction == NormalPush) - GitPlugin::client()->push(m_workingDir); + m_instance->push(m_workingDir); else if (m_pushAction == PushToGerrit) GitPlugin::gerritPush(m_workingDir); @@ -3589,6 +3596,55 @@ GitRemote::GitRemote(const QString &location) : Core::IVersionControl::RepoUrl(l isValid = QDir(path).exists() || QDir(path + ".git").exists(); } +void GitClient::addChangeActions(QMenu *menu, const QString &workingDir, const QString &change) +{ + menu->addAction(tr("Cherr&y-Pick Change %1").arg(change), [workingDir, change] { + m_instance->synchronousCherryPick(workingDir, change); + }); + menu->addAction(tr("Re&vert Change %1").arg(change), [workingDir, change] { + m_instance->synchronousRevert(workingDir, change); + }); + menu->addAction(tr("C&heckout Change %1").arg(change), [workingDir, change] { + m_instance->checkout(workingDir, change); + }); + connect(menu->addAction(tr("&Interactive Rebase from Change %1...").arg(change)), + &QAction::triggered, [workingDir, change] { + GitPlugin::startRebaseFromCommit(workingDir, change); + }); + menu->addAction(tr("&Log for Change %1").arg(change), [workingDir, change] { + m_instance->log(workingDir, QString(), false, {change}); + }); + menu->addAction(tr("Add &Tag for Change %1...").arg(change), [workingDir, change] { + QString output; + QString errorMessage; + m_instance->synchronousTagCmd(workingDir, QStringList(), + &output, &errorMessage); + + const QStringList tags = output.split('\n'); + BranchAddDialog dialog(tags, BranchAddDialog::Type::AddTag, Core::ICore::dialogParent()); + + if (dialog.exec() == QDialog::Rejected) + return; + + m_instance->synchronousTagCmd(workingDir, + {dialog.branchName(), change}, + &output, &errorMessage); + VcsOutputWindow::append(output); + if (!errorMessage.isEmpty()) + VcsOutputWindow::append(errorMessage, VcsOutputWindow::MessageStyle::Error); + }); + + auto resetChange = [workingDir, change](const QByteArray &resetType) { + m_instance->reset( + workingDir, QLatin1String("--" + resetType), change); + }; + auto resetMenu = new QMenu(tr("&Reset to Change %1").arg(change), menu); + resetMenu->addAction(tr("&Hard"), std::bind(resetChange, "hard")); + resetMenu->addAction(tr("&Mixed"), std::bind(resetChange, "mixed")); + resetMenu->addAction(tr("&Soft"), std::bind(resetChange, "soft")); + menu->addMenu(resetMenu); +} + } // namespace Internal } // namespace Git diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h index 447238888aa..c159fb31375 100644 --- a/src/plugins/git/gitclient.h +++ b/src/plugins/git/gitclient.h @@ -139,6 +139,7 @@ public: }; explicit GitClient(GitSettings *settings); + static GitClient *instance(); Utils::FilePath vcsBinary() const override; unsigned gitVersion(QString *errorMessage = nullptr) const; @@ -352,6 +353,9 @@ public: VcsBase::VcsCommand *asyncUpstreamStatus(const QString &workingDirectory, const QString &branch, const QString &upstream); + + static void addChangeActions(QMenu *menu, const QString &workingDir, const QString &change); + private: void finishSubmoduleUpdate(); void chunkActionsRequested(QMenu *menu, int fileIndex, int chunkIndex, diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp index 47546d0df61..36463955963 100644 --- a/src/plugins/git/giteditor.cpp +++ b/src/plugins/git/giteditor.cpp @@ -152,7 +152,7 @@ static QString sanitizeBlameOutput(const QString &b) if (b.isEmpty()) return b; - const bool omitDate = GitPlugin::client()->settings().boolValue( + const bool omitDate = GitClient::instance()->settings().boolValue( GitSettings::omitAnnotationDateKey); const QChar space(' '); const int parenPos = b.indexOf(')'); @@ -216,12 +216,6 @@ void GitEditorWidget::setPlainText(const QString &text) textDocument()->setPlainText(modText); } -void GitEditorWidget::resetChange(const QByteArray &resetType) -{ - GitPlugin::client()->reset( - sourceWorkingDirectory(), QLatin1String("--" + resetType), m_currentChange); -} - void GitEditorWidget::applyDiffChunk(const DiffChunk& chunk, bool revert) { Utils::TemporaryFile patchFile("git-apply-chunk"); @@ -237,7 +231,7 @@ void GitEditorWidget::applyDiffChunk(const DiffChunk& chunk, bool revert) if (revert) args << "--reverse"; QString errorMessage; - if (GitPlugin::client()->synchronousApplyPatch(baseDir, patchFile.fileName(), &errorMessage, args)) { + if (GitClient::instance()->synchronousApplyPatch(baseDir, patchFile.fileName(), &errorMessage, args)) { if (errorMessage.isEmpty()) VcsOutputWindow::append(tr("Chunk successfully staged")); else @@ -286,14 +280,14 @@ void GitEditorWidget::aboutToOpen(const QString &fileName, const QString &realFi const QString gitPath = fi.absolutePath(); setSource(gitPath); textDocument()->setCodec( - GitPlugin::client()->encoding(gitPath, "i18n.commitEncoding")); + GitClient::instance()->encoding(gitPath, "i18n.commitEncoding")); } } QString GitEditorWidget::decorateVersion(const QString &revision) const { // Format verbose, SHA1 being first token - return GitPlugin::client()->synchronousShortDescription(sourceWorkingDirectory(), revision); + return GitClient::instance()->synchronousShortDescription(sourceWorkingDirectory(), revision); } QStringList GitEditorWidget::annotationPreviousVersions(const QString &revision) const @@ -301,8 +295,8 @@ QStringList GitEditorWidget::annotationPreviousVersions(const QString &revision) QStringList revisions; QString errorMessage; // Get the SHA1's of the file. - if (!GitPlugin::client()->synchronousParentRevisions(sourceWorkingDirectory(), - revision, &revisions, &errorMessage)) { + if (!GitClient::instance()->synchronousParentRevisions( + sourceWorkingDirectory(), revision, &revisions, &errorMessage)) { VcsOutputWindow::appendSilently(errorMessage); return QStringList(); } @@ -311,56 +305,13 @@ QStringList GitEditorWidget::annotationPreviousVersions(const QString &revision) bool GitEditorWidget::isValidRevision(const QString &revision) const { - return GitPlugin::client()->isValidRevision(revision); + return GitClient::instance()->isValidRevision(revision); } void GitEditorWidget::addChangeActions(QMenu *menu, const QString &change) { - m_currentChange = change; - if (contentType() == OtherContent) - return; - - menu->addAction(tr("Cherr&y-Pick Change %1").arg(change), this, [this] { - GitPlugin::client()->synchronousCherryPick(sourceWorkingDirectory(), m_currentChange); - }); - menu->addAction(tr("Re&vert Change %1").arg(change), this, [this] { - GitPlugin::client()->synchronousRevert(sourceWorkingDirectory(), m_currentChange); - }); - menu->addAction(tr("C&heckout Change %1").arg(change), this, [this] { - GitPlugin::client()->checkout(sourceWorkingDirectory(), m_currentChange); - }); - connect(menu->addAction(tr("&Interactive Rebase from Change %1...").arg(change)), - &QAction::triggered, this, [this] { - GitPlugin::startRebaseFromCommit(sourceWorkingDirectory(), m_currentChange); - }); - menu->addAction(tr("&Log for Change %1").arg(change), this, [this] { - GitPlugin::client()->log(sourceWorkingDirectory(), QString(), false, {m_currentChange}); - }); - menu->addAction(tr("Add &Tag for Change %1...").arg(change), this, [this] { - QString output; - QString errorMessage; - GitPlugin::client()->synchronousTagCmd(sourceWorkingDirectory(), QStringList(), - &output, &errorMessage); - - const QStringList tags = output.split('\n'); - BranchAddDialog dialog(tags, BranchAddDialog::Type::AddTag, Core::ICore::dialogParent()); - - if (dialog.exec() == QDialog::Rejected) - return; - - GitPlugin::client()->synchronousTagCmd(sourceWorkingDirectory(), - {dialog.branchName(), m_currentChange}, - &output, &errorMessage); - VcsOutputWindow::append(output); - if (!errorMessage.isEmpty()) - VcsOutputWindow::append(errorMessage, VcsOutputWindow::MessageStyle::Error); - }); - - auto resetMenu = new QMenu(tr("&Reset to Change %1").arg(change), menu); - resetMenu->addAction(tr("&Hard"), this, [this] { resetChange("hard"); }); - resetMenu->addAction(tr("&Mixed"), this, [this] { resetChange("mixed"); }); - resetMenu->addAction(tr("&Soft"), this, [this] { resetChange("soft"); }); - menu->addMenu(resetMenu); + if (contentType() != OtherContent) + GitClient::addChangeActions(menu, change, sourceWorkingDirectory()); } QString GitEditorWidget::revisionSubject(const QTextBlock &inBlock) const diff --git a/src/plugins/git/giteditor.h b/src/plugins/git/giteditor.h index 18397d94975..0377c2d6806 100644 --- a/src/plugins/git/giteditor.h +++ b/src/plugins/git/giteditor.h @@ -58,7 +58,6 @@ private: void applyDiffChunk(const VcsBase::DiffChunk& chunk, bool revert); void init() override; - void resetChange(const QByteArray &resetType); void addDiffActions(QMenu *menu, const VcsBase::DiffChunk &chunk) override; void aboutToOpen(const QString &fileName, const QString &realFileName) override; QString changeUnderCursor(const QTextCursor &) const override; @@ -73,7 +72,6 @@ private: QString sourceWorkingDirectory() const; mutable QRegExp m_changeNumberPattern; - QString m_currentChange; GitLogFilterWidget *m_logFilterWidget = nullptr; }; diff --git a/src/plugins/git/gitgrep.cpp b/src/plugins/git/gitgrep.cpp index 66e249fbf70..c413c6c2311 100644 --- a/src/plugins/git/gitgrep.cpp +++ b/src/plugins/git/gitgrep.cpp @@ -26,7 +26,6 @@ #include "gitgrep.h" #include "gitclient.h" #include "gitconstants.h" -#include "gitplugin.h" #include <coreplugin/editormanager/editormanager.h> #include <coreplugin/progressmanager/progressmanager.h> @@ -187,7 +186,7 @@ public: return QString(":!" + filter); }); arguments << "--" << filterArgs << exclusionArgs; - QScopedPointer<VcsCommand> command(GitPlugin::client()->createCommand(m_directory)); + QScopedPointer<VcsCommand> command(GitClient::instance()->createCommand(m_directory)); command->addFlags(VcsCommand::SilentOutput | VcsCommand::SuppressFailMessage); command->setProgressiveOutput(true); QFutureWatcher<FileSearchResultList> watcher; @@ -195,7 +194,7 @@ public: connect(&watcher, &QFutureWatcher<FileSearchResultList>::canceled, command.data(), &VcsCommand::cancel); connect(command.data(), &VcsCommand::stdOutText, this, &GitGrepRunner::read); - SynchronousProcessResponse resp = command->runCommand({GitPlugin::client()->vcsBinary(), arguments}, 0); + SynchronousProcessResponse resp = command->runCommand({GitClient::instance()->vcsBinary(), arguments}, 0); switch (resp.result) { case SynchronousProcessResponse::TerminatedAbnormally: case SynchronousProcessResponse::StartFailed: diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 55f71643c42..be99e377d26 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -1760,11 +1760,11 @@ void GitPluginPrivate::updateCurrentBranch() QObject *GitPlugin::remoteCommand(const QStringList &options, const QString &workingDirectory, const QStringList &) { - if (!GitPlugin::client() || options.size() < 2) + if (options.size() < 2) return nullptr; if (options.first() == "-git-show") - GitPlugin::client()->show(workingDirectory, options.at(1)); + dd->m_gitClient.show(workingDirectory, options.at(1)); return nullptr; } diff --git a/src/plugins/git/gitsubmiteditor.cpp b/src/plugins/git/gitsubmiteditor.cpp index 35f7892dd65..ebba5b19f37 100644 --- a/src/plugins/git/gitsubmiteditor.cpp +++ b/src/plugins/git/gitsubmiteditor.cpp @@ -88,8 +88,8 @@ CommitDataFetchResult CommitDataFetchResult::fetch(CommitType commitType, const CommitDataFetchResult result; result.commitData.commitType = commitType; QString commitTemplate; - result.success = GitPlugin::client()->getCommitData(workingDirectory, &commitTemplate, - result.commitData, &result.errorMessage); + result.success = GitClient::instance()->getCommitData( + workingDirectory, &commitTemplate, result.commitData, &result.errorMessage); return result; } @@ -202,15 +202,15 @@ void GitSubmitEditor::slotDiffSelected(const QList<int> &rows) } } if (!unstagedFiles.empty() || !stagedFiles.empty()) - GitPlugin::client()->diffFiles(m_workingDirectory, unstagedFiles, stagedFiles); + GitClient::instance()->diffFiles(m_workingDirectory, unstagedFiles, stagedFiles); if (!unmergedFiles.empty()) - GitPlugin::client()->merge(m_workingDirectory, unmergedFiles); + GitClient::instance()->merge(m_workingDirectory, unmergedFiles); } void GitSubmitEditor::showCommit(const QString &commit) { if (!m_workingDirectory.isEmpty()) - GitPlugin::client()->show(m_workingDirectory, commit); + GitClient::instance()->show(m_workingDirectory, commit); } void GitSubmitEditor::updateFileModel() @@ -230,7 +230,7 @@ void GitSubmitEditor::updateFileModel() Core::ProgressManager::addTask(m_fetchWatcher.future(), tr("Refreshing Commit Data"), TASK_UPDATE_COMMIT); - GitPlugin::client()->addFuture(m_fetchWatcher.future()); + GitClient::instance()->addFuture(m_fetchWatcher.future()); } void GitSubmitEditor::forceUpdateFileModel() diff --git a/src/plugins/git/logchangedialog.cpp b/src/plugins/git/logchangedialog.cpp index 25c59bbcb7f..d4b0a9602d3 100644 --- a/src/plugins/git/logchangedialog.cpp +++ b/src/plugins/git/logchangedialog.cpp @@ -24,7 +24,6 @@ ****************************************************************************/ #include "logchangedialog.h" -#include "gitplugin.h" #include "gitclient.h" #include <vcsbase/vcsoutputwindow.h> @@ -79,7 +78,7 @@ bool LogChangeWidget::init(const QString &repository, const QString &commit, Log return true; if (!(flags & Silent)) { VcsOutputWindow::appendError( - GitPlugin::client()->msgNoCommits(flags & IncludeRemotes)); + GitClient::instance()->msgNoCommits(flags & IncludeRemotes)); } return false; } @@ -159,8 +158,10 @@ bool LogChangeWidget::populateLog(const QString &repository, const QString &comm arguments << "--not" << "--remotes"; arguments << "--"; QString output; - if (!GitPlugin::client()->synchronousLog(repository, arguments, &output, nullptr, VcsCommand::NoOutput)) + if (!GitClient::instance()->synchronousLog( + repository, arguments, &output, nullptr, VcsCommand::NoOutput)) { return false; + } const QStringList lines = output.split('\n'); for (const QString &line : lines) { const int colonPos = line.indexOf(':'); @@ -211,8 +212,8 @@ LogChangeDialog::LogChangeDialog(bool isReset, QWidget *parent) : m_resetTypeComboBox->addItem(tr("Hard"), "--hard"); m_resetTypeComboBox->addItem(tr("Mixed"), "--mixed"); m_resetTypeComboBox->addItem(tr("Soft"), "--soft"); - m_resetTypeComboBox->setCurrentIndex(GitPlugin::client()->settings().intValue( - GitSettings::lastResetIndexKey)); + m_resetTypeComboBox->setCurrentIndex( + GitClient::instance()->settings().intValue(GitSettings::lastResetIndexKey)); popUpLayout->addWidget(m_resetTypeComboBox); popUpLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Ignored)); } @@ -239,8 +240,8 @@ bool LogChangeDialog::runDialog(const QString &repository, if (QDialog::exec() == QDialog::Accepted) { if (m_resetTypeComboBox) { - GitPlugin::client()->settings().setValue(GitSettings::lastResetIndexKey, - m_resetTypeComboBox->currentIndex()); + GitClient::instance()->settings().setValue( + GitSettings::lastResetIndexKey, m_resetTypeComboBox->currentIndex()); } return true; } diff --git a/src/plugins/git/mergetool.cpp b/src/plugins/git/mergetool.cpp index d951200784c..adc5d1ce7b4 100644 --- a/src/plugins/git/mergetool.cpp +++ b/src/plugins/git/mergetool.cpp @@ -60,7 +60,7 @@ bool MergeTool::start(const QString &workingDirectory, const QStringList &files) m_process->setWorkingDirectory(workingDirectory); m_process->setProcessEnvironment(env); m_process->setProcessChannelMode(QProcess::MergedChannels); - const Utils::FilePath binary = GitPlugin::client()->vcsBinary(); + const Utils::FilePath binary = GitClient::instance()->vcsBinary(); VcsOutputWindow::appendCommand(workingDirectory, {binary, arguments}); m_process->start(binary.toString(), arguments); if (m_process->waitForStarted()) { @@ -263,7 +263,7 @@ void MergeTool::done() VcsOutputWindow::appendError(tr("Merge tool process terminated with exit code %1") .arg(exitCode)); } - GitPlugin::client()->continueCommandIfNeeded(workingDirectory, exitCode == 0); + GitClient::instance()->continueCommandIfNeeded(workingDirectory, exitCode == 0); GitPlugin::emitRepositoryChanged(workingDirectory); deleteLater(); } diff --git a/src/plugins/git/remotedialog.cpp b/src/plugins/git/remotedialog.cpp index b0e629f0643..912c1be4d9b 100644 --- a/src/plugins/git/remotedialog.cpp +++ b/src/plugins/git/remotedialog.cpp @@ -203,7 +203,7 @@ void RemoteDialog::pushToRemote() const int row = indexList.at(0).row(); const QString remoteName = m_remoteModel->remoteName(row); - GitPlugin::client()->push(m_remoteModel->workingDirectory(), {remoteName}); + GitClient::instance()->push(m_remoteModel->workingDirectory(), {remoteName}); } void RemoteDialog::fetchFromRemote() @@ -214,7 +214,7 @@ void RemoteDialog::fetchFromRemote() int row = indexList.at(0).row(); const QString remoteName = m_remoteModel->remoteName(row); - GitPlugin::client()->fetch(m_remoteModel->workingDirectory(), remoteName); + GitClient::instance()->fetch(m_remoteModel->workingDirectory(), remoteName); } void RemoteDialog::updateButtonState() diff --git a/src/plugins/git/remotemodel.cpp b/src/plugins/git/remotemodel.cpp index 0a0f30c1b4e..da2e2fe2d71 100644 --- a/src/plugins/git/remotemodel.cpp +++ b/src/plugins/git/remotemodel.cpp @@ -24,7 +24,6 @@ ****************************************************************************/ #include "remotemodel.h" -#include "gitplugin.h" #include "gitclient.h" #include <utils/algorithm.h> @@ -55,7 +54,7 @@ bool RemoteModel::removeRemote(int row) { QString output; QString error; - bool success = GitPlugin::client()->synchronousRemoteCmd( + bool success = GitClient::instance()->synchronousRemoteCmd( m_workingDirectory, {"rm", remoteName(row)}, &output, &error); if (success) success = refresh(m_workingDirectory, &error); @@ -69,7 +68,7 @@ bool RemoteModel::addRemote(const QString &name, const QString &url) if (name.isEmpty() || url.isEmpty()) return false; - bool success = GitPlugin::client()->synchronousRemoteCmd( + bool success = GitClient::instance()->synchronousRemoteCmd( m_workingDirectory, {"add", name, url}, &output, &error); if (success) success = refresh(m_workingDirectory, &error); @@ -80,7 +79,7 @@ bool RemoteModel::renameRemote(const QString &oldName, const QString &newName) { QString output; QString error; - bool success = GitPlugin::client()->synchronousRemoteCmd( + bool success = GitClient::instance()->synchronousRemoteCmd( m_workingDirectory, {"rename", oldName, newName}, &output, &error); if (success) success = refresh(m_workingDirectory, &error); @@ -91,7 +90,7 @@ bool RemoteModel::updateUrl(const QString &name, const QString &newUrl) { QString output; QString error; - bool success = GitPlugin::client()->synchronousRemoteCmd( + bool success = GitClient::instance()->synchronousRemoteCmd( m_workingDirectory, {"set-url", name, newUrl}, &output, &error); if (success) success = refresh(m_workingDirectory, &error); @@ -186,7 +185,7 @@ bool RemoteModel::refresh(const QString &workingDirectory, QString *errorMessage // get list of remotes. QMap<QString,QString> remotesList - = GitPlugin::client()->synchronousRemotesList(workingDirectory, errorMessage); + = GitClient::instance()->synchronousRemotesList(workingDirectory, errorMessage); beginResetModel(); m_remotes.clear(); diff --git a/src/plugins/git/stashdialog.cpp b/src/plugins/git/stashdialog.cpp index ef1b324f58f..f33791549e8 100644 --- a/src/plugins/git/stashdialog.cpp +++ b/src/plugins/git/stashdialog.cpp @@ -161,7 +161,7 @@ void StashDialog::refresh(const QString &repository, bool force) m_model->setStashes(QList<Stash>()); } else { QList<Stash> stashes; - GitPlugin::client()->synchronousStashList(m_repository, &stashes); + GitClient::instance()->synchronousStashList(m_repository, &stashes); m_model->setStashes(stashes); if (!stashes.isEmpty()) { for (int c = 0; c < ColumnCount; c++) @@ -177,7 +177,7 @@ void StashDialog::deleteAll() if (!ask(title, tr("Do you want to delete all stashes?"))) return; QString errorMessage; - if (GitPlugin::client()->synchronousStashRemove(m_repository, QString(), &errorMessage)) + if (GitClient::instance()->synchronousStashRemove(m_repository, QString(), &errorMessage)) refresh(m_repository, true); else warning(title, errorMessage); @@ -194,7 +194,7 @@ void StashDialog::deleteSelection() QStringList errors; // Delete in reverse order as stashes rotate for (int r = rows.size() - 1; r >= 0; r--) - if (!GitPlugin::client()->synchronousStashRemove(m_repository, m_model->at(rows.at(r)).name, &errorMessage)) + if (!GitClient::instance()->synchronousStashRemove(m_repository, m_model->at(rows.at(r)).name, &errorMessage)) errors.push_back(errorMessage); refresh(m_repository, true); if (!errors.isEmpty()) @@ -205,7 +205,7 @@ void StashDialog::showCurrent() { const int index = currentRow(); QTC_ASSERT(index >= 0, return); - GitPlugin::client()->show(m_repository, QString(m_model->at(index).name)); + GitClient::instance()->show(m_repository, QString(m_model->at(index).name)); } // Suggest Branch name to restore 'stash@{0}' -> 'stash0-date' @@ -266,7 +266,8 @@ bool StashDialog::promptForRestore(QString *stash, { const QString stashIn = *stash; bool modifiedPromptShown = false; - switch (GitPlugin::client()->gitStatus(m_repository, StatusMode(NoUntracked | NoSubmodules), nullptr, errorMessage)) { + switch (GitClient::instance()->gitStatus( + m_repository, StatusMode(NoUntracked | NoSubmodules), nullptr, errorMessage)) { case GitClient::StatusFailed: return false; case GitClient::StatusChanged: { @@ -274,13 +275,15 @@ bool StashDialog::promptForRestore(QString *stash, case ModifiedRepositoryCancel: return false; case ModifiedRepositoryStash: - if (GitPlugin::client()->synchronousStash(m_repository, QString(), GitClient::StashPromptDescription).isEmpty()) + if (GitClient::instance()->synchronousStash( + m_repository, QString(), GitClient::StashPromptDescription).isEmpty()) { return false; + } *stash = nextStash(*stash); // Our stash id to be restored changed QTC_ASSERT(!stash->isEmpty(), return false); break; case ModifiedRepositoryDiscard: - if (!GitPlugin::client()->synchronousReset(m_repository)) + if (!GitClient::instance()->synchronousReset(m_repository)) return false; break; } @@ -317,7 +320,7 @@ void StashDialog::restoreCurrent() // Make sure repository is not modified, restore. The command will // output to window on success. if (promptForRestore(&name, nullptr, &errorMessage) - && GitPlugin::client()->synchronousStashRestore(m_repository, name)) { + && GitClient::instance()->synchronousStashRestore(m_repository, name)) { refresh(m_repository, true); // Might have stashed away local changes. } else if (!errorMessage.isEmpty()) { warning(msgRestoreFailedTitle(name), errorMessage); @@ -332,7 +335,7 @@ void StashDialog::restoreCurrentInBranch() QString branch; QString name = m_model->at(index).name; if (promptForRestore(&name, &branch, &errorMessage) - && GitPlugin::client()->synchronousStashRestore(m_repository, name, false, branch)) { + && GitClient::instance()->synchronousStashRestore(m_repository, name, false, branch)) { refresh(m_repository, true); // git deletes the stash, unfortunately. } else if (!errorMessage.isEmpty()) { warning(msgRestoreFailedTitle(name), errorMessage); diff --git a/src/plugins/languageclient/CMakeLists.txt b/src/plugins/languageclient/CMakeLists.txt index d1910757dbc..abddb9cd968 100644 --- a/src/plugins/languageclient/CMakeLists.txt +++ b/src/plugins/languageclient/CMakeLists.txt @@ -1,5 +1,5 @@ add_qtc_plugin(LanguageClient - DEPENDS LanguageServerProtocol Qt5::Core + PUBLIC_DEPENDS LanguageServerProtocol Qt5::Core PLUGIN_DEPENDS ProjectExplorer Core TextEditor SOURCES client.cpp client.h diff --git a/src/plugins/languageclient/languageclientcompletionassist.cpp b/src/plugins/languageclient/languageclientcompletionassist.cpp index ae2eca2ff63..54b9740809c 100644 --- a/src/plugins/languageclient/languageclientcompletionassist.cpp +++ b/src/plugins/languageclient/languageclientcompletionassist.cpp @@ -35,6 +35,7 @@ #include <texteditor/codeassist/genericproposal.h> #include <texteditor/codeassist/genericproposalmodel.h> #include <utils/algorithm.h> +#include <utils/executeondestruction.h> #include <utils/textutils.h> #include <utils/utilsicons.h> @@ -361,6 +362,9 @@ void LanguageClientCompletionAssistProcessor::cancel() void LanguageClientCompletionAssistProcessor::handleCompletionResponse( const CompletionRequest::Response &response) { + LanguageClientCompletionProposal *proposal = nullptr; + // We must report back to the code assistant under all circumstances + Utils::ExecuteOnDestruction eod([this, proposal]() { setAsyncProposalAvailable(proposal); }); qCDebug(LOGLSPCOMPLETION) << QTime::currentTime() << " : got completions"; m_currentRequest = MessageId(); QTC_ASSERT(m_client, return); @@ -383,12 +387,11 @@ void LanguageClientCompletionAssistProcessor::handleCompletionResponse( model->loadContent(Utils::transform(items, [](const CompletionItem &item){ return static_cast<AssistProposalItemInterface *>(new LanguageClientCompletionItem(item)); })); - auto proposal = new LanguageClientCompletionProposal(m_pos, model); + proposal = new LanguageClientCompletionProposal(m_pos, model); proposal->m_document = m_document; proposal->m_pos = m_pos; proposal->setFragile(true); proposal->setSupportsPrefix(false); - setAsyncProposalAvailable(proposal); qCDebug(LOGLSPCOMPLETION) << QTime::currentTime() << " : " << items.count() << " completions handled"; } diff --git a/src/plugins/nim/project/nimrunconfiguration.cpp b/src/plugins/nim/project/nimrunconfiguration.cpp index 808d36e101a..142e4344904 100644 --- a/src/plugins/nim/project/nimrunconfiguration.cpp +++ b/src/plugins/nim/project/nimrunconfiguration.cpp @@ -58,8 +58,8 @@ public: setDisplayName(tr("Current Build Target")); setDefaultDisplayName(tr("Current Build Target")); - setUpdater([this] { - auto buildConfiguration = qobject_cast<NimBuildConfiguration *>(activeBuildConfiguration()); + setUpdater([this, target] { + auto buildConfiguration = qobject_cast<NimBuildConfiguration *>(target->activeBuildConfiguration()); QTC_ASSERT(buildConfiguration, return); const QFileInfo outFileInfo = buildConfiguration->outFilePath().toFileInfo(); aspect<ExecutableAspect>()->setExecutable(FilePath::fromString(outFileInfo.absoluteFilePath())); diff --git a/src/plugins/perfprofiler/perfprofilertool.cpp b/src/plugins/perfprofiler/perfprofilertool.cpp index 5dc99eeceab..8176432c179 100644 --- a/src/plugins/perfprofiler/perfprofilertool.cpp +++ b/src/plugins/perfprofiler/perfprofilertool.cpp @@ -159,7 +159,7 @@ PerfProfilerTool::PerfProfilerTool() tracePointsAction->setEnabled(m_startAction->isEnabled()); }); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &PerfProfilerTool::updateRunActions); m_recordButton = new QToolButton; diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp index c777a61ee89..4f866490a10 100644 --- a/src/plugins/projectexplorer/appoutputpane.cpp +++ b/src/plugins/projectexplorer/appoutputpane.cpp @@ -779,7 +779,7 @@ void AppOutputPane::slotRunControlFinished2(RunControl *sender) if (current && current == sender) enableButtons(current); - emit ProjectExplorerPlugin::instance()->updateRunActions(); + ProjectExplorerPlugin::updateRunActions(); #ifdef Q_OS_WIN const bool isRunning = Utils::anyOf(m_runControlTabs, [](const RunControlTab &rt) { diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index ad9e980e011..a93a33d1aab 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -183,7 +183,7 @@ BuildConfiguration::BuildConfiguration(Target *target, Core::Id id) connect(this, &BuildConfiguration::enabledChanged, this, [this] { if (isActive() && project() == SessionManager::startupProject()) { ProjectExplorerPlugin::updateActions(); - emit ProjectExplorerPlugin::instance()->updateRunActions(); + ProjectExplorerPlugin::updateRunActions(); } }); } diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp index 720b501681d..27c46a54a61 100644 --- a/src/plugins/projectexplorer/buildmanager.cpp +++ b/src/plugins/projectexplorer/buildmanager.cpp @@ -265,9 +265,6 @@ BuildManager::BuildManager(QObject *parent, QAction *cancelBuildAction) connect(d->m_taskWindow, &Internal::TaskWindow::tasksChanged, this, &BuildManager::updateTaskCount); - connect(d->m_taskWindow, &Internal::TaskWindow::tasksCleared, - this,&BuildManager::tasksCleared); - connect(&d->m_progressWatcher, &QFutureWatcherBase::canceled, this, &BuildManager::cancel); connect(&d->m_progressWatcher, &QFutureWatcherBase::finished, @@ -457,7 +454,6 @@ void BuildManager::updateTaskCount() { const int errors = getErrorTaskCount(); ProgressManager::setApplicationLabel(errors > 0 ? QString::number(errors) : QString()); - emit m_instance->tasksChanged(); } void BuildManager::finish() diff --git a/src/plugins/projectexplorer/buildmanager.h b/src/plugins/projectexplorer/buildmanager.h index 29351b2eb6c..d62786ed817 100644 --- a/src/plugins/projectexplorer/buildmanager.h +++ b/src/plugins/projectexplorer/buildmanager.h @@ -102,9 +102,6 @@ public slots: signals: void buildStateChanged(ProjectExplorer::Project *pro); void buildQueueFinished(bool success); - void tasksChanged(); - void taskAdded(const ProjectExplorer::Task &task); - void tasksCleared(); private: static void addToTaskWindow(const ProjectExplorer::Task &task, int linkedOutputLines, int skipLines); diff --git a/src/plugins/projectexplorer/buildsystem.cpp b/src/plugins/projectexplorer/buildsystem.cpp index f360ea6648b..ea299cd522d 100644 --- a/src/plugins/projectexplorer/buildsystem.cpp +++ b/src/plugins/projectexplorer/buildsystem.cpp @@ -316,7 +316,7 @@ void BuildSystem::emitBuildSystemUpdated() QString BuildSystem::disabledReason(const QString &buildKey) const { - if (hasParsingData()) { + if (!hasParsingData()) { QString msg = isParsing() ? tr("The project is currently being parsed.") : tr("The project could not be fully parsed."); const FilePath projectFilePath = buildTarget(buildKey).projectFilePath; diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 2ab52663d08..9748b52f7fb 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -2053,6 +2053,7 @@ Utils::optional<QString> MsvcToolChain::generateEnvironmentSettings(const Utils: } if (Utils::HostOsInfo::isWindowsHost()) saver.write("chcp 65001\r\n"); + saver.write("set VSCMD_SKIP_SENDTELEMETRY=1\r\n"); saver.write(call + "\r\n"); saver.write("@echo " + marker.toLocal8Bit() + "\r\n"); saver.write("set\r\n"); diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 575543d77bd..af5973fb4b3 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -453,7 +453,7 @@ public: void activeRunConfigurationChanged(); void activeBuildConfigurationChanged(); - void slotUpdateRunActions(); + void doUpdateRunActions(); void currentModeChanged(Core::Id mode, Core::Id oldMode); @@ -1714,8 +1714,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er connect(dd->m_projectTreeExpandAllAction, &QAction::triggered, ProjectTree::instance(), &ProjectTree::expandAll); - connect(this, &ProjectExplorerPlugin::updateRunActions, - dd, &ProjectExplorerPluginPrivate::slotUpdateRunActions); connect(this, &ProjectExplorerPlugin::settingsChanged, dd, &ProjectExplorerPluginPrivate::updateRunWithoutDeployMenu); @@ -2483,7 +2481,7 @@ void ProjectExplorerPluginPrivate::startRunControl(RunControl *runControl) Qt::QueuedConnection); ++m_activeRunControlCount; runControl->initiateStart(); - emit m_instance->updateRunActions(); + doUpdateRunActions(); } void ProjectExplorerPluginPrivate::showOutputPaneForRunControl(RunControl *runControl) @@ -2540,7 +2538,7 @@ void ProjectExplorerPluginPrivate::buildQueueFinished(bool success) m_delayedRunConfiguration = nullptr; m_shouldHaveRunConfiguration = false; m_runMode = Constants::NO_RUN_MODE; - emit m_instance->updateRunActions(); + doUpdateRunActions(); } QList<QPair<QString, QString> > ProjectExplorerPluginPrivate::recentProjects() const @@ -2903,7 +2901,8 @@ void ProjectExplorerPlugin::runRunConfiguration(RunConfiguration *rc, dd->executeRunConfiguration(rc, runMode); break; } - emit m_instance->updateRunActions(); + + dd->doUpdateRunActions(); } QList<QPair<Runnable, Utils::ProcessHandle>> ProjectExplorerPlugin::runningRunControlProcesses() @@ -3001,7 +3000,7 @@ void ProjectExplorerPluginPrivate::activeRunConfigurationChanged() if (rc == previousRunConfiguration) return; updateActions(); - emit m_instance->updateRunActions(); + doUpdateRunActions(); } void ProjectExplorerPluginPrivate::activeBuildConfigurationChanged() @@ -3015,7 +3014,7 @@ void ProjectExplorerPluginPrivate::activeBuildConfigurationChanged() return; updateActions(); - emit m_instance->updateRunActions(); + doUpdateRunActions(); } void ProjectExplorerPluginPrivate::updateDeployActions() @@ -3064,7 +3063,7 @@ void ProjectExplorerPluginPrivate::updateDeployActions() enableDeploySessionAction = false; m_deploySessionAction->setEnabled(enableDeploySessionAction); - emit m_instance->updateRunActions(); + doUpdateRunActions(); } bool ProjectExplorerPlugin::canRunStartupProject(Core::Id runMode, QString *whyNot) @@ -3139,13 +3138,15 @@ bool ProjectExplorerPlugin::canRunStartupProject(Core::Id runMode, QString *whyN return true; } -void ProjectExplorerPluginPrivate::slotUpdateRunActions() +void ProjectExplorerPluginPrivate::doUpdateRunActions() { QString whyNot; const bool state = ProjectExplorerPlugin::canRunStartupProject(Constants::NORMAL_RUN_MODE, &whyNot); m_runAction->setEnabled(state); m_runAction->setToolTip(whyNot); m_runWithoutDeployAction->setEnabled(state); + + emit m_instance->runActionsUpdated(); } void ProjectExplorerPluginPrivate::addToRecentProjects(const QString &fileName, const QString &displayName) @@ -4002,6 +4003,11 @@ void ProjectExplorerPlugin::removeFromRecentProjects(const QString &fileName, dd->removeFromRecentProjects(fileName, displayName); } +void ProjectExplorerPlugin::updateRunActions() +{ + dd->doUpdateRunActions(); +} + QList<QPair<QString, QString> > ProjectExplorerPlugin::recentProjects() { return dd->recentProjects(); diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index 2c803aa7840..afc84671cb2 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -182,6 +182,8 @@ public: static void clearRecentProjects(); static void removeFromRecentProjects(const QString &fileName, const QString &displayName); + static void updateRunActions(); + signals: void finishedInitialization(); @@ -193,7 +195,7 @@ signals: void settingsChanged(); - void updateRunActions(); + void runActionsUpdated(); private: static bool coreAboutToClose(); diff --git a/src/plugins/projectexplorer/runconfiguration.cpp b/src/plugins/projectexplorer/runconfiguration.cpp index 8a6f7afaa4c..b1128896f65 100644 --- a/src/plugins/projectexplorer/runconfiguration.cpp +++ b/src/plugins/projectexplorer/runconfiguration.cpp @@ -203,11 +203,6 @@ RunConfiguration::RunConfiguration(Target *target, Core::Id id) RunConfiguration::~RunConfiguration() = default; -bool RunConfiguration::isActive() const -{ - return target()->isActive() && target()->activeRunConfiguration() == this; -} - QString RunConfiguration::disabledReason() const { BuildSystem *bs = activeBuildSystem(); @@ -252,11 +247,6 @@ QMap<Core::Id, QVariantMap> RunConfiguration::aspectData() const return data; } -BuildConfiguration *RunConfiguration::activeBuildConfiguration() const -{ - return target()->activeBuildConfiguration(); -} - BuildSystem *RunConfiguration::activeBuildSystem() const { return target()->buildSystem(); @@ -304,8 +294,10 @@ void RunConfiguration::update() emit enabledChanged(); - if (isActive() && project() == SessionManager::startupProject()) - emit ProjectExplorerPlugin::instance()->updateRunActions(); + const bool isActive = target()->isActive() && target()->activeRunConfiguration() == this; + + if (isActive && project() == SessionManager::startupProject()) + ProjectExplorerPlugin::updateRunActions(); } BuildTargetInfo RunConfiguration::buildTargetInfo() const diff --git a/src/plugins/projectexplorer/runconfiguration.h b/src/plugins/projectexplorer/runconfiguration.h index f79001a571c..437d3f4ef03 100644 --- a/src/plugins/projectexplorer/runconfiguration.h +++ b/src/plugins/projectexplorer/runconfiguration.h @@ -128,8 +128,6 @@ class PROJECTEXPLORER_EXPORT RunConfiguration : public ProjectConfiguration public: ~RunConfiguration() override; - bool isActive() const; - virtual QString disabledReason() const; virtual bool isEnabled() const; @@ -179,8 +177,7 @@ signals: protected: RunConfiguration(Target *target, Core::Id id); - /// convenience function to get current build configuration. - BuildConfiguration *activeBuildConfiguration() const; + /// convenience function to get current build system. Try to avoid. BuildSystem *activeBuildSystem() const; using Updater = std::function<void()>; diff --git a/src/plugins/projectexplorer/taskwindow.cpp b/src/plugins/projectexplorer/taskwindow.cpp index d7f0c92c84b..9548be05521 100644 --- a/src/plugins/projectexplorer/taskwindow.cpp +++ b/src/plugins/projectexplorer/taskwindow.cpp @@ -380,7 +380,6 @@ void TaskWindow::clearTasks(Core::Id categoryId) d->m_model->clearTasks(categoryId); emit tasksChanged(); - emit tasksCleared(); navigateStateChanged(); } diff --git a/src/plugins/projectexplorer/taskwindow.h b/src/plugins/projectexplorer/taskwindow.h index efefb72658f..7f11ca1fb1a 100644 --- a/src/plugins/projectexplorer/taskwindow.h +++ b/src/plugins/projectexplorer/taskwindow.h @@ -79,7 +79,6 @@ public: signals: void tasksChanged(); - void tasksCleared(); private: void updateFilter() override; diff --git a/src/plugins/qmldesigner/components/formeditor/lineeditaction.cpp b/src/plugins/qmldesigner/components/formeditor/lineeditaction.cpp index 5f9e7f571ba..8f5dd75718d 100644 --- a/src/plugins/qmldesigner/components/formeditor/lineeditaction.cpp +++ b/src/plugins/qmldesigner/components/formeditor/lineeditaction.cpp @@ -55,7 +55,7 @@ QWidget *LineEditAction::createWidget(QWidget *parent) QFont font = lineEdit->font(); font.setPixelSize(Theme::instance()->smallFontPixelSize()); lineEdit->setFont(font); - lineEdit->setValidator(new QIntValidator(0, 4096, this)); + lineEdit->setValidator(new QIntValidator(0, 99999, this)); connect(lineEdit, &QLineEdit::textEdited, this, &LineEditAction::textChanged); connect(this, &LineEditAction::lineEditTextClear, lineEdit, &QLineEdit::clear); diff --git a/src/plugins/qmldesigner/components/propertyeditor/gradientpresetdefaultlistmodel.cpp b/src/plugins/qmldesigner/components/propertyeditor/gradientpresetdefaultlistmodel.cpp index 3977eff168a..f379ec53289 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/gradientpresetdefaultlistmodel.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/gradientpresetdefaultlistmodel.cpp @@ -57,7 +57,7 @@ void GradientPresetDefaultListModel::addAllPresets() for (int i = 0; i < metaEnum.keyCount(); i++) { auto preset = GradientPresetItem::Preset(metaEnum.value(i)); - if (preset < GradientPresetItem::Preset::NumPresets) + if (preset < GradientPresetItem::numPresets) addItem(GradientPresetItem(preset)); } } diff --git a/src/plugins/qmldesigner/components/propertyeditor/gradientpresetitem.h b/src/plugins/qmldesigner/components/propertyeditor/gradientpresetitem.h index 4cb5a519fbf..cec45bb4af0 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/gradientpresetitem.h +++ b/src/plugins/qmldesigner/components/propertyeditor/gradientpresetitem.h @@ -42,7 +42,13 @@ public: #if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) using Preset = QGradient::Preset; #else - enum Preset { NumPresets = 0 }; + enum Preset {}; +#endif + +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + static const int numPresets = Preset::NumPresets; +#else + static const int numPresets = 181; #endif explicit GradientPresetItem(); diff --git a/src/plugins/qmlprofiler/qmlprofilertool.cpp b/src/plugins/qmlprofiler/qmlprofilertool.cpp index c14d60d3842..274935b8a40 100644 --- a/src/plugins/qmlprofiler/qmlprofilertool.cpp +++ b/src/plugins/qmlprofiler/qmlprofilertool.cpp @@ -243,7 +243,7 @@ QmlProfilerTool::QmlProfilerTool() perspective->addToolBarWidget(d->m_displayFeaturesButton); perspective->addToolBarWidget(d->m_timeLabel); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &QmlProfilerTool::updateRunActions); QmlProfilerTextMarkModel *model = d->m_profilerModelManager->textMarkModel(); diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index e90af4d627f..8dd3ff712c8 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -646,6 +646,7 @@ public: MarginSettings m_marginSettings; // apply when making visible the first time, for the split case bool m_fontSettingsNeedsApply = true; + bool m_wasNotYetShown = true; BehaviorSettings m_behaviorSettings; int extraAreaSelectionAnchorBlockNumber = -1; @@ -4331,16 +4332,12 @@ void TextEditorWidgetPrivate::paintCurrentLineHighlight(const PaintEventData &da QRectF lineRect = data.block.layout()->lineForTextPosition(data.textCursor.positionInBlock()).rect(); lineRect.moveTop(lineRect.top() + blockRect.top()); lineRect.setLeft(0); - lineRect.setRight(data.viewportRect.width() - data.offset.x()); + lineRect.setRight(data.viewportRect.width()); QColor color = m_document->fontSettings().toTextCharFormat(C_CURRENT_LINE).background().color(); // set alpha, otherwise we cannot see block highlighting and find scope underneath color.setAlpha(128); - if (!data.eventRect.contains(lineRect.toRect())) { - QRect updateRect = data.eventRect; - updateRect.setLeft(0); - updateRect.setRight(data.viewportRect.width() - int(data.offset.x())); - q->viewport()->update(updateRect); - } + if (!data.eventRect.contains(lineRect.toRect())) + q->viewport()->update(lineRect.toRect()); painter.fillRect(lineRect, color); } @@ -7217,10 +7214,20 @@ void TextEditorWidget::encourageApply() void TextEditorWidget::showEvent(QShowEvent* e) { triggerPendingUpdates(); + // QPlainTextEdit::showEvent scrolls to make the cursor visible on first show + // which we don't want, since we restore previous states when + // opening editors, and when splitting/duplicating. + // So restore the previous state after that. + QByteArray state; + if (d->m_wasNotYetShown) + state = saveState(); QPlainTextEdit::showEvent(e); + if (d->m_wasNotYetShown) { + restoreState(state); + d->m_wasNotYetShown = false; + } } - void TextEditorWidgetPrivate::applyFontSettingsDelayed() { m_fontSettingsNeedsApply = true; diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index a6e5f078d6b..92ed908ac96 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -530,7 +530,7 @@ CallgrindToolPrivate::CallgrindToolPrivate() m_perspective.addWindow(m_visualization, Perspective::SplitVertical, nullptr, false, Qt::RightDockWidgetArea); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &CallgrindToolPrivate::updateRunActions); } diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 64475eba242..fd8025fc8b1 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -571,7 +571,7 @@ MemcheckToolPrivate::MemcheckToolPrivate() m_perspective.addWindow(m_errorView, Perspective::SplitVertical, nullptr); - connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::updateRunActions, + connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::runActionsUpdated, this, &MemcheckToolPrivate::maybeActiveRunConfigurationChanged); // diff --git a/src/plugins/vcsbase/vcscommand.cpp b/src/plugins/vcsbase/vcscommand.cpp index 76a53f06e6a..3b1697c1367 100644 --- a/src/plugins/vcsbase/vcscommand.cpp +++ b/src/plugins/vcsbase/vcscommand.cpp @@ -43,6 +43,7 @@ VcsCommand::VcsCommand(const QString &workingDirectory, Core::ShellCommand(workingDirectory, environment), m_preventRepositoryChanged(false) { + VcsOutputWindow::setRepository(workingDirectory); setOutputProxyFactory([this] { auto proxy = new OutputProxy; VcsOutputWindow *outputWindow = VcsOutputWindow::instance(); |