diff --git a/src/libs/utils/submiteditorwidget.cpp b/src/libs/utils/submiteditorwidget.cpp index 10cade5c2e199f5adc962a735e81fc037d61328e..3b5c88b2b1dc698e2bde2a2aa64766ddccb081a1 100644 --- a/src/libs/utils/submiteditorwidget.cpp +++ b/src/libs/utils/submiteditorwidget.cpp @@ -172,6 +172,8 @@ SubmitEditorWidget::SubmitEditorWidget(QWidget *parent) : m_d->m_ui.description->setWordWrapMode(QTextOption::WordWrap); connect(m_d->m_ui.description, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(editorCustomContextMenuRequested(QPoint))); + connect(m_d->m_ui.description, SIGNAL(textChanged()), + this, SLOT(updateSubmitAction())); // File List m_d->m_ui.fileView->setContextMenuPolicy(Qt::CustomContextMenu); @@ -291,11 +293,12 @@ static QString wrappedText(const QTextEdit *e) QString SubmitEditorWidget::descriptionText() const { - QString rc = trimMessageText(lineWrap() ? wrappedText(m_d->m_ui.description) : m_d->m_ui.description->toPlainText()); + QString rc = trimMessageText(lineWrap() ? wrappedText(m_d->m_ui.description) : + m_d->m_ui.description->toPlainText()); // append field entries foreach(const SubmitFieldWidget *fw, m_d->m_fieldWidgets) rc += fw->fieldValues(); - return rc; + return cleanupDescription(rc); } void SubmitEditorWidget::setDescriptionText(const QString &text) @@ -495,6 +498,11 @@ unsigned SubmitEditorWidget::checkedFilesCount() const return checkedCount; } +QString SubmitEditorWidget::cleanupDescription(const QString &input) const +{ + return input; +} + void SubmitEditorWidget::changeEvent(QEvent *e) { QWidget::changeEvent(e); diff --git a/src/libs/utils/submiteditorwidget.h b/src/libs/utils/submiteditorwidget.h index c5bee5e357c32545d2f557b2b4c2f8d867963230..a02b024091b4b5c3d23db66ef348ab313ae8ca8e 100644 --- a/src/libs/utils/submiteditorwidget.h +++ b/src/libs/utils/submiteditorwidget.h @@ -139,6 +139,7 @@ public slots: void uncheckAll(); protected: + virtual QString cleanupDescription(const QString &) const; virtual void changeEvent(QEvent *e); void insertTopWidget(QWidget *w); diff --git a/src/plugins/git/gitsubmiteditor.cpp b/src/plugins/git/gitsubmiteditor.cpp index 8452142e7e4dbb2da2b57cc087ad8becc29e2ec5..f624f977c1f4bc871d018f8c41f729dec47f875c 100644 --- a/src/plugins/git/gitsubmiteditor.cpp +++ b/src/plugins/git/gitsubmiteditor.cpp @@ -120,25 +120,6 @@ void GitSubmitEditor::slotDiffSelected(const QStringList &files) emit diff(unstagedFiles, stagedFiles); } -QString GitSubmitEditor::fileContents() const -{ - // We need to manually purge out comment lines starting with - // hash '#' since git does not do that when using -F. - const QChar newLine = QLatin1Char('\n'); - const QChar hash = QLatin1Char('#'); - QString message = VCSBase::VCSBaseSubmitEditor::fileContents(); - for (int pos = 0; pos < message.size(); ) { - const int newLinePos = message.indexOf(newLine, pos); - const int startOfNextLine = newLinePos == -1 ? message.size() : newLinePos + 1; - if (message.at(pos) == hash) { - message.remove(pos, startOfNextLine - pos); - } else { - pos = startOfNextLine; - } - } - return message; -} - GitSubmitEditorPanelData GitSubmitEditor::panelData() const { return const_cast<GitSubmitEditor*>(this)->submitEditorWidget()->panelData(); diff --git a/src/plugins/git/gitsubmiteditor.h b/src/plugins/git/gitsubmiteditor.h index cf867a3c8e7fb912e37b7519c4d46eea4ae90a83..5f196a982bff316b915eb08527bec837e6ae9b57 100644 --- a/src/plugins/git/gitsubmiteditor.h +++ b/src/plugins/git/gitsubmiteditor.h @@ -54,8 +54,6 @@ public: void setCommitData(const CommitData &); GitSubmitEditorPanelData panelData() const; - virtual QString fileContents() const; - signals: void diff(const QStringList &unstagedFiles, const QStringList &stagedFiles); diff --git a/src/plugins/git/gitsubmiteditorwidget.cpp b/src/plugins/git/gitsubmiteditorwidget.cpp index 25e1a66693a0a15bd952c08c1d34ee2a14bba3f6..2fad91460ce1d2118da0346a6d4a5428fb6e0433 100644 --- a/src/plugins/git/gitsubmiteditorwidget.cpp +++ b/src/plugins/git/gitsubmiteditorwidget.cpp @@ -151,12 +151,35 @@ void GitSubmitEditorWidget::setPanelData(const GitSubmitEditorPanelData &data) bool GitSubmitEditorWidget::canSubmit() const { + QString message = cleanupDescription(descriptionText()).trimmed(); + if (m_gitSubmitPanelUi.invalidAuthorLabel->isVisible() - || m_gitSubmitPanelUi.invalidEmailLabel->isVisible()) + || m_gitSubmitPanelUi.invalidEmailLabel->isVisible() + || message.isEmpty()) return false; return SubmitEditorWidget::canSubmit(); } +QString GitSubmitEditorWidget::cleanupDescription(const QString &input) const +{ + // We need to manually purge out comment lines starting with + // hash '#' since git does not do that when using -F. + const QChar newLine = QLatin1Char('\n'); + const QChar hash = QLatin1Char('#'); + QString message = input; + for (int pos = 0; pos < message.size(); ) { + const int newLinePos = message.indexOf(newLine, pos); + const int startOfNextLine = newLinePos == -1 ? message.size() : newLinePos + 1; + if (message.at(pos) == hash) { + message.remove(pos, startOfNextLine - pos); + } else { + pos = startOfNextLine; + } + } + return message; + +} + void GitSubmitEditorWidget::authorInformationChanged() { bool bothEmpty = m_gitSubmitPanelUi.authorLineEdit->text().isEmpty() && diff --git a/src/plugins/git/gitsubmiteditorwidget.h b/src/plugins/git/gitsubmiteditorwidget.h index 64e4c5aac3c90d3e1937d84adcdc3833082ac6dc..16de5f3a480249753931212043ccb3f9af4dd6df 100644 --- a/src/plugins/git/gitsubmiteditorwidget.h +++ b/src/plugins/git/gitsubmiteditorwidget.h @@ -67,6 +67,7 @@ public: protected: bool canSubmit() const; + QString cleanupDescription(const QString &) const; private slots: void authorInformationChanged();