Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Müller <fmueller@owncloud.com>2022-10-10 19:21:33 +0300
committerHannah von Reth <vonreth@kde.org>2022-10-11 10:21:01 +0300
commit1a43484e625cafcfa9cc2352a962d96512616362 (patch)
tree37d9e0d8906455be85ffbcc003297fad3d209108
parent5ebda46a764599e50ffde7f9210fad2486ed6554 (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.cpp14
-rw-r--r--src/gui/creds/httpcredentialsgui.cpp11
-rw-r--r--src/gui/loginrequireddialog/loginrequireddialog.cpp19
-rw-r--r--src/gui/loginrequireddialog/loginrequireddialog.h17
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;
};