diff --git a/src/libs/utils/submiteditorwidget.h b/src/libs/utils/submiteditorwidget.h index 37d1c8b0bd959764b8a77625aaf6045b5f8288a4..c5bee5e357c32545d2f557b2b4c2f8d867963230 100644 --- a/src/libs/utils/submiteditorwidget.h +++ b/src/libs/utils/submiteditorwidget.h @@ -126,6 +126,8 @@ public: void addSubmitFieldWidget(SubmitFieldWidget *f); QList<SubmitFieldWidget *> submitFieldWidgets() const; + virtual bool canSubmit() const; + signals: void diffSelected(const QStringList &); void fileSelectionChanged(bool someFileSelected); @@ -139,7 +141,6 @@ public slots: protected: virtual void changeEvent(QEvent *e); void insertTopWidget(QWidget *w); - virtual bool canSubmit() const; protected slots: void updateSubmitAction(); diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp index 25113a7a6def22b3fdbb269ab6cc86b0798d53d0..3f26eaf8f4a0a53b543f11fcc91f98c1b96b1909 100644 --- a/src/plugins/git/gitplugin.cpp +++ b/src/plugins/git/gitplugin.cpp @@ -756,8 +756,8 @@ bool GitPlugin::submitEditorAboutToClose(VCSBase::VCSBaseSubmitEditor *submitEdi const VCSBase::VCSBaseSubmitEditor::PromptSubmitResult answer = editor->promptSubmit(tr("Closing Git Editor"), tr("Do you want to commit the change?"), - tr("The commit message check failed. Do you want to commit the change?"), - &settings.promptToSubmit, !m_submitActionTriggered); + tr("Git will not accept this commit. Do you want to continue to edit it?"), + &settings.promptToSubmit, !m_submitActionTriggered, false); m_submitActionTriggered = false; switch (answer) { case VCSBase::VCSBaseSubmitEditor::SubmitCanceled: diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp index cfc10e88b888da00e06e4840edfee2f9048aed3b..a3a2b9618a5930f713e783862b58d687e0a1b1c4 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.cpp +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.cpp @@ -464,8 +464,12 @@ VCSBaseSubmitEditor::PromptSubmitResult const QString &question, const QString &checkFailureQuestion, bool *promptSetting, - bool forcePrompt) const + bool forcePrompt, + bool canCommitOnFailure) const { + Utils::SubmitEditorWidget *submitWidget = + static_cast<Utils::SubmitEditorWidget *>(const_cast<VCSBaseSubmitEditor *>(this)->widget()); + raiseSubmitEditor(); QString errorMessage; @@ -476,7 +480,8 @@ VCSBaseSubmitEditor::PromptSubmitResult QWidget *parent = Core::ICore::instance()->mainWindow(); // Pop up a message depending on whether the check succeeded and the // user wants to be prompted - if (checkSubmitMessage(&errorMessage)) { + bool canCommit = checkSubmitMessage(&errorMessage) && submitWidget->canSubmit(); + if (canCommit) { // Check ok, do prompt? if (prompt) { // Provide check box to turn off prompt ONLY if it was not forced @@ -503,14 +508,26 @@ VCSBaseSubmitEditor::PromptSubmitResult msgBox.setMinimumWidth(checkDialogMinimumWidth); answer = static_cast<QMessageBox::StandardButton>(msgBox.exec()); } - switch (answer) { - case QMessageBox::No: - return SubmitDiscarded; - case QMessageBox::Yes: - return SubmitConfirmed; - default: - break; + if (!canCommit && !canCommitOnFailure) { + switch (answer) { + case QMessageBox::No: + return SubmitDiscarded; + case QMessageBox::Yes: + return SubmitCanceled; + default: + break; + } + } else { + switch (answer) { + case QMessageBox::No: + return SubmitDiscarded; + case QMessageBox::Yes: + return SubmitConfirmed; + default: + break; + } } + return SubmitCanceled; } diff --git a/src/plugins/vcsbase/vcsbasesubmiteditor.h b/src/plugins/vcsbase/vcsbasesubmiteditor.h index 2880043c53366a57a2280e5afa209ebd8b1bb278..a92207b733edda5e253c356405df8b70d6b56ae8 100644 --- a/src/plugins/vcsbase/vcsbasesubmiteditor.h +++ b/src/plugins/vcsbase/vcsbasesubmiteditor.h @@ -115,7 +115,8 @@ public: PromptSubmitResult promptSubmit(const QString &title, const QString &question, const QString &checkFailureQuestion, bool *promptSetting, - bool forcePrompt = false) const; + bool forcePrompt = false, + bool canCommitOnFailure = true) const; int fileNameColumn() const; void setFileNameColumn(int c);