diff --git a/src/plugins/diffeditor/diffeditordocument.cpp b/src/plugins/diffeditor/diffeditordocument.cpp
index e34a18444444886c957204ea65e3b0673a463a29..470652aa2cbd53d10287fc196304ae988bd89527 100644
--- a/src/plugins/diffeditor/diffeditordocument.cpp
+++ b/src/plugins/diffeditor/diffeditordocument.cpp
@@ -127,4 +127,29 @@ bool DiffEditorDocument::open(QString *errorString, const QString &fileName)
     return true;
 }
 
+QString DiffEditorDocument::suggestedFileName() const
+{
+    QString result = QStringLiteral("0001");
+    const QString description = m_controller->description();
+    if (!description.isEmpty()) {
+        // Derive "git format-patch-type" file name from subject.
+        const int pos = description.indexOf(QLatin1String("\n\n    "));
+        const int endPos = pos >= 0 ? description.indexOf(QLatin1Char('\n'), pos + 6) : -1;
+        if (endPos > pos) {
+            const QChar space(QLatin1Char(' '));
+            const QChar dash(QLatin1Char('-'));
+            QString subject = description.mid(pos, endPos - pos);
+            for (int i = 0; i < subject.size(); ++i) {
+                if (!subject.at(i).isLetterOrNumber())
+                    subject[i] = space;
+            }
+            subject = subject.simplified();
+            subject.replace(space, dash);
+            result += dash;
+            result += subject;
+        }
+    }
+    return result + QStringLiteral(".patch");
+}
+
 } // namespace DiffEditor
diff --git a/src/plugins/diffeditor/diffeditordocument.h b/src/plugins/diffeditor/diffeditordocument.h
index 01c2400ba99a89d0dfdcfcf1b57f65a21841883f..05bc7c067e2d639290848ae4516968c50c4c1e7f 100644
--- a/src/plugins/diffeditor/diffeditordocument.h
+++ b/src/plugins/diffeditor/diffeditordocument.h
@@ -50,7 +50,7 @@ public:
 
     bool setContents(const QByteArray &contents);
     QString defaultPath() const;
-    QString suggestedFileName() const { return QString(); }
+    QString suggestedFileName() const Q_DECL_OVERRIDE;
 
     bool isModified() const { return false; }
     bool isSaveAsAllowed() const { return true; }