diff --git a/src/LoginPage.cpp b/src/LoginPage.cpp
index 20fb3888..6d96419a 100644
--- a/src/LoginPage.cpp
+++ b/src/LoginPage.cpp
@@ -81,6 +81,14 @@ LoginPage::LoginPage(QWidget *parent)
matrixid_input_ = new TextField(this);
matrixid_input_->setLabel(tr("Matrix ID"));
matrixid_input_->setPlaceholderText(tr("e.g @joe:matrix.org"));
+ matrixid_input_->setToolTip(
+ tr("Your login name. A mxid should start with @ followed by the user id. After the user "
+ "id you need to include your server name after a :.\nYou can also put your homeserver "
+ "address there, if your server doesn't support .well-known lookup.\nExample: "
+ "@user:server.my\nIf Nheko fails to discover your homeserver, it will show you a "
+ "field to enter the server manually."));
+ matrixid_input_->setValidator(
+ new QRegularExpressionValidator(QRegularExpression("@.+?:.{3,}"), this));
spinner_ = new LoadingIndicator(this);
spinner_->setFixedHeight(40);
@@ -97,13 +105,19 @@ LoginPage::LoginPage(QWidget *parent)
password_input_ = new TextField(this);
password_input_->setLabel(tr("Password"));
password_input_->setEchoMode(QLineEdit::Password);
+ password_input_->setToolTip("Your password.");
deviceName_ = new TextField(this);
deviceName_->setLabel(tr("Device name"));
+ deviceName_->setToolTip(
+ tr("A name for this device, which will be shown to others, when verifying your devices. "
+ "If none is provided, a random string is used for privacy purposes."));
serverInput_ = new TextField(this);
serverInput_->setLabel("Homeserver address");
serverInput_->setPlaceholderText("matrix.org");
+ serverInput_->setToolTip(tr("The address that can be used to contact you homeservers "
+ "client API.\nExample: https://server.my:8787"));
serverInput_->hide();
serverLayout_ = new QHBoxLayout();
diff --git a/src/RegisterPage.cpp b/src/RegisterPage.cpp
index 2833381d..a01f2140 100644
--- a/src/RegisterPage.cpp
+++ b/src/RegisterPage.cpp
@@ -85,17 +85,26 @@ RegisterPage::RegisterPage(QWidget *parent)
username_input_ = new TextField();
username_input_->setLabel(tr("Username"));
+ username_input_->setValidator(
+ new QRegularExpressionValidator(QRegularExpression("[a-z0-9._=/-]+"), this));
+ username_input_->setToolTip(tr("The username must not be empty, and must contain only the "
+ "characters a-z, 0-9, ., _, =, -, and /."));
password_input_ = new TextField();
password_input_->setLabel(tr("Password"));
password_input_->setEchoMode(QLineEdit::Password);
+ password_input_->setToolTip(tr("Please choose a secure password. The exact requirements "
+ "for password strength may depend on your server"));
password_confirmation_ = new TextField();
password_confirmation_->setLabel(tr("Password confirmation"));
password_confirmation_->setEchoMode(QLineEdit::Password);
server_input_ = new TextField();
- server_input_->setLabel(tr("Home Server"));
+ server_input_->setLabel(tr("Homeserver"));
+ server_input_->setToolTip(
+ tr("A server that allows registration. Since matrix is decentralized, you need to first "
+ "find a server you can register on or host your own."));
form_layout_->addWidget(username_input_, Qt::AlignHCenter, nullptr);
form_layout_->addWidget(password_input_, Qt::AlignHCenter, nullptr);
diff --git a/src/ui/TextField.cpp b/src/ui/TextField.cpp
index 4bb7596a..27584693 100644
--- a/src/ui/TextField.cpp
+++ b/src/ui/TextField.cpp
@@ -147,7 +147,10 @@ QColor
TextField::underlineColor() const
{
if (!underline_color_.isValid()) {
- return QPalette().color(QPalette::Highlight);
+ if (hasAcceptableInput() || !isModified())
+ return QPalette().color(QPalette::Highlight);
+ else
+ return Qt::red;
}
return underline_color_;
|