From b4946da9ea9a88bbe0987cd21da095268d355670 Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Mon, 24 Jul 2023 09:25:00 +0200 Subject: [PATCH] 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 --- src/plugins/vcsbase/submiteditorwidget.cpp | 24 +++++++++++++++++----- src/plugins/vcsbase/submiteditorwidget.h | 3 +++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/plugins/vcsbase/submiteditorwidget.cpp b/src/plugins/vcsbase/submiteditorwidget.cpp index 73d83586568..b4720e9439b 100644 --- a/src/plugins/vcsbase/submiteditorwidget.cpp +++ b/src/plugins/vcsbase/submiteditorwidget.cpp @@ -113,6 +113,7 @@ struct SubmitEditorWidgetPrivate QActionPushButton *m_submitButton = nullptr; QString m_description; QTimer delayedVerifyDescriptionTimer; + int m_delayedVerifyDescriptionInterval = 2000; int m_lineWidth = defaultLineWidth; int m_activatedRow = -1; @@ -154,7 +155,6 @@ SubmitEditorWidget::SubmitEditorWidget() : d->descriptionLayout->addWidget(d->description); d->delayedVerifyDescriptionTimer.setSingleShot(true); - d->delayedVerifyDescriptionTimer.setInterval(500); connect(&d->delayedVerifyDescriptionTimer, &QTimer::timeout, 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 { return d->m_description; @@ -579,8 +585,7 @@ void SubmitEditorWidget::hideDescription() void SubmitEditorWidget::verifyDescription() { if (!isEnabled()) { - d->descriptionHint->setText(QString()); - d->descriptionHint->setToolTip(QString()); + clearDescriptionHint(); return; } @@ -604,7 +609,6 @@ void SubmitEditorWidget::verifyDescription() subjectLength = descriptionLength; } - enum { MinSubjectLength = 20, MaxSubjectLength = 72, WarningSubjectLength = 55 }; QStringList hints; if (0 < subjectLength && subjectLength < MinSubjectLength) hints.append(warning + Tr::tr("Warning: The commit subject is very short.")); @@ -635,7 +639,17 @@ void SubmitEditorWidget::verifyDescription() void SubmitEditorWidget::descriptionTextChanged() { 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(); trimDescription(); // append field entries diff --git a/src/plugins/vcsbase/submiteditorwidget.h b/src/plugins/vcsbase/submiteditorwidget.h index 38fc1bf2744..9e0d54ffc4c 100644 --- a/src/plugins/vcsbase/submiteditorwidget.h +++ b/src/plugins/vcsbase/submiteditorwidget.h @@ -95,6 +95,8 @@ protected: void verifyDescription(); private: + enum { MinSubjectLength = 20, MaxSubjectLength = 72, WarningSubjectLength = 55 }; + void updateCheckAllComboBox(); void checkAllToggled(); @@ -110,6 +112,7 @@ private: int checkedFilesCount() const; void wrapDescription(); void trimDescription(); + void clearDescriptionHint(); SubmitEditorWidgetPrivate *d; };