VCS: Improve submit message check

Do not show the "commit message is short" text while
the user is still typing the first words.

Therefore, make the initial timeout larger and restart
the timer whenever the submit message changes.

After the minimal subject length or a newline is entered,
switch to faster evaluation.

Change-Id: I41034ed2c8e71e81dae42685bc9ff310edca2543
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
Andre Hartmann
2023-07-24 09:25:00 +02:00
committed by André Hartmann
parent f0a24c8093
commit b4946da9ea
2 changed files with 22 additions and 5 deletions

View File

@@ -113,6 +113,7 @@ struct SubmitEditorWidgetPrivate
QActionPushButton *m_submitButton = nullptr; QActionPushButton *m_submitButton = nullptr;
QString m_description; QString m_description;
QTimer delayedVerifyDescriptionTimer; QTimer delayedVerifyDescriptionTimer;
int m_delayedVerifyDescriptionInterval = 2000;
int m_lineWidth = defaultLineWidth; int m_lineWidth = defaultLineWidth;
int m_activatedRow = -1; int m_activatedRow = -1;
@@ -154,7 +155,6 @@ SubmitEditorWidget::SubmitEditorWidget() :
d->descriptionLayout->addWidget(d->description); d->descriptionLayout->addWidget(d->description);
d->delayedVerifyDescriptionTimer.setSingleShot(true); d->delayedVerifyDescriptionTimer.setSingleShot(true);
d->delayedVerifyDescriptionTimer.setInterval(500);
connect(&d->delayedVerifyDescriptionTimer, &QTimer::timeout, connect(&d->delayedVerifyDescriptionTimer, &QTimer::timeout,
this, &SubmitEditorWidget::verifyDescription); this, &SubmitEditorWidget::verifyDescription);
@@ -337,6 +337,12 @@ void SubmitEditorWidget::wrapDescription()
} }
} }
void VcsBase::SubmitEditorWidget::clearDescriptionHint()
{
d->descriptionHint->setText(QString());
d->descriptionHint->setToolTip(QString());
}
QString SubmitEditorWidget::descriptionText() const QString SubmitEditorWidget::descriptionText() const
{ {
return d->m_description; return d->m_description;
@@ -579,8 +585,7 @@ void SubmitEditorWidget::hideDescription()
void SubmitEditorWidget::verifyDescription() void SubmitEditorWidget::verifyDescription()
{ {
if (!isEnabled()) { if (!isEnabled()) {
d->descriptionHint->setText(QString()); clearDescriptionHint();
d->descriptionHint->setToolTip(QString());
return; return;
} }
@@ -604,7 +609,6 @@ void SubmitEditorWidget::verifyDescription()
subjectLength = descriptionLength; subjectLength = descriptionLength;
} }
enum { MinSubjectLength = 20, MaxSubjectLength = 72, WarningSubjectLength = 55 };
QStringList hints; QStringList hints;
if (0 < subjectLength && subjectLength < MinSubjectLength) if (0 < subjectLength && subjectLength < MinSubjectLength)
hints.append(warning + Tr::tr("Warning: The commit subject is very short.")); hints.append(warning + Tr::tr("Warning: The commit subject is very short."));
@@ -635,7 +639,17 @@ void SubmitEditorWidget::verifyDescription()
void SubmitEditorWidget::descriptionTextChanged() void SubmitEditorWidget::descriptionTextChanged()
{ {
d->m_description = cleanupDescription(d->description->toPlainText()); d->m_description = cleanupDescription(d->description->toPlainText());
d->delayedVerifyDescriptionTimer.start();
if (d->m_description.isEmpty()) {
d->m_delayedVerifyDescriptionInterval = 2000;
clearDescriptionHint();
} else if (d->m_description.length() > MinSubjectLength || d->m_description.contains("\n")) {
d->m_delayedVerifyDescriptionInterval = 100;
} else {
d->m_delayedVerifyDescriptionInterval = 2000;
}
d->delayedVerifyDescriptionTimer.start(d->m_delayedVerifyDescriptionInterval);
wrapDescription(); wrapDescription();
trimDescription(); trimDescription();
// append field entries // append field entries

View File

@@ -95,6 +95,8 @@ protected:
void verifyDescription(); void verifyDescription();
private: private:
enum { MinSubjectLength = 20, MaxSubjectLength = 72, WarningSubjectLength = 55 };
void updateCheckAllComboBox(); void updateCheckAllComboBox();
void checkAllToggled(); void checkAllToggled();
@@ -110,6 +112,7 @@ private:
int checkedFilesCount() const; int checkedFilesCount() const;
void wrapDescription(); void wrapDescription();
void trimDescription(); void trimDescription();
void clearDescriptionHint();
SubmitEditorWidgetPrivate *d; SubmitEditorWidgetPrivate *d;
}; };