From f29ce3d9b96f859c148b4c0c35ebefb9bab27364 Mon Sep 17 00:00:00 2001
From: Orgad Shaneh <orgad.shaneh@audiocodes.com>
Date: Wed, 11 Sep 2013 22:36:34 +0300
Subject: [PATCH] DiffEditor: Preserve source for state recovery

Task-number: QTCREATORBUG-10126
Change-Id: I707e7cdac84c91d52c5661718ac48e3d79fc7c91
Reviewed-by: Petar Perisin <petar.perisin@gmail.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
---
 src/plugins/diffeditor/diffeditorwidget.cpp | 10 ++++++++++
 src/plugins/diffeditor/diffeditorwidget.h   |  5 +++++
 src/plugins/git/gitclient.cpp               | 10 +++++++++-
 src/plugins/git/gitclient.h                 |  1 +
 4 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/plugins/diffeditor/diffeditorwidget.cpp b/src/plugins/diffeditor/diffeditorwidget.cpp
index 7ef2252a407..8c0c43b5707 100644
--- a/src/plugins/diffeditor/diffeditorwidget.cpp
+++ b/src/plugins/diffeditor/diffeditorwidget.cpp
@@ -890,6 +890,16 @@ QTextCodec *DiffEditorWidget::codec() const
     return const_cast<QTextCodec *>(m_leftEditor->codec());
 }
 
+QString DiffEditorWidget::source() const
+{
+    return m_source;
+}
+
+void DiffEditorWidget::setSource(const QString &source)
+{
+    m_source = source;
+}
+
 BaseTextEditorWidget *DiffEditorWidget::leftEditor() const
 {
     return m_leftEditor;
diff --git a/src/plugins/diffeditor/diffeditorwidget.h b/src/plugins/diffeditor/diffeditorwidget.h
index fe324c3eb1b..c1e11565eab 100644
--- a/src/plugins/diffeditor/diffeditorwidget.h
+++ b/src/plugins/diffeditor/diffeditorwidget.h
@@ -58,6 +58,7 @@ struct FileData;
 
 class DIFFEDITOR_EXPORT DiffEditorWidget : public QWidget
 {
+    Q_PROPERTY(QString source READ source WRITE setSource)
     Q_OBJECT
 public:
     struct DiffFileInfo {
@@ -83,6 +84,9 @@ public:
     void setDiff(const QList<DiffFilesContents> &diffFileList, const QString &workingDirectory = QString());
     QTextCodec *codec() const;
 
+    QString source() const;
+    void setSource(const  QString &source);
+
 #ifdef WITH_TESTS
     void testAssemblyRows();
 #endif // WITH_TESTS
@@ -151,6 +155,7 @@ private:
     bool m_syncScrollBars;
 
     bool m_foldingBlocker;
+    QString m_source;
 
     QTextCharFormat m_fileLineFormat;
     QTextCharFormat m_chunkLineFormat;
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 33cecb85d25..fa190062fe5 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -997,13 +997,17 @@ DiffEditor::DiffEditor *GitClient::findExistingDiffEditor(const char *registerDy
 }
 
 DiffEditor::DiffEditor *GitClient::createDiffEditor(const char *registerDynamicProperty,
-    const QString &dynamicPropertyValue, const QString &titlePattern, const Core::Id editorId) const
+                                                    const QString &dynamicPropertyValue,
+                                                    const QString &source,
+                                                    const QString &titlePattern,
+                                                    const Core::Id editorId) const
 {
     QString title = titlePattern;
     DiffEditor::DiffEditor *diffEditor = qobject_cast<DiffEditor::DiffEditor *>(
                 Core::EditorManager::openEditorWithContents(editorId, &title, m_msgWait.toUtf8()));
     QTC_ASSERT(diffEditor, return 0);
     diffEditor->document()->setProperty(registerDynamicProperty, dynamicPropertyValue);
+    diffEditor->editorWidget()->setSource(source);
 
     Core::EditorManager::activateEditor(diffEditor);
     return diffEditor;
@@ -1068,6 +1072,7 @@ void GitClient::diff(const QString &workingDirectory,
         DiffEditor::DiffEditor *diffEditor = findExistingDiffEditor(propertyName, workingDirectory);
         if (!diffEditor) {
             newEditor = diffEditor = createDiffEditor(propertyName,
+                                                      workingDirectory,
                                                       workingDirectory,
                                                       title,
                                                       DiffEditor::Constants::DIFF_EDITOR_ID);
@@ -1188,6 +1193,7 @@ void GitClient::diff(const QString &workingDirectory,
         DiffEditor::DiffEditor *diffEditor = findExistingDiffEditor(propertyName, sourceFile);
         if (!diffEditor) {
             newEditor = diffEditor = createDiffEditor(propertyName,
+                                                      sourceFile,
                                                       sourceFile,
                                                       title,
                                                       DiffEditor::Constants::DIFF_EDITOR_ID);
@@ -1252,6 +1258,7 @@ void GitClient::diffBranch(const QString &workingDirectory,
         if (!diffEditor) {
             newEditor = diffEditor = createDiffEditor(propertyName,
                                                       branchName,
+                                                      workingDirectory,
                                                       title,
                                                       DiffEditor::Constants::DIFF_EDITOR_ID);
         }
@@ -1413,6 +1420,7 @@ void GitClient::show(const QString &source, const QString &id,
         if (!diffEditor) {
             newEditor = diffEditor = createDiffEditor(propertyName,
                                                       id,
+                                                      source,
                                                       title,
                                                       DiffEditor::Constants::DIFF_SHOW_EDITOR_ID);
         }
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 969f7983e57..5b1631c3bd8 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -367,6 +367,7 @@ private:
                                             VcsBase::VcsBaseEditorParameterWidget *configWidget) const;
     DiffEditor::DiffEditor *createDiffEditor(const char *registerDynamicProperty,
                                              const QString &dynamicPropertyValue,
+                                             const QString &source,
                                              const QString &titlePattern,
                                              const Core::Id editorId) const;
 
-- 
GitLab