From f0218b8ff40aef693c9a554bfee2bc7673e315c8 Mon Sep 17 00:00:00 2001
From: mae <qt-info@nokia.com>
Date: Wed, 5 Aug 2009 15:55:31 +0200
Subject: [PATCH] fix occasionally broken link to the modified state of the
 editor

---
 .../coreplugin/editormanager/openeditorsmodel.cpp        | 9 +++++++--
 .../coreplugin/editormanager/openeditorswindow.cpp       | 9 +++++----
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp b/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp
index 601900b288b..f5e0f383ba1 100644
--- a/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp
+++ b/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp
@@ -72,6 +72,9 @@ QList<IEditor *> OpenEditorsModel::editors() const
 
 void OpenEditorsModel::addEditor(IEditor *editor, bool isDuplicate)
 {
+    if (!editor)
+        return;
+
     if (isDuplicate) {
         m_duplicateEditors.append(editor);
         return;
@@ -195,7 +198,7 @@ int OpenEditorsModel::restoredEditorCount() const
 
 bool OpenEditorsModel::isDuplicate(IEditor *editor) const
 {
-    return m_duplicateEditors.contains(editor);
+    return editor && m_duplicateEditors.contains(editor);
 }
 
 IEditor *OpenEditorsModel::originalForDuplicate(IEditor *duplicate) const
@@ -219,13 +222,15 @@ QList<IEditor *> OpenEditorsModel::duplicatesFor(IEditor *editor) const
 
 void OpenEditorsModel::makeOriginal(IEditor *duplicate)
 {
-    Q_ASSERT(isDuplicate(duplicate));
+    Q_ASSERT(duplicate && isDuplicate(duplicate));
     IEditor *original = originalForDuplicate(duplicate);
     Q_ASSERT(original);
     int i = findEditor(original);
     m_editors[i].editor = duplicate;
     m_duplicateEditors.removeOne(duplicate);
     m_duplicateEditors.append(original);
+    disconnect(original, SIGNAL(changed()), this, SLOT(itemChanged()));
+    connect(duplicate, SIGNAL(changed()), this, SLOT(itemChanged()));
 }
 
 void OpenEditorsModel::emitDataChanged(IEditor *editor)
diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
index 4db7b369af8..c86e5da5549 100644
--- a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
+++ b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp
@@ -199,14 +199,14 @@ void OpenEditorsWindow::setEditors(EditorView *mainView, EditorView *view, OpenE
 
     QSet<IFile*> filesDone;
     foreach (const EditLocation &hi, view->editorHistory()) {
-        if (hi.file == 0 || filesDone.contains(hi.file))
+        if (hi.file.isNull() || filesDone.contains(hi.file))
             continue;
         filesDone.insert(hi.file.data());
 
         QTreeWidgetItem *item = new QTreeWidgetItem();
 
         QString title = model->displayNameForFile(hi.file);
-        if (hi.file && hi.file->isModified())
+        if (hi.file->isModified())
             title += tr("*");
         item->setIcon(0, hi.file->isReadOnly() ? lockedIcon : emptyIcon);
         item->setText(0, title);
@@ -226,20 +226,21 @@ void OpenEditorsWindow::setEditors(EditorView *mainView, EditorView *view, OpenE
     // add missing editors from the main view
     if (mainView != view) {
         foreach (const EditLocation &hi, mainView->editorHistory()) {
-            if (hi.file == 0 || filesDone.contains(hi.file))
+            if (hi.file.isNull() || filesDone.contains(hi.file))
                 continue;
             filesDone.insert(hi.file.data());
 
             QTreeWidgetItem *item = new QTreeWidgetItem();
 
             QString title = model->displayNameForFile(hi.file);
-            if (hi.file && hi.file->isModified())
+            if (hi.file->isModified())
                 title += tr("*");
             item->setIcon(0, hi.file->isReadOnly() ? lockedIcon : emptyIcon);
             item->setText(0, title);
             item->setToolTip(0, hi.file->fileName());
             item->setData(0, Qt::UserRole, QVariant::fromValue(hi.file.data()));
             item->setData(0, Qt::UserRole+1, QVariant::fromValue(view));
+            item->setData(0, Qt::UserRole+2, QVariant::fromValue(hi.kind));
             item->setTextAlignment(0, Qt::AlignLeft);
 
             m_editorList->addTopLevelItem(item);
-- 
GitLab