diff options
author | Fabian Müller <fmueller@owncloud.com> | 2022-10-10 19:21:33 +0300 |
---|---|---|
committer | Hannah von Reth <vonreth@kde.org> | 2022-10-11 10:21:01 +0300 |
commit | 1a43484e625cafcfa9cc2352a962d96512616362 (patch) | |
tree | 37d9e0d8906455be85ffbcc003297fad3d209108 | |
parent | 5ebda46a764599e50ffde7f9210fad2486ed6554 (diff) |
Don't create redundant content widgets
The widgets are pre-initialized by the .ui file already, there is no need for initializing them manually.
-rw-r--r-- | src/gui/accountsettings.cpp | 14 | ||||
-rw-r--r-- | src/gui/creds/httpcredentialsgui.cpp | 11 | ||||
-rw-r--r-- | src/gui/loginrequireddialog/loginrequireddialog.cpp | 19 | ||||
-rw-r--r-- | src/gui/loginrequireddialog/loginrequireddialog.h | 17 |
4 files changed, 46 insertions, 15 deletions
diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index d8bfc6900..3031d3cdc 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -804,9 +804,14 @@ void AccountSettings::slotAccountStateChanged() qCDebug(lcAccountSettings) << "showing modal dialog asking user to log in again via OAuth2"; - auto *contentWidget = new OAuthLoginWidget(); + _askForOAuthLoginDialog = new LoginRequiredDialog(LoginRequiredDialog::Mode::OAuth, ocApp()->gui()->settingsDialog()); - _askForOAuthLoginDialog = new LoginRequiredDialog(contentWidget, ocApp()->gui()->settingsDialog()); + // make sure it's cleaned up since it's not owned by the account settings (also prevents memory leaks) + _askForOAuthLoginDialog->setAttribute(Qt::WA_DeleteOnClose); + + _askForOAuthLoginDialog->setTopLabelText(tr("The account %1 is currently logged out.\n\nPlease authenticate using your browser.").arg(account->displayName())); + + auto *contentWidget = qobject_cast<OAuthLoginWidget *>(_askForOAuthLoginDialog->contentWidget()); connect(contentWidget, &OAuthLoginWidget::copyUrlToClipboardButtonClicked, _askForOAuthLoginDialog, [account]() { // TODO: use authorisationLinkAsync @@ -823,11 +828,6 @@ void AccountSettings::slotAccountStateChanged() contentWidget->setEnabled(true); }); - // make sure it's cleaned up since it's not owned by the account settings (also prevents memory leaks) - _askForOAuthLoginDialog->setAttribute(Qt::WA_DeleteOnClose); - - _askForOAuthLoginDialog->setTopLabelText(tr("The account %1 is currently logged out.\n\nPlease authenticate using your browser.").arg(account->displayName())); - connect( cred, &HttpCredentialsGui::authorisationLinkChanged, this, &AccountSettings::slotAccountStateChanged, diff --git a/src/gui/creds/httpcredentialsgui.cpp b/src/gui/creds/httpcredentialsgui.cpp index bd33f0405..ea1767c46 100644 --- a/src/gui/creds/httpcredentialsgui.cpp +++ b/src/gui/creds/httpcredentialsgui.cpp @@ -113,13 +113,16 @@ void HttpCredentialsGui::asyncAuthResult(OAuth::Result r, const QString &user, void HttpCredentialsGui::showDialog() { - auto *contentWidget = new BasicLoginWidget(); - contentWidget->forceUsername(_account->davUser()); + auto *dialog = new LoginRequiredDialog(LoginRequiredDialog::Mode::Basic, ocApp()->gui()->settingsDialog()); + + // make sure it's cleaned up since it's not owned by the account settings (also prevents memory leaks) + dialog->setAttribute(Qt::WA_DeleteOnClose); - auto *dialog = new LoginRequiredDialog(contentWidget, ocApp()->gui()->settingsDialog()); - dialog->setAttribute(Qt::WA_DeleteOnClose, true); dialog->setTopLabelText(tr("Please enter your password to log in to your account.")); + auto *contentWidget = qobject_cast<BasicLoginWidget *>(dialog->contentWidget()); + contentWidget->forceUsername(_account->davUser()); + // in this case, we want to use the login button dialog->addLogInButton(); diff --git a/src/gui/loginrequireddialog/loginrequireddialog.cpp b/src/gui/loginrequireddialog/loginrequireddialog.cpp index aaa86c277..b5b7d710d 100644 --- a/src/gui/loginrequireddialog/loginrequireddialog.cpp +++ b/src/gui/loginrequireddialog/loginrequireddialog.cpp @@ -24,7 +24,7 @@ namespace OCC { -LoginRequiredDialog::LoginRequiredDialog(AbstractLoginWidget *contentWidget, QWidget *parent) +LoginRequiredDialog::LoginRequiredDialog(Mode mode, QWidget *parent) : QDialog(parent) , _ui(new ::Ui::LoginRequiredDialog) { @@ -41,8 +41,16 @@ LoginRequiredDialog::LoginRequiredDialog(AbstractLoginWidget *contentWidget, QWi // using a stacked widget appears to work better than a plain widget // we do this in the setup wizard as well - _ui->contentWidget->addWidget(contentWidget); - _ui->contentWidget->setCurrentWidget(contentWidget); + _ui->contentWidget->setCurrentWidget([this, mode]() -> QWidget * { + switch (mode) { + case Mode::Basic: + return _ui->basicLoginWidget; + case Mode::OAuth: + return _ui->oauthLoginWidget; + default: + Q_UNREACHABLE(); + } + }()); Utility::setModal(this); setFixedSize(this->minimumSize()); @@ -63,4 +71,9 @@ void LoginRequiredDialog::addLogInButton() _ui->rightButtonBox->addButton(tr("Log in"), QDialogButtonBox::AcceptRole); } +QWidget *LoginRequiredDialog::contentWidget() const +{ + return _ui->contentWidget->currentWidget(); +} + } // OCC diff --git a/src/gui/loginrequireddialog/loginrequireddialog.h b/src/gui/loginrequireddialog/loginrequireddialog.h index c8eb23768..00760089e 100644 --- a/src/gui/loginrequireddialog/loginrequireddialog.h +++ b/src/gui/loginrequireddialog/loginrequireddialog.h @@ -33,7 +33,16 @@ class LoginRequiredDialog : public QDialog Q_OBJECT public: - explicit LoginRequiredDialog(AbstractLoginWidget *contentWidget, QWidget *parent = nullptr); + /** + * Defines which form is shown to the user. + * The form widgets are already initialized by the content widget (a stacked widget), we just need to bring the right one to the front. + */ + enum class Mode { + Basic, + OAuth, + }; + + explicit LoginRequiredDialog(Mode mode, QWidget *parent = nullptr); ~LoginRequiredDialog() override; void setTopLabelText(const QString &newText); @@ -44,6 +53,12 @@ public: */ void addLogInButton(); + /** + * Form widget currently shown to the user. + * @return form widget + */ + [[nodiscard]] QWidget *contentWidget() const; + private: ::Ui::LoginRequiredDialog *_ui; }; |