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-08-18 16:35:54 +0300
committerFabian Müller <fmueller@owncloud.com>2022-08-22 23:07:24 +0300
commit6d4577b9b4b962e5cace402aefcde56db7114e18 (patch)
tree41cfde6bb42c6003e42c3bca73c6d4861be7002c
parent99e2e6975f75c170b50794302da518f2b4205b80 (diff)
Use the same login widgets everywherework/loginwidgets-wizard
This commit adapts the new widgets created for the login required dialog (#10011) to be used within the new setup wizard, providing a unified experience for our users.
-rw-r--r--src/gui/accountsettings.cpp26
-rw-r--r--src/gui/accountsettings.h7
-rw-r--r--src/gui/creds/httpcredentialsgui.cpp19
-rw-r--r--src/gui/creds/httpcredentialsgui.h1
-rw-r--r--src/gui/loginrequireddialog/CMakeLists.txt10
-rw-r--r--src/gui/loginrequireddialog/abstractloginrequiredwidget.h23
-rw-r--r--src/gui/loginrequireddialog/abstractloginwidget.cpp (renamed from src/gui/loginrequireddialog/abstractloginrequiredwidget.cpp)4
-rw-r--r--src/gui/loginrequireddialog/abstractloginwidget.h16
-rw-r--r--src/gui/loginrequireddialog/basicloginwidget.cpp78
-rw-r--r--src/gui/loginrequireddialog/basicloginwidget.h60
-rw-r--r--src/gui/loginrequireddialog/basicloginwidget.ui129
-rw-r--r--src/gui/loginrequireddialog/httploginrequiredwidget.cpp59
-rw-r--r--src/gui/loginrequireddialog/httploginrequiredwidget.h51
-rw-r--r--src/gui/loginrequireddialog/httploginrequiredwidget.ui101
-rw-r--r--src/gui/loginrequireddialog/loginrequireddialog.cpp20
-rw-r--r--src/gui/loginrequireddialog/loginrequireddialog.h12
-rw-r--r--src/gui/loginrequireddialog/loginrequireddialog.ui185
-rw-r--r--src/gui/loginrequireddialog/oauthloginrequiredwidget.cpp70
-rw-r--r--src/gui/loginrequireddialog/oauthloginrequiredwidget.ui45
-rw-r--r--src/gui/loginrequireddialog/oauthloginwidget.cpp53
-rw-r--r--src/gui/loginrequireddialog/oauthloginwidget.h (renamed from src/gui/loginrequireddialog/oauthloginrequiredwidget.h)22
-rw-r--r--src/gui/loginrequireddialog/oauthloginwidget.ui126
-rw-r--r--src/gui/newwizard/CMakeLists.txt10
-rw-r--r--src/gui/newwizard/pages/basiccredentialssetupwizardpage.cpp31
-rw-r--r--src/gui/newwizard/pages/basiccredentialssetupwizardpage.h4
-rw-r--r--src/gui/newwizard/pages/basiccredentialssetupwizardpage.ui182
-rw-r--r--src/gui/newwizard/pages/credentialssetupwizardpage.ui151
-rw-r--r--src/gui/newwizard/pages/oauthcredentialssetupwizardpage.cpp23
-rw-r--r--src/gui/newwizard/pages/oauthcredentialssetupwizardpage.h4
-rw-r--r--src/gui/newwizard/pages/oauthcredentialssetupwizardpage.ui205
-rw-r--r--src/gui/newwizard/setupwizardwindow.cpp6
-rw-r--r--src/libsync/creds/httpcredentials.cpp2
-rw-r--r--src/resources/wizard/style.qss2
33 files changed, 868 insertions, 869 deletions
diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp
index 4fd6bbc59..c61de6762 100644
--- a/src/gui/accountsettings.cpp
+++ b/src/gui/accountsettings.cpp
@@ -57,7 +57,7 @@
#include "account.h"
#include "askexperimentalvirtualfilesfeaturemessagebox.h"
#include "loginrequireddialog.h"
-#include "oauthloginrequiredwidget.h"
+#include "oauthloginwidget.h"
namespace OCC {
@@ -805,12 +805,30 @@ void AccountSettings::slotAccountStateChanged()
qCDebug(lcAccountSettings) << "showing modal dialog asking user to log in again via OAuth2";
- auto *contentWidget = new OAuthLoginRequiredWidget(account);
+ auto *contentWidget = new OAuthLoginWidget();
+
_askForOAuthLoginDialog = new LoginRequiredDialog(contentWidget, ocApp()->gui()->settingsDialog());
+ connect(contentWidget, &OAuthLoginWidget::copyUrlToClipboardButtonClicked, _askForOAuthLoginDialog, [account]() {
+ // TODO: use authorisationLinkAsync
+ auto link = qobject_cast<HttpCredentialsGui *>(account->credentials())->authorisationLink().toString();
+ ocApp()->clipboard()->setText(link);
+ });
+
+ connect(contentWidget, &OAuthLoginWidget::openBrowserButtonClicked, _askForOAuthLoginDialog, [cred]() {
+ cred->openBrowser();
+ });
+
+ contentWidget->setEnabled(false);
+ connect(cred, &HttpCredentialsGui::authorisationLinkChanged, this, [contentWidget]() {
+ 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,
@@ -825,6 +843,10 @@ void AccountSettings::slotAccountStateChanged()
_askForOAuthLoginDialog->show();
ocApp()->gui()->raiseDialog(_askForOAuthLoginDialog);
+
+ QTimer::singleShot(0, [contentWidget]() {
+ contentWidget->setFocus(Qt::OtherFocusReason);
+ });
} else {
showConnectionLabel(tr("Connecting to %1...").arg(serverWithUser));
}
diff --git a/src/gui/accountsettings.h b/src/gui/accountsettings.h
index 694366093..2863a888b 100644
--- a/src/gui/accountsettings.h
+++ b/src/gui/accountsettings.h
@@ -22,9 +22,10 @@
#include <QTimer>
#include "folder.h"
-#include "quotainfo.h"
-#include "progressdispatcher.h"
+#include "loginrequireddialog.h"
#include "owncloudgui.h"
+#include "progressdispatcher.h"
+#include "quotainfo.h"
class QModelIndex;
class QNetworkReply;
@@ -105,7 +106,7 @@ private:
QAction *_addAccountAction;
// needed to make sure we show only one dialog at a time
- QPointer<QDialog> _askForOAuthLoginDialog = nullptr;
+ QPointer<LoginRequiredDialog> _askForOAuthLoginDialog = nullptr;
};
} // namespace OCC
diff --git a/src/gui/creds/httpcredentialsgui.cpp b/src/gui/creds/httpcredentialsgui.cpp
index c35b5295d..707725977 100644
--- a/src/gui/creds/httpcredentialsgui.cpp
+++ b/src/gui/creds/httpcredentialsgui.cpp
@@ -16,8 +16,8 @@
#include "creds/httpcredentialsgui.h"
#include "account.h"
#include "application.h"
+#include "basicloginwidget.h"
#include "common/asserts.h"
-#include "httploginrequiredwidget.h"
#include "loginrequireddialog.h"
#include "networkjobs.h"
#include "settingsdialog.h"
@@ -113,13 +113,20 @@ void HttpCredentialsGui::asyncAuthResult(OAuth::Result r, const QString &user,
void HttpCredentialsGui::showDialog()
{
- auto *contentWidget = new HttpLoginRequiredWidget(_account->sharedFromThis());
+ auto *contentWidget = new BasicLoginWidget();
+ contentWidget->setServerUrl(_account->url());
+ contentWidget->forceUsername(_account->davUser());
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."));
+
+ // in this case, we want to use the login button
+ dialog->addLogInButton();
connect(dialog, &LoginRequiredDialog::finished, ocApp()->gui()->settingsDialog(), [this, contentWidget](const int result) {
if (result == QDialog::Accepted) {
+ Q_ASSERT(contentWidget->username() == _account->davUser());
_password = contentWidget->password();
_refreshToken.clear();
_ready = true;
@@ -132,12 +139,10 @@ void HttpCredentialsGui::showDialog()
dialog->open();
ownCloudGui::raiseDialog(dialog);
-}
-QString HttpCredentialsGui::requestAppPasswordText(const Account *account)
-{
- return tr("<a href=\"%1\">Click here</a> to request an app password from the web interface.")
- .arg(Utility::concatUrlPath(account->url(), QStringLiteral("/index.php/settings/personal?sectionid=security#apppasswords")).toString());
+ QTimer::singleShot(0, [contentWidget]() {
+ contentWidget->setFocus(Qt::OtherFocusReason);
+ });
}
QUrl HttpCredentialsGui::authorisationLink() const
diff --git a/src/gui/creds/httpcredentialsgui.h b/src/gui/creds/httpcredentialsgui.h
index d567ac8a3..c7fba54e8 100644
--- a/src/gui/creds/httpcredentialsgui.h
+++ b/src/gui/creds/httpcredentialsgui.h
@@ -54,7 +54,6 @@ public:
*/
void askFromUser() override;
- static QString requestAppPasswordText(const Account *account);
private slots:
void asyncAuthResult(OAuth::Result, const QString &user, const QString &accessToken, const QString &refreshToken, const QString &displayName);
void showDialog();
diff --git a/src/gui/loginrequireddialog/CMakeLists.txt b/src/gui/loginrequireddialog/CMakeLists.txt
index 6119d99f8..3fca291df 100644
--- a/src/gui/loginrequireddialog/CMakeLists.txt
+++ b/src/gui/loginrequireddialog/CMakeLists.txt
@@ -2,13 +2,13 @@ add_library(loginrequireddialog STATIC
loginrequireddialog.cpp
loginrequireddialog.ui
- abstractloginrequiredwidget.cpp
+ abstractloginwidget.cpp
- oauthloginrequiredwidget.cpp
- oauthloginrequiredwidget.ui
+ oauthloginwidget.cpp
+ oauthloginwidget.ui
- httploginrequiredwidget.cpp
- httploginrequiredwidget.ui
+ basicloginwidget.cpp
+ basicloginwidget.ui
)
target_link_libraries(loginrequireddialog PUBLIC Qt5::Widgets libsync)
set_target_properties(loginrequireddialog PROPERTIES AUTOUIC ON AUTORCC ON)
diff --git a/src/gui/loginrequireddialog/abstractloginrequiredwidget.h b/src/gui/loginrequireddialog/abstractloginrequiredwidget.h
deleted file mode 100644
index 1017bf666..000000000
--- a/src/gui/loginrequireddialog/abstractloginrequiredwidget.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#pragma once
-
-#include <QAbstractButton>
-#include <QDialogButtonBox>
-#include <QList>
-#include <QWidget>
-
-namespace OCC {
-
-class AbstractLoginRequiredWidget : public QWidget
-{
-public:
- /**
- * Buttons to add to the parent dialog's lower right corner.
- * @return list of buttons
- */
- virtual QList<QPair<QAbstractButton *, QDialogButtonBox::ButtonRole>> buttons() = 0;
-
-protected:
- explicit AbstractLoginRequiredWidget(QWidget *parent = nullptr);
-};
-
-} // OCC
diff --git a/src/gui/loginrequireddialog/abstractloginrequiredwidget.cpp b/src/gui/loginrequireddialog/abstractloginwidget.cpp
index 536015ee5..d86f65b8a 100644
--- a/src/gui/loginrequireddialog/abstractloginrequiredwidget.cpp
+++ b/src/gui/loginrequireddialog/abstractloginwidget.cpp
@@ -12,11 +12,11 @@
* for more details.
*/
-#include "abstractloginrequiredwidget.h"
+#include "abstractloginwidget.h"
namespace OCC {
-AbstractLoginRequiredWidget::AbstractLoginRequiredWidget(QWidget *parent)
+AbstractLoginWidget::AbstractLoginWidget(QWidget *parent)
: QWidget(parent)
{
}
diff --git a/src/gui/loginrequireddialog/abstractloginwidget.h b/src/gui/loginrequireddialog/abstractloginwidget.h
new file mode 100644
index 000000000..0c56b0840
--- /dev/null
+++ b/src/gui/loginrequireddialog/abstractloginwidget.h
@@ -0,0 +1,16 @@
+#pragma once
+
+#include <QAbstractButton>
+#include <QDialogButtonBox>
+#include <QList>
+#include <QWidget>
+
+namespace OCC {
+
+class AbstractLoginWidget : public QWidget
+{
+protected:
+ explicit AbstractLoginWidget(QWidget *parent = nullptr);
+};
+
+} // OCC
diff --git a/src/gui/loginrequireddialog/basicloginwidget.cpp b/src/gui/loginrequireddialog/basicloginwidget.cpp
new file mode 100644
index 000000000..8831184e5
--- /dev/null
+++ b/src/gui/loginrequireddialog/basicloginwidget.cpp
@@ -0,0 +1,78 @@
+/*
+* Copyright (C) Fabian Müller <fmueller@owncloud.com>
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but
+* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+* for more details.
+*/
+
+#include "basicloginwidget.h"
+#include "ui_basicloginwidget.h"
+
+#include "creds/httpcredentials.h"
+#include "gui/guiutility.h"
+#include "theme.h"
+
+#include <QPushButton>
+#include <QString>
+
+namespace OCC {
+
+BasicLoginWidget::BasicLoginWidget(QWidget *parent)
+ : AbstractLoginWidget(parent)
+ , _ui(new ::Ui::BasicLoginWidget)
+{
+ _ui->setupUi(this);
+
+ const QString usernameLabelText = Utility::enumToDisplayName(Theme::instance()->userIDType());
+ _ui->usernameLabel->setText(usernameLabelText);
+ _ui->usernameLineEdit->setPlaceholderText(usernameLabelText);
+
+ if (!Theme::instance()->userIDHint().isEmpty()) {
+ _ui->usernameLineEdit->setPlaceholderText(Theme::instance()->userIDHint());
+ }
+
+ qDebug() << _ui->usernameLabel->isEnabled();
+ qDebug() << _ui->usernameLineEdit->isEnabled();
+
+ Utility::setModal(this);
+
+ setFocusProxy(_ui->usernameLineEdit);
+}
+
+BasicLoginWidget::~BasicLoginWidget()
+{
+ delete _ui;
+}
+
+void BasicLoginWidget::setServerUrl(const QUrl &serverUrl, const QString &linkStyle)
+{
+ const QString appPasswordUrl = QStringLiteral("%1/settings/personal?sectionid=security#apppasswords").arg(serverUrl.toString());
+ _ui->appPasswordLabel->setText(tr("Click <a style='%1' href='%2'>here</a> to request an app password on the server.").arg(linkStyle, appPasswordUrl));
+}
+
+void BasicLoginWidget::forceUsername(const QString &username)
+{
+ _ui->usernameLineEdit->setText(username);
+ _ui->usernameLineEdit->setEnabled(false);
+
+ setFocusProxy(_ui->passwordLineEdit);
+}
+
+QString BasicLoginWidget::username()
+{
+ return _ui->usernameLineEdit->text();
+}
+
+QString BasicLoginWidget::password()
+{
+ return _ui->passwordLineEdit->text();
+}
+
+} // OCC
diff --git a/src/gui/loginrequireddialog/basicloginwidget.h b/src/gui/loginrequireddialog/basicloginwidget.h
new file mode 100644
index 000000000..4a1d8afa7
--- /dev/null
+++ b/src/gui/loginrequireddialog/basicloginwidget.h
@@ -0,0 +1,60 @@
+/*
+* Copyright (C) Fabian Müller <fmueller@owncloud.com>
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but
+* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+* for more details.
+*/
+
+#pragma once
+
+#include "abstractloginwidget.h"
+#include "account.h"
+
+#include <QLabel>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QWidget>
+
+namespace Ui {
+class BasicLoginWidget;
+}
+
+namespace OCC {
+
+class BasicLoginWidget : public AbstractLoginWidget
+{
+ Q_OBJECT
+
+public:
+ explicit BasicLoginWidget(QWidget *parent = nullptr);
+ ~BasicLoginWidget() override;
+
+ /**
+ * Update a label's text to provide a link directly to app password configuration on the web interface.
+ * @param serverUrl URL to ownCloud server instance
+ * @param linkStyle custom style to set on the app password link (needed for the setup wizard)
+ */
+ void setServerUrl(const QUrl &serverUrl, const QString &linkStyle = QString());
+
+ /**
+ * Enter provided username into line edit and lock it from user interaction.
+ * For use primarily with WebFinger.
+ * @param username username to use
+ */
+ void forceUsername(const QString &username);
+
+ QString username();
+ QString password();
+
+private:
+ ::Ui::BasicLoginWidget *_ui;
+};
+
+} // OCC
diff --git a/src/gui/loginrequireddialog/basicloginwidget.ui b/src/gui/loginrequireddialog/basicloginwidget.ui
new file mode 100644
index 000000000..c526be4d7
--- /dev/null
+++ b/src/gui/loginrequireddialog/basicloginwidget.ui
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>BasicLoginWidget</class>
+ <widget class="QWidget" name="BasicLoginWidget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>353</width>
+ <height>93</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="windowTitle">
+ <string>BasicLoginWidget</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="appPasswordLabel">
+ <property name="text">
+ <string notr="true">appPasswordLabel [placeholder]</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0,1">
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QFormLayout" name="formLayout_2">
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="usernameLineEdit">
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="placeholderText">
+ <string>Username</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="passwordLineEdit">
+ <property name="minimumSize">
+ <size>
+ <width>150</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="echoMode">
+ <enum>QLineEdit::Password</enum>
+ </property>
+ <property name="placeholderText">
+ <string>Password</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="passwordLabel">
+ <property name="text">
+ <string>Password</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="usernameLabel">
+ <property name="text">
+ <string>Username</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/gui/loginrequireddialog/httploginrequiredwidget.cpp b/src/gui/loginrequireddialog/httploginrequiredwidget.cpp
deleted file mode 100644
index 15e810d64..000000000
--- a/src/gui/loginrequireddialog/httploginrequiredwidget.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-* Copyright (C) Fabian Müller <fmueller@owncloud.com>
-*
-* This program is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation; either version 2 of the License, or
-* (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful, but
-* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-* for more details.
-*/
-
-#include "httploginrequiredwidget.h"
-#include "ui_httploginrequiredwidget.h"
-
-#include "creds/httpcredentials.h"
-#include "gui/guiutility.h"
-
-#include <QPushButton>
-#include <QString>
-
-namespace OCC {
-
-HttpLoginRequiredWidget::HttpLoginRequiredWidget(AccountPtr accountPtr, QWidget *parent)
- : AbstractLoginRequiredWidget(parent)
- , _ui(new ::Ui::HttpLoginRequiredWidget)
- , _logInButton(new QPushButton(tr("Log in"), this))
-{
- _ui->setupUi(this);
-
- Utility::setModal(this);
-
- const QString appPasswordUrl = QStringLiteral("%1/settings/personal?sectionid=security#apppasswords").arg(accountPtr->url().toString());
-
- _ui->loginRequiredLabel->setText(tr("The account %1 is currently logged out.").arg(accountPtr->displayName()));
- _ui->appPasswordLabel->setText(tr("Click <a href='%1'>here</a> to request an app password on the server.").arg(appPasswordUrl));
-
- _ui->usernameLineEdit->setText(accountPtr->davUser());
-}
-
-HttpLoginRequiredWidget::~HttpLoginRequiredWidget()
-{
- delete _ui;
-}
-QList<QPair<QAbstractButton *, QDialogButtonBox::ButtonRole>> HttpLoginRequiredWidget::buttons()
-{
- return {
- { _logInButton, QDialogButtonBox::AcceptRole },
- };
-}
-
-QString HttpLoginRequiredWidget::password() const
-{
- return _ui->passwordLineEdit->text();
-}
-
-} // OCC
diff --git a/src/gui/loginrequireddialog/httploginrequiredwidget.h b/src/gui/loginrequireddialog/httploginrequiredwidget.h
deleted file mode 100644
index fce2cefd5..000000000
--- a/src/gui/loginrequireddialog/httploginrequiredwidget.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-* Copyright (C) Fabian Müller <fmueller@owncloud.com>
-*
-* This program is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation; either version 2 of the License, or
-* (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful, but
-* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-* for more details.
-*/
-
-#pragma once
-
-#include "abstractloginrequiredwidget.h"
-#include "account.h"
-
-#include <QPushButton>
-#include <QWidget>
-
-namespace Ui {
-class HttpLoginRequiredWidget;
-}
-
-namespace OCC {
-
-class HttpLoginRequiredWidget : public AbstractLoginRequiredWidget
-{
- Q_OBJECT
-
-public:
- explicit HttpLoginRequiredWidget(AccountPtr accountPtr, QWidget *parent = nullptr);
- ~HttpLoginRequiredWidget() override;
-
- QList<QPair<QAbstractButton *, QDialogButtonBox::ButtonRole>> buttons() override;
-
- /**
- * Get user-provided password.
- * @return password string
- */
- QString password() const;
-
-private:
- ::Ui::HttpLoginRequiredWidget *_ui;
-
- QPushButton *_logInButton;
-};
-
-} // OCC
diff --git a/src/gui/loginrequireddialog/httploginrequiredwidget.ui b/src/gui/loginrequireddialog/httploginrequiredwidget.ui
deleted file mode 100644
index 3f372ffa1..000000000
--- a/src/gui/loginrequireddialog/httploginrequiredwidget.ui
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>HttpLoginRequiredWidget</class>
- <widget class="QWidget" name="HttpLoginRequiredWidget">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>400</width>
- <height>300</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>HttpLoginRequiredWidget</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QLabel" name="loginRequiredLabel">
- <property name="text">
- <string notr="true">login required [placeholder]</string>
- </property>
- <property name="textFormat">
- <enum>Qt::RichText</enum>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Please enter your password to log in again.</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="appPasswordLabel">
- <property name="text">
- <string notr="true">appPasswordLabel [placeholder]</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QFormLayout" name="formLayout_2">
- <item row="1" column="1">
- <widget class="QLineEdit" name="usernameLineEdit">
- <property name="enabled">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLineEdit" name="passwordLineEdit">
- <property name="echoMode">
- <enum>QLineEdit::Password</enum>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="passwordLabel">
- <property name="text">
- <string>Password</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="usernameLabel">
- <property name="text">
- <string>Username</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/gui/loginrequireddialog/loginrequireddialog.cpp b/src/gui/loginrequireddialog/loginrequireddialog.cpp
index 549bca564..aaa86c277 100644
--- a/src/gui/loginrequireddialog/loginrequireddialog.cpp
+++ b/src/gui/loginrequireddialog/loginrequireddialog.cpp
@@ -24,13 +24,13 @@
namespace OCC {
-LoginRequiredDialog::LoginRequiredDialog(AbstractLoginRequiredWidget *contentWidget, QWidget *parent)
+LoginRequiredDialog::LoginRequiredDialog(AbstractLoginWidget *contentWidget, QWidget *parent)
: QDialog(parent)
, _ui(new ::Ui::LoginRequiredDialog)
{
_ui->setupUi(this);
- _ui->iconLabel->setPixmap(Theme::instance()->applicationIcon().pixmap(64, 64));
+ _ui->iconLabel->setPixmap(Theme::instance()->applicationIcon().pixmap(128, 128));
// we want a custom text, but we make use of the button box's built-in reject role
_ui->rightButtonBox->addButton(tr("Log out"), QDialogButtonBox::RejectRole);
@@ -39,17 +39,13 @@ LoginRequiredDialog::LoginRequiredDialog(AbstractLoginRequiredWidget *contentWid
connect(_ui->rightButtonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
connect(_ui->rightButtonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
- for (auto [button, role] : contentWidget->buttons()) {
- _ui->rightButtonBox->addButton(button, role);
- }
-
// 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);
Utility::setModal(this);
- setFixedSize(this->sizeHint());
+ setFixedSize(this->minimumSize());
}
LoginRequiredDialog::~LoginRequiredDialog()
@@ -57,4 +53,14 @@ LoginRequiredDialog::~LoginRequiredDialog()
delete _ui;
}
+void LoginRequiredDialog::setTopLabelText(const QString &newText)
+{
+ _ui->topLabel->setText(newText);
+}
+
+void LoginRequiredDialog::addLogInButton()
+{
+ _ui->rightButtonBox->addButton(tr("Log in"), QDialogButtonBox::AcceptRole);
+}
+
} // OCC
diff --git a/src/gui/loginrequireddialog/loginrequireddialog.h b/src/gui/loginrequireddialog/loginrequireddialog.h
index 725c28789..5ff3821dd 100644
--- a/src/gui/loginrequireddialog/loginrequireddialog.h
+++ b/src/gui/loginrequireddialog/loginrequireddialog.h
@@ -14,7 +14,7 @@
#pragma once
-#include "abstractloginrequiredwidget.h"
+#include "abstractloginwidget.h"
#include "account.h"
#include <QDialog>
@@ -29,9 +29,17 @@ class LoginRequiredDialog : public QDialog
Q_OBJECT
public:
- explicit LoginRequiredDialog(AbstractLoginRequiredWidget *contentWidget, QWidget *parent = nullptr);
+ explicit LoginRequiredDialog(AbstractLoginWidget *contentWidget, QWidget *parent = nullptr);
~LoginRequiredDialog() override;
+ void setTopLabelText(const QString &newText);
+
+ /**
+ * Add a "log in" button to the dialog. When clicked, the dialog is accepted.
+ * For use with HTTP basic authentication.
+ */
+ void addLogInButton();
+
private:
::Ui::LoginRequiredDialog *_ui;
};
diff --git a/src/gui/loginrequireddialog/loginrequireddialog.ui b/src/gui/loginrequireddialog/loginrequireddialog.ui
index 422a5c87d..a10e02bcc 100644
--- a/src/gui/loginrequireddialog/loginrequireddialog.ui
+++ b/src/gui/loginrequireddialog/loginrequireddialog.ui
@@ -6,65 +6,140 @@
<rect>
<x>0</x>
<y>0</y>
- <width>445</width>
- <height>135</height>
+ <width>508</width>
+ <height>239</height>
</rect>
</property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
<property name="windowTitle">
<string>Login required</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
+ <layout class="QVBoxLayout" name="verticalLayout_2" stretch="1,0,0">
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="0,1">
+ <layout class="QHBoxLayout" name="horizontalLayout_3" stretch="0,0">
<item>
- <widget class="QLabel" name="iconLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string notr="true">icon (placeholder)</string>
- </property>
- </widget>
+ <layout class="QVBoxLayout" name="verticalLayout" stretch="0,1">
+ <item>
+ <widget class="QLabel" name="iconLabel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>128</width>
+ <height>128</height>
+ </size>
+ </property>
+ <property name="text">
+ <string notr="true">icon (placeholder)</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
</item>
<item>
- <widget class="QStackedWidget" name="contentWidget">
- <widget class="QWidget" name="page"/>
- <widget class="QWidget" name="page_2"/>
- </widget>
+ <layout class="QVBoxLayout" name="verticalLayout_3" stretch="0,0,1">
+ <item>
+ <widget class="QLabel" name="topLabel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>350</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string notr="true">top label [placeholder]</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QStackedWidget" name="contentWidget">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ <widget class="OCC::BasicLoginWidget" name="basicLoginWidget"/>
+ <widget class="OCC::OAuthLoginWidget" name="oauthLoginWidget"/>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>5</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
</item>
</layout>
</item>
<item>
+ <spacer name="verticalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>5</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
- <widget class="QDialogButtonBox" name="leftButtonBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>10</width>
- <height>10</height>
- </size>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::NoButton</set>
- </property>
- </widget>
- </item>
- <item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@@ -80,17 +155,11 @@
<item>
<widget class="QDialogButtonBox" name="rightButtonBox">
<property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize">
- <size>
- <width>10</width>
- <height>10</height>
- </size>
- </property>
<property name="standardButtons">
<set>QDialogButtonBox::NoButton</set>
</property>
@@ -100,6 +169,20 @@
</item>
</layout>
</widget>
+ <customwidgets>
+ <customwidget>
+ <class>OCC::BasicLoginWidget</class>
+ <extends>QWidget</extends>
+ <header>gui/loginrequireddialog/basicloginwidget.h</header>
+ <container>1</container>
+ </customwidget>
+ <customwidget>
+ <class>OCC::OAuthLoginWidget</class>
+ <extends>QWidget</extends>
+ <header>gui/loginrequireddialog/oauthloginwidget.h</header>
+ <container>1</container>
+ </customwidget>
+ </customwidgets>
<resources>
<include location="../../resources/client.qrc"/>
</resources>
diff --git a/src/gui/loginrequireddialog/oauthloginrequiredwidget.cpp b/src/gui/loginrequireddialog/oauthloginrequiredwidget.cpp
deleted file mode 100644
index de81e899b..000000000
--- a/src/gui/loginrequireddialog/oauthloginrequiredwidget.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-* Copyright (C) Fabian Müller <fmueller@owncloud.com>
-*
-* This program is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation; either version 2 of the License, or
-* (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful, but
-* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-* for more details.
-*/
-
-#include "oauthloginrequiredwidget.h"
-#include "ui_oauthloginrequiredwidget.h"
-
-#include "gui/application.h"
-#include "gui/creds/httpcredentialsgui.h"
-#include "gui/guiutility.h"
-
-#include <QClipboard>
-
-namespace OCC {
-
-OAuthLoginRequiredWidget::OAuthLoginRequiredWidget(AccountPtr accountPtr, QWidget *parent)
- : AbstractLoginRequiredWidget(parent)
- , _ui(new ::Ui::OAuthLoginRequiredWidget)
- , _openBrowserButton(new QPushButton(tr("Open Browser"), this))
- , _copyURLToClipboardButton(new QPushButton(Utility::getCoreIcon(QStringLiteral("clipboard")), tr("Copy URL to clipboard"), this))
-{
- _ui->setupUi(this);
-
- Utility::setModal(this);
-
- _ui->loginRequiredLabel->setText(tr("The account %1 is currently logged out.\n\nPlease authenticate using your browser.").arg(accountPtr->displayName()));
-
- auto creds = qobject_cast<HttpCredentialsGui *>(accountPtr->credentials());
- Q_ASSERT(creds != nullptr);
-
- connect(creds, &HttpCredentialsGui::authorisationLinkChanged, this, [this]() {
- _copyURLToClipboardButton->setEnabled(true);
- _openBrowserButton->setEnabled(true);
- });
-
- connect(_openBrowserButton, &QPushButton::clicked, this, [this, accountPtr]() {
- qobject_cast<HttpCredentialsGui *>(accountPtr->credentials())->openBrowser();
- _openBrowserButton->setText(tr("Reopen browser"));
- });
- connect(_copyURLToClipboardButton, &QPushButton::clicked, this, [accountPtr]() {
- // TODO: use authorisationLinkAsync
- auto link = qobject_cast<HttpCredentialsGui *>(accountPtr->credentials())->authorisationLink().toString();
- ocApp()->clipboard()->setText(link);
- });
-}
-
-OAuthLoginRequiredWidget::~OAuthLoginRequiredWidget()
-{
- delete _ui;
-}
-
-QList<QPair<QAbstractButton *, QDialogButtonBox::ButtonRole>> OAuthLoginRequiredWidget::buttons()
-{
- return {
- { _openBrowserButton, QDialogButtonBox::ActionRole },
- { _copyURLToClipboardButton, QDialogButtonBox::ActionRole },
- };
-}
-
-}
diff --git a/src/gui/loginrequireddialog/oauthloginrequiredwidget.ui b/src/gui/loginrequireddialog/oauthloginrequiredwidget.ui
deleted file mode 100644
index 3e9f04901..000000000
--- a/src/gui/loginrequireddialog/oauthloginrequiredwidget.ui
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>OAuthLoginRequiredWidget</class>
- <widget class="QWidget" name="OAuthLoginRequiredWidget">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>334</width>
- <height>205</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>OAuthLoginRequiredWidget</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout" stretch="1">
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <widget class="QLabel" name="loginRequiredLabel">
- <property name="text">
- <string notr="true">login required [placeholder]</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignHCenter|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources>
- <include location="../../resources/client.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/src/gui/loginrequireddialog/oauthloginwidget.cpp b/src/gui/loginrequireddialog/oauthloginwidget.cpp
new file mode 100644
index 000000000..91f5e7738
--- /dev/null
+++ b/src/gui/loginrequireddialog/oauthloginwidget.cpp
@@ -0,0 +1,53 @@
+/*
+* Copyright (C) Fabian Müller <fmueller@owncloud.com>
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful, but
+* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+* for more details.
+*/
+
+#include "oauthloginwidget.h"
+#include "ui_oauthloginwidget.h"
+
+#include "gui/application.h"
+#include "gui/creds/httpcredentialsgui.h"
+#include "gui/guiutility.h"
+
+#include <QClipboard>
+
+namespace OCC {
+
+OAuthLoginWidget::OAuthLoginWidget(QWidget *parent)
+ : AbstractLoginWidget(parent)
+ , _ui(new ::Ui::OAuthLoginWidget)
+{
+ _ui->setupUi(this);
+
+ Utility::setModal(this);
+
+ connect(_ui->openBrowserButton, &QPushButton::clicked, this, &OAuthLoginWidget::openBrowserButtonClicked);
+ connect(_ui->copyUrlToClipboardButton, &QPushButton::clicked, this, &OAuthLoginWidget::copyUrlToClipboardButtonClicked);
+
+ // depending on the theme we have to use a light or dark icon
+ _ui->copyUrlToClipboardButton->setIcon(Utility::getCoreIcon(QStringLiteral("clipboard")));
+
+ setFocusProxy(_ui->openBrowserButton);
+}
+
+OAuthLoginWidget::~OAuthLoginWidget()
+{
+ delete _ui;
+}
+
+void OAuthLoginWidget::setOpenBrowserButtonText(const QString &newText)
+{
+ _ui->openBrowserButton->setText(newText);
+}
+
+}
diff --git a/src/gui/loginrequireddialog/oauthloginrequiredwidget.h b/src/gui/loginrequireddialog/oauthloginwidget.h
index 7499f0e48..49eefc878 100644
--- a/src/gui/loginrequireddialog/oauthloginrequiredwidget.h
+++ b/src/gui/loginrequireddialog/oauthloginwidget.h
@@ -14,33 +14,35 @@
#pragma once
-#include "abstractloginrequiredwidget.h"
+#include "abstractloginwidget.h"
#include "account.h"
+#include <QLabel>
#include <QPushButton>
#include <QWidget>
namespace Ui {
-class OAuthLoginRequiredWidget;
+class OAuthLoginWidget;
}
namespace OCC {
-class OAuthLoginRequiredWidget : public AbstractLoginRequiredWidget
+class OAuthLoginWidget : public AbstractLoginWidget
{
Q_OBJECT
public:
- explicit OAuthLoginRequiredWidget(AccountPtr accountPtr, QWidget *parent = nullptr);
- ~OAuthLoginRequiredWidget() override;
+ explicit OAuthLoginWidget(QWidget *parent = nullptr);
+ ~OAuthLoginWidget() override;
- QList<QPair<QAbstractButton *, QDialogButtonBox::ButtonRole>> buttons() override;
+ void setOpenBrowserButtonText(const QString &newText);
-private:
- ::Ui::OAuthLoginRequiredWidget *_ui;
+Q_SIGNALS:
+ void openBrowserButtonClicked();
+ void copyUrlToClipboardButtonClicked();
- QPushButton *_openBrowserButton;
- QPushButton *_copyURLToClipboardButton;
+private:
+ ::Ui::OAuthLoginWidget *_ui;
};
}
diff --git a/src/gui/loginrequireddialog/oauthloginwidget.ui b/src/gui/loginrequireddialog/oauthloginwidget.ui
new file mode 100644
index 000000000..5ebed1f68
--- /dev/null
+++ b/src/gui/loginrequireddialog/oauthloginwidget.ui
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>OAuthLoginWidget</class>
+ <widget class="QWidget" name="OAuthLoginWidget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>300</width>
+ <height>117</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>OAuthLoginWidget</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0,1">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QPushButton" name="openBrowserButton">
+ <property name="minimumSize">
+ <size>
+ <width>220</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>16</pointsize>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Open Browser</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>25</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="copyUrlToClipboardButton">
+ <property name="text">
+ <string>Copy URL to clipboard</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../../resources/client.qrc">
+ <normaloff>:/client/resources/light/clipboard.svg</normaloff>:/client/resources/light/clipboard.svg</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>25</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="../../resources/client.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/gui/newwizard/CMakeLists.txt b/src/gui/newwizard/CMakeLists.txt
index 7824a5d34..377efe0ef 100644
--- a/src/gui/newwizard/CMakeLists.txt
+++ b/src/gui/newwizard/CMakeLists.txt
@@ -12,18 +12,18 @@ add_library(newwizard STATIC
pages/webfingersetupwizardpage.h
pages/webfingersetupwizardpage.cpp
- pages/basiccredentialssetupwizardpage.ui
+ pages/credentialssetupwizardpage.ui
+
pages/basiccredentialssetupwizardpage.h
pages/basiccredentialssetupwizardpage.cpp
+ pages/oauthcredentialssetupwizardpage.h
+ pages/oauthcredentialssetupwizardpage.cpp
+
pages/accountconfiguredwizardpage.ui
pages/accountconfiguredwizardpage.h
pages/accountconfiguredwizardpage.cpp
- pages/oauthcredentialssetupwizardpage.ui
- pages/oauthcredentialssetupwizardpage.h
- pages/oauthcredentialssetupwizardpage.cpp
-
setupwizardwindow.ui
setupwizardwindow.h
setupwizardwindow.cpp
diff --git a/src/gui/newwizard/pages/basiccredentialssetupwizardpage.cpp b/src/gui/newwizard/pages/basiccredentialssetupwizardpage.cpp
index f87ffa622..f87a868ea 100644
--- a/src/gui/newwizard/pages/basiccredentialssetupwizardpage.cpp
+++ b/src/gui/newwizard/pages/basiccredentialssetupwizardpage.cpp
@@ -13,53 +13,48 @@
*/
#include "basiccredentialssetupwizardpage.h"
-#include "ui_basiccredentialssetupwizardpage.h"
+#include "ui_credentialssetupwizardpage.h"
#include "theme.h"
namespace OCC::Wizard {
BasicCredentialsSetupWizardPage::BasicCredentialsSetupWizardPage(const QUrl &serverUrl)
- : _ui(new ::Ui::BasicCredentialsSetupWizardPage)
+ : _ui(new ::Ui::CredentialsSetupWizardPage)
{
_ui->setupUi(this);
+ _ui->topLabel->setText(tr("Please enter your credentials to log in to your account."));
+
+ // bring the correct widget to the front
+ _ui->contentWidget->setCurrentWidget(_ui->basicLoginWidget);
+
+ _ui->basicLoginWidget->setServerUrl(serverUrl, QStringLiteral("color: %1").arg(Theme::instance()->wizardHeaderTitleColor().name()));
+
const QString linkColor = Theme::instance()->wizardHeaderTitleColor().name();
_ui->urlLabel->setText(tr("Connecting to <a href='%1' style='color: %2;'>%1</a>").arg(serverUrl.toString(), linkColor));
connect(this, &AbstractSetupWizardPage::pageDisplayed, this, [this]() {
- _ui->usernameLineEdit->setFocus();
+ _ui->basicLoginWidget->setFocus();
});
-
- const QString usernameLabelText = Utility::enumToDisplayName(Theme::instance()->userIDType());
- _ui->usernameLabel->setText(usernameLabelText);
- _ui->usernameLineEdit->setPlaceholderText(usernameLabelText);
-
- if (!Theme::instance()->userIDHint().isEmpty()) {
- _ui->usernameLineEdit->setPlaceholderText(Theme::instance()->userIDHint());
- }
-
- QString appPasswordUrl = QStringLiteral("%1/settings/personal?sectionid=security#apppasswords").arg(serverUrl.toString());
- _ui->appPasswordLabel->setText(tr("Click <a href='%1' style='color: %2;'>here</a> to set up an app password.").arg(appPasswordUrl, linkColor));
}
BasicCredentialsSetupWizardPage *BasicCredentialsSetupWizardPage::createForWebFinger(const QUrl &serverUrl, const QString &username)
{
auto page = new BasicCredentialsSetupWizardPage(serverUrl);
- page->_ui->usernameLineEdit->setText(username);
- page->_ui->usernameLineEdit->setEnabled(false);
+ page->_ui->basicLoginWidget->forceUsername(username);
return page;
}
QString BasicCredentialsSetupWizardPage::username() const
{
- return _ui->usernameLineEdit->text();
+ return _ui->basicLoginWidget->username();
}
QString BasicCredentialsSetupWizardPage::password() const
{
- return _ui->passwordLineEdit->text();
+ return _ui->basicLoginWidget->password();
}
BasicCredentialsSetupWizardPage::~BasicCredentialsSetupWizardPage()
diff --git a/src/gui/newwizard/pages/basiccredentialssetupwizardpage.h b/src/gui/newwizard/pages/basiccredentialssetupwizardpage.h
index bcb08f9c9..325cd84b2 100644
--- a/src/gui/newwizard/pages/basiccredentialssetupwizardpage.h
+++ b/src/gui/newwizard/pages/basiccredentialssetupwizardpage.h
@@ -17,7 +17,7 @@
#include "abstractsetupwizardpage.h"
namespace Ui {
-class BasicCredentialsSetupWizardPage;
+class CredentialsSetupWizardPage;
}
namespace OCC::Wizard {
@@ -38,7 +38,7 @@ public:
bool validateInput() override;
private:
- ::Ui::BasicCredentialsSetupWizardPage *_ui;
+ ::Ui::CredentialsSetupWizardPage *_ui;
};
}
diff --git a/src/gui/newwizard/pages/basiccredentialssetupwizardpage.ui b/src/gui/newwizard/pages/basiccredentialssetupwizardpage.ui
deleted file mode 100644
index 14ab0b007..000000000
--- a/src/gui/newwizard/pages/basiccredentialssetupwizardpage.ui
+++ /dev/null
@@ -1,182 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>BasicCredentialsSetupWizardPage</class>
- <widget class="QWidget" name="BasicCredentialsSetupWizardPage">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>629</width>
- <height>434</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Form</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="spacing">
- <number>12</number>
- </property>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::MinimumExpanding</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="enterYourCredentialsLabel">
- <property name="text">
- <string>Enter your credentials</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Minimum</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="appPasswordLabel">
- <property name="text">
- <string notr="true">&lt;app password text&gt; (placeholder)</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- <property name="openExternalLinks">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QFormLayout" name="formLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="usernameLabel">
- <property name="text">
- <string notr="true">Username (placeholder)</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="usernameLineEdit">
- <property name="minimumSize">
- <size>
- <width>200</width>
- <height>0</height>
- </size>
- </property>
- <property name="placeholderText">
- <string notr="true">Username (placeholder)</string>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="passwordLabel">
- <property name="text">
- <string>Password</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QLineEdit" name="passwordLineEdit">
- <property name="minimumSize">
- <size>
- <width>200</width>
- <height>0</height>
- </size>
- </property>
- <property name="echoMode">
- <enum>QLineEdit::Password</enum>
- </property>
- <property name="placeholderText">
- <string>Password</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="urlLabel">
- <property name="text">
- <string notr="true">&lt;server URL&gt; (placeholder)</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- <property name="openExternalLinks">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/src/gui/newwizard/pages/credentialssetupwizardpage.ui b/src/gui/newwizard/pages/credentialssetupwizardpage.ui
new file mode 100644
index 000000000..6d3d6fe72
--- /dev/null
+++ b/src/gui/newwizard/pages/credentialssetupwizardpage.ui
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>CredentialsSetupWizardPage</class>
+ <widget class="QWidget" name="CredentialsSetupWizardPage">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>409</width>
+ <height>306</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout" stretch="1,0,1,0,1,0">
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="topLabel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>250</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>350</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string notr="true">top label [placeholder]</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Maximum</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>10</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QStackedWidget" name="contentWidget">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>500</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <property name="currentIndex">
+ <number>1</number>
+ </property>
+ <widget class="OCC::BasicLoginWidget" name="basicLoginWidget"/>
+ <widget class="OCC::OAuthLoginWidget" name="oauthLoginWidget"/>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="urlLabel">
+ <property name="text">
+ <string notr="true">&lt;server URL&gt; (placeholder)</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>OCC::BasicLoginWidget</class>
+ <extends>QWidget</extends>
+ <header>gui/loginrequireddialog/basicloginwidget.h</header>
+ <container>1</container>
+ </customwidget>
+ <customwidget>
+ <class>OCC::OAuthLoginWidget</class>
+ <extends>QWidget</extends>
+ <header>gui/loginrequireddialog/oauthloginwidget.h</header>
+ <container>1</container>
+ </customwidget>
+ </customwidgets>
+ <resources>
+ <include location="../../../resources/client.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/gui/newwizard/pages/oauthcredentialssetupwizardpage.cpp b/src/gui/newwizard/pages/oauthcredentialssetupwizardpage.cpp
index e53d90302..42ba026ab 100644
--- a/src/gui/newwizard/pages/oauthcredentialssetupwizardpage.cpp
+++ b/src/gui/newwizard/pages/oauthcredentialssetupwizardpage.cpp
@@ -13,7 +13,7 @@
*/
#include "oauthcredentialssetupwizardpage.h"
-#include "ui_oauthcredentialssetupwizardpage.h"
+#include "ui_credentialssetupwizardpage.h"
#include "gui/guiutility.h"
#include "theme.h"
@@ -21,33 +21,33 @@
namespace OCC::Wizard {
OAuthCredentialsSetupWizardPage::OAuthCredentialsSetupWizardPage(const QUrl &serverUrl)
- : _ui(new ::Ui::OAuthCredentialsSetupWizardPage)
+ : _ui(new ::Ui::CredentialsSetupWizardPage)
{
_ui->setupUi(this);
+ // bring the correct widget to the front
+ _ui->contentWidget->setCurrentWidget(_ui->oauthLoginWidget);
+
_ui->urlLabel->setText(tr("Connecting to <a href='%1' style='color: %2;'>%1</a>").arg(serverUrl.toString(), Theme::instance()->wizardHeaderTitleColor().name()));
// we want to give the user a chance to preserve their privacy when using a private proxy for instance
// therefore, we need to make sure the user can manually
// using clicked allows a user to "abort the click" (unlike pressed and released)
- connect(_ui->openBrowserButton, &QPushButton::clicked, this, [this]() {
+ connect(_ui->oauthLoginWidget, &OAuthLoginWidget::openBrowserButtonClicked, this, [this]() {
Q_EMIT openBrowserButtonPushed();
// change button title after first click
- _ui->openBrowserButton->setText(tr("Reopen Browser"));
+ _ui->oauthLoginWidget->setOpenBrowserButtonText(tr("Reopen Browser"));
});
- connect(_ui->copyUrlToClipboardButton, &QPushButton::clicked, this, [this]() {
+ connect(_ui->oauthLoginWidget, &OAuthLoginWidget::copyUrlToClipboardButtonClicked, this, [this]() {
Q_EMIT copyUrlToClipboardButtonPushed();
});
connect(this, &AbstractSetupWizardPage::pageDisplayed, this, [this]() {
- _ui->openBrowserButton->setFocus();
+ _ui->oauthLoginWidget->setFocus();
});
- _ui->pleaseLogIntoLabel->setText(tr("Please use your browser to log in to %1").arg(Theme::instance()->appNameGUI()));
-
- // depending on the theme we have to use a light or dark icon
- _ui->copyUrlToClipboardButton->setIcon(Utility::getCoreIcon(QStringLiteral("clipboard")));
+ _ui->topLabel->setText(tr("Please use your browser to log in to %1.").arg(Theme::instance()->appNameGUI()));
}
OAuthCredentialsSetupWizardPage::~OAuthCredentialsSetupWizardPage()
@@ -64,8 +64,7 @@ bool OAuthCredentialsSetupWizardPage::validateInput()
void OAuthCredentialsSetupWizardPage::setButtonsEnabled(bool enabled)
{
- _ui->copyUrlToClipboardButton->setEnabled(enabled);
- _ui->openBrowserButton->setEnabled(enabled);
+ _ui->oauthLoginWidget->setEnabled(enabled);
}
} // namespace OCC::Wizard
diff --git a/src/gui/newwizard/pages/oauthcredentialssetupwizardpage.h b/src/gui/newwizard/pages/oauthcredentialssetupwizardpage.h
index 7416f0e94..b1a6e8927 100644
--- a/src/gui/newwizard/pages/oauthcredentialssetupwizardpage.h
+++ b/src/gui/newwizard/pages/oauthcredentialssetupwizardpage.h
@@ -17,7 +17,7 @@
#include "abstractsetupwizardpage.h"
namespace Ui {
-class OAuthCredentialsSetupWizardPage;
+class CredentialsSetupWizardPage;
}
namespace OCC::Wizard {
@@ -39,7 +39,7 @@ Q_SIGNALS:
void copyUrlToClipboardButtonPushed();
private:
- ::Ui::OAuthCredentialsSetupWizardPage *_ui;
+ ::Ui::CredentialsSetupWizardPage *_ui;
};
} // namespace OCC::Wizard
diff --git a/src/gui/newwizard/pages/oauthcredentialssetupwizardpage.ui b/src/gui/newwizard/pages/oauthcredentialssetupwizardpage.ui
deleted file mode 100644
index 879a0eee3..000000000
--- a/src/gui/newwizard/pages/oauthcredentialssetupwizardpage.ui
+++ /dev/null
@@ -1,205 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>OAuthCredentialsSetupWizardPage</class>
- <widget class="QWidget" name="OAuthCredentialsSetupWizardPage">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>409</width>
- <height>306</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string>Form</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::MinimumExpanding</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="pleaseLogIntoLabel">
- <property name="text">
- <string notr="true">Please use your browser to log in to &lt;app name placeholder&gt;</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Maximum</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <widget class="QPushButton" name="openBrowserButton">
- <property name="minimumSize">
- <size>
- <width>170</width>
- <height>0</height>
- </size>
- </property>
- <property name="font">
- <font>
- <pointsize>14</pointsize>
- <weight>75</weight>
- <italic>false</italic>
- <bold>true</bold>
- <underline>false</underline>
- <strikeout>false</strikeout>
- </font>
- </property>
- <property name="text">
- <string>Open Browser</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="verticalSpacer_4">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Maximum</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>5</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <spacer name="horizontalSpacer_4">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>25</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="copyUrlToClipboardButton">
- <property name="text">
- <string>Copy URL to clipboard</string>
- </property>
- <property name="icon">
- <iconset resource="../../../resources/client.qrc">
- <normaloff>:/client/resources/light/clipboard.svg</normaloff>:/client/resources/light/clipboard.svg</iconset>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer_3">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>25</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="horizontalSpacer_2">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <spacer name="verticalSpacer_2">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::MinimumExpanding</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QLabel" name="urlLabel">
- <property name="text">
- <string notr="true">&lt;server URL&gt; (placeholder)</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- <resources>
- <include location="../../../resources/client.qrc"/>
- </resources>
- <connections/>
-</ui>
diff --git a/src/gui/newwizard/setupwizardwindow.cpp b/src/gui/newwizard/setupwizardwindow.cpp
index 385e0d5b8..800ea52e2 100644
--- a/src/gui/newwizard/setupwizardwindow.cpp
+++ b/src/gui/newwizard/setupwizardwindow.cpp
@@ -128,8 +128,10 @@ void SetupWizardWindow::displayPage(AbstractSetupWizardPage *page, SetupWizardSt
// bring to front if necessary
ownCloudGui::raiseDialog(this);
- // this can optionally be overwritten by the page
- Q_EMIT _currentPage->pageDisplayed();
+ QTimer::singleShot(0, [this]() {
+ // this can optionally be overwritten by the page
+ Q_EMIT _currentPage->pageDisplayed();
+ });
}
void SetupWizardWindow::slotStartTransition()
diff --git a/src/libsync/creds/httpcredentials.cpp b/src/libsync/creds/httpcredentials.cpp
index d515ec540..49f172cf0 100644
--- a/src/libsync/creds/httpcredentials.cpp
+++ b/src/libsync/creds/httpcredentials.cpp
@@ -218,7 +218,7 @@ void HttpCredentials::fetchFromKeychainHelper()
return;
}
const auto data = job->data().toString();
- if (OC_ENSURE(!data.isEmpty())) {
+ if (OC_ENSURE((!data.isEmpty()))) {
if (isUsingOAuth()) {
_refreshToken = data;
refreshAccessToken();
diff --git a/src/resources/wizard/style.qss b/src/resources/wizard/style.qss
index 63bf06c39..492610aa8 100644
--- a/src/resources/wizard/style.qss
+++ b/src/resources/wizard/style.qss
@@ -31,7 +31,7 @@
#contentWidget #usernameLabel,
#contentWidget #passwordLabel,
#contentWidget #appPasswordLabel,
-#contentWidget #pleaseLogIntoLabel,
+#contentWidget #topLabel,
#contentWidget #usernameLabel,
#contentWidget #passwordLabel,
#contentWidget #advancedConfigGroupBox::title