From 852e51a691e564e551bb4b4fa53aac083a2240c7 Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Wed, 3 Feb 2010 17:44:24 +0100
Subject: [PATCH] Fixes: OpenDocumentsFilter does not show all opened documents
 after session restore

---
 .../editormanager/editormanager.cpp           |  2 +-
 .../editormanager/openeditorsmodel.cpp        |  8 ++++----
 .../editormanager/openeditorsmodel.h          |  2 +-
 src/plugins/locator/opendocumentsfilter.cpp   | 20 ++++++++++++-------
 src/plugins/locator/opendocumentsfilter.h     |  3 ++-
 src/plugins/qmldesigner/designmode.cpp        |  2 +-
 6 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp
index deb3c85b2f1..9056f03519a 100644
--- a/src/plugins/coreplugin/editormanager/editormanager.cpp
+++ b/src/plugins/coreplugin/editormanager/editormanager.cpp
@@ -1428,7 +1428,7 @@ void EditorManager::updateActions()
 {
     QString fName;
     IEditor *curEditor = currentEditor();
-    int openedCount = openedEditors().count() + m_d->m_editorModel->restoredEditorCount();
+    int openedCount = openedEditors().count() + m_d->m_editorModel->restoredEditors().count();
     if (curEditor) {
         if (!curEditor->file()->fileName().isEmpty()) {
             QFileInfo fi(curEditor->file()->fileName());
diff --git a/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp b/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp
index 65c6f498787..28e0afe1bb6 100644
--- a/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp
+++ b/src/plugins/coreplugin/editormanager/openeditorsmodel.cpp
@@ -188,15 +188,15 @@ void OpenEditorsModel::removeAllRestoredEditors()
     }
 }
 
-int OpenEditorsModel::restoredEditorCount() const
+QList<OpenEditorsModel::Entry> OpenEditorsModel::restoredEditors() const
 {
-    int count = 0;
+    QList<Entry> result;
     for (int i = m_editors.count()-1; i >= 0; --i) {
         if (!m_editors.at(i).editor) {
-            ++count;
+            result.append(m_editors.at(i));
         }
     }
-    return count;
+    return result;
 }
 
 bool OpenEditorsModel::isDuplicate(IEditor *editor) const
diff --git a/src/plugins/coreplugin/editormanager/openeditorsmodel.h b/src/plugins/coreplugin/editormanager/openeditorsmodel.h
index fb1e1cdb85a..208d125e367 100644
--- a/src/plugins/coreplugin/editormanager/openeditorsmodel.h
+++ b/src/plugins/coreplugin/editormanager/openeditorsmodel.h
@@ -72,10 +72,10 @@ public:
     void removeEditor(const QModelIndex &index);
 
     void removeAllRestoredEditors();
-    int restoredEditorCount() const;
     void emitDataChanged(IEditor *editor);
 
     QList<IEditor *> editors() const;
+    QList<Entry> restoredEditors() const;
     bool isDuplicate(IEditor *editor) const;
     QList<IEditor *> duplicatesFor(IEditor *editor) const;
     IEditor *originalForDuplicate(IEditor *duplicate) const;
diff --git a/src/plugins/locator/opendocumentsfilter.cpp b/src/plugins/locator/opendocumentsfilter.cpp
index 096db8b7ea6..42b03dab06a 100644
--- a/src/plugins/locator/opendocumentsfilter.cpp
+++ b/src/plugins/locator/opendocumentsfilter.cpp
@@ -56,13 +56,13 @@ QList<FilterEntry> OpenDocumentsFilter::matchesFor(const QString &entry)
     const QRegExp regexp(pattern, Qt::CaseInsensitive, QRegExp::Wildcard);
     if (!regexp.isValid())
         return value;
-    foreach (IEditor *editor, m_editors) {
-        QString fileName = editor->file()->fileName();
-        if (regexp.exactMatch(editor->displayName())) {
-            QString visibleName;
-            QVariant data;
+    foreach (const OpenEditorsModel::Entry &entry, m_editors) {
+        QString fileName = entry.fileName();
+        QString displayName = entry.displayName();
+        if (regexp.exactMatch(displayName)) {
             if (fileName.isEmpty()) {
-                value.append(FilterEntry(this, editor->displayName(), qVariantFromValue(editor)));
+                if (entry.editor)
+                    value.append(FilterEntry(this, displayName, qVariantFromValue(entry.editor)));
             } else {
                 QFileInfo fi(fileName);
                 FilterEntry entry(this, fi.fileName(), fileName);
@@ -77,7 +77,13 @@ QList<FilterEntry> OpenDocumentsFilter::matchesFor(const QString &entry)
 
 void OpenDocumentsFilter::refreshInternally()
 {
-    m_editors = m_editorManager->openedEditors();
+    m_editors.clear();
+    foreach (IEditor *editor, m_editorManager->openedEditors()) {
+        OpenEditorsModel::Entry entry;
+        entry.editor = editor;
+        m_editors.append(entry);
+    }
+    m_editors += m_editorManager->openedEditorsModel()->restoredEditors();
 }
 
 void OpenDocumentsFilter::refresh(QFutureInterface<void> &future)
diff --git a/src/plugins/locator/opendocumentsfilter.h b/src/plugins/locator/opendocumentsfilter.h
index b2f078ae391..7d01ebf99d2 100644
--- a/src/plugins/locator/opendocumentsfilter.h
+++ b/src/plugins/locator/opendocumentsfilter.h
@@ -39,6 +39,7 @@
 #include <QtGui/QWidget>
 
 #include <coreplugin/editormanager/editormanager.h>
+#include <coreplugin/editormanager/openeditorsmodel.h>
 #include <coreplugin/editormanager/ieditor.h>
 
 namespace Locator {
@@ -63,7 +64,7 @@ public slots:
 private:
     Core::EditorManager *m_editorManager;
 
-    QList<Core::IEditor *> m_editors;
+    QList<Core::OpenEditorsModel::Entry> m_editors;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qmldesigner/designmode.cpp b/src/plugins/qmldesigner/designmode.cpp
index ffa1578e238..4b824d3e4bc 100644
--- a/src/plugins/qmldesigner/designmode.cpp
+++ b/src/plugins/qmldesigner/designmode.cpp
@@ -256,7 +256,7 @@ void DesignMode::updateActions()
 
     Core::IEditor *curEditor = m_currentEditor.data();
     int openedCount = editorManager->openedEditors().count()
-                      + editorManager->openedEditorsModel()->restoredEditorCount();
+                      + editorManager->openedEditorsModel()->restoredEditors().count();
 
     QString fName;
     if (curEditor) {
-- 
GitLab