diff --git a/src/plugins/git/gerrit/gerritdialog.cpp b/src/plugins/git/gerrit/gerritdialog.cpp index d38d60cf151..d3df24049d2 100644 --- a/src/plugins/git/gerrit/gerritdialog.cpp +++ b/src/plugins/git/gerrit/gerritdialog.cpp @@ -216,6 +216,23 @@ void GerritDialog::refresh() m_ui->treeView->sortByColumn(-1); } +void GerritDialog::scheduleUpdateRemotes() +{ + if (isVisible()) + updateRemotes(); + else + m_shouldUpdateRemotes = true; +} + +void GerritDialog::showEvent(QShowEvent *event) +{ + QDialog::showEvent(event); + if (m_shouldUpdateRemotes) { + m_shouldUpdateRemotes = false; + updateRemotes(); + } +} + void GerritDialog::remoteChanged() { const GerritServer server = m_ui->remoteComboBox->currentServer(); diff --git a/src/plugins/git/gerrit/gerritdialog.h b/src/plugins/git/gerrit/gerritdialog.h index e51a7c03396..1b15e6f5075 100644 --- a/src/plugins/git/gerrit/gerritdialog.h +++ b/src/plugins/git/gerrit/gerritdialog.h @@ -62,6 +62,7 @@ public: void fetchStarted(const QSharedPointer &change); void fetchFinished(); void refresh(); + void scheduleUpdateRemotes(); signals: void fetchDisplay(const QSharedPointer &); @@ -77,6 +78,7 @@ private: void slotFetchCheckout(); void remoteChanged(); void updateRemotes(bool forceReload = false); + void showEvent(QShowEvent *event) override; void manageProgressIndicator(); @@ -101,6 +103,7 @@ private: QString m_repository; bool m_fetchRunning = false; bool m_updatingRemotes = false; + bool m_shouldUpdateRemotes = false; }; } // namespace Internal diff --git a/src/plugins/git/gerrit/gerritoptionspage.cpp b/src/plugins/git/gerrit/gerritoptionspage.cpp index c61fa682212..58106495468 100644 --- a/src/plugins/git/gerrit/gerritoptionspage.cpp +++ b/src/plugins/git/gerrit/gerritoptionspage.cpp @@ -72,6 +72,7 @@ void GerritOptionsPage::apply() newParameters.setPortFlagBySshType(); *m_parameters = newParameters; m_parameters->toSettings(Core::ICore::settings()); + emit settingsChanged(); } } } diff --git a/src/plugins/git/gerrit/gerritoptionspage.h b/src/plugins/git/gerrit/gerritoptionspage.h index 7395b95de1c..b2a6fce12d2 100644 --- a/src/plugins/git/gerrit/gerritoptionspage.h +++ b/src/plugins/git/gerrit/gerritoptionspage.h @@ -73,6 +73,9 @@ public: void apply() override; void finish() override; +signals: + void settingsChanged(); + private: const QSharedPointer &m_parameters; QPointer m_widget; diff --git a/src/plugins/git/gerrit/gerritplugin.cpp b/src/plugins/git/gerrit/gerritplugin.cpp index 8652974c420..ad87882b38a 100644 --- a/src/plugins/git/gerrit/gerritplugin.cpp +++ b/src/plugins/git/gerrit/gerritplugin.cpp @@ -292,7 +292,12 @@ bool GerritPlugin::initialize(ActionContainer *ac) connect(pushAction, &QAction::triggered, this, [this]() { push(); }); ac->addAction(m_pushToGerritCommand); - new GerritOptionsPage(m_parameters, this); + auto options = new GerritOptionsPage(m_parameters, this); + connect(options, &GerritOptionsPage::settingsChanged, + this, [this] { + if (m_dialog) + m_dialog->scheduleUpdateRemotes(); + }); return true; }